第 6 章 結論
C.3 レイヤクラス
付録
139
付録
140
7 # i n c l u d e " R T C O P / C o r e / P a r t i a l C l a s s M e m b e r s . h "
8 # i n c l u d e " R T C O P _ G e n e r a t e d / D e p e n d e n t C o d e / G e t V i r t u a l F u n c t i o n T a b l e . h "
9 # i n c l u d e < cstring >
10
11 n a m e s p a c e R T C O P {
12 n a m e s p a c e G e n e r a t e d {
13
14 // イ ン ス タ ン ス の 取 得
15 B a s e L a y e r * B a s e L a y e r :: G e t I n s t a n c e () {
16 r e t u r n ( B a s e L a y e r *) R T C O P :: F r a m e w o r k :: I n s t a n c e - > G e t R T C O P M a n a g e r () - > G e t L a y e r ((int) L a y e r I D :: B a s e L a y e r );
17 }
18 // コ ン ス ト ラ ク タ
19 B a s e L a y e r :: B a s e L a y e r (c o n s t int id , c o n s t c h a r* c o n s t name , int n u m O f B a s e C l a s s e s , int* n u m O f B a s e M e t h o d s )
20 : C o r e :: L a y e r ( id , name , n u m O f B a s e C l a s s e s , n u m O f B a s e M e t h o d s ) {
21 // H e l l oク ラ ス の 仮 想 関 数 テ ー ブ ル
22 int s i z e 0 = s i z e o f(v o l a t i l e v o i d*) * n u m O f B a s e M e t h o d s [ 0 ] ;
23 v o l a t i l e v o i d** v i r t u a l F u n c t i o n T a b l e 0 = D e p e n d e n t C o d e ::
H e l l o C l a s s :: G e t V i r t u a l F u n c t i o n T a b l e (t h i s);
24 std :: m e m c p y ( _ P r i v a t e - > _ V i r t u a l F u n c t i o n T a b l e s [0] , v i r t u a l F u n c t i o n T a b l e 0 , s i z e 0 );
25 }
26 // デ ス ト ラ ク タ
27 B a s e L a y e r ::~ B a s e L a y e r () {
28 }
29 // レ イ ヤ ー ド オ ブ ジ ェ ク ト の 初 期 化
30 v o i d* B a s e L a y e r :: I n i t i a l i z e L a y e r d O b j e c t (v o i d* obj , int c l a s s I D ) {
31 r e t u r n obj ;
32 }
33
34 } // n a m e s p a c e G e n e r a t e d {}
35 } // n a m e s p a c e R T C O P {}
ソースコード C.39 EnglishLayer.h
1 # i f n d e f _ _ R T C O P _ G E N E R A T E D _ E N G L I S H L A Y E R _ _
2 # d e f i n e _ _ R T C O P _ G E N E R A T E D _ E N G L I S H L A Y E R _ _
3
4 // 機 能 実 現 の た め の ヘ ッ ダ
5 # i n c l u d e " R T C O P / C o r e / L a y e r . h "
付録
141
6 # i n c l u d e " R T C O P / C o r e / L a y e r d O b j e c t . h "
7 # i n c l u d e " R T C O P / C o r e / P a r t i a l C l a s s M e m b e r s . h "
8 // E n g l i s h L a y e rに 含 ま れ る ク ラ ス の ヘ ッ ダ
9 # i n c l u d e " H e l l o . h "
10
11 n a m e s p a c e R T C O P {
12 n a m e s p a c e G e n e r a t e d {
13
14 // E n g l i s hレ イ ヤ
15 c l a s s E n g l i s h L a y e r : p u b l i c R T C O P :: C o r e :: L a y e r {
16 p u b l i c:
17 // イ ン ス タ ン ス の 取 得
18 s t a t i c E n g l i s h L a y e r * G e t I n s t a n c e ();
19 p u b l i c:
20 // コ ン ス ト ラ ク タ ・ デ ス ト ラ ク タ
21 E n g l i s h L a y e r (c o n s t int id , c o n s t c h a r* c o n s t name , int n u m O f B a s e C l a s s e s , int* n u m O f B a s e M e t h o d s );
22 v i r t u a l ~ E n g l i s h L a y e r ();
23 p r o t e c t e d:
24 // レ イ ヤ ー ド オ ブ ジ ェ ク ト の 初 期 化
25 v i r t u a l v o i d* I n i t i a l i z e L a y e r d O b j e c t (v o i d* obj , int c l a s s I D );
26 p r o t e c t e d:
27 // イ ベ ン ト 発 生 時 に 実 行 さ れ る メ ソ ッ ド
28 v i r t u a l v o i d O n A c t i v a t i n g (); // ア ク テ ィ ベ ー ト 開 始 時
29 v i r t u a l v o i d O n A c t i v a t e d (); // ア ク テ ィ ベ ー ト 終 了 時
30 v i r t u a l v o i d O n D e a c t i v a t i n g (); // デ ィ ア ク テ ィ ベ ー ト 開 始 時
31 v i r t u a l v o i d O n D e a c t i v a t e d (); // デ ィ ア ク テ ィ ベ ー ト 終 了 時
32 };
33
34 // E n g l i s hレ イ ヤ のH e l l o
35 c l a s s E n g l i s h L a y e r _ H e l l o : p u b l i c R T C O P :: C o r e :: L a y e r d O b j e c t <
Hello > {
36 p u b l i c:
37 // パ ー シ ャ ル ク ラ ス の メ ン バ 変 数
38 c l a s s P a r t i a l C l a s s M e m b e r s : p u b l i c R T C O P :: C o r e ::
P a r t i a l C l a s s M e m b e r s {
39 p u b l i c:
40 int _ E n g l i s h M e m b e r ;
41 };
42 p u b l i c:
43 E n g l i s h L a y e r _ H e l l o ();
44 v i r t u a l v o i d P r i n t ();
45 p r i v a t e:
46 v o i d _ I n i t i a l i z e P a r t i a l C l a s s ();
付録
142
47 v o i d _ F i n a l i z e P a r t i a l C l a s s ();
48 p u b l i c:
49 f r i e n d E n g l i s h L a y e r ;
50 };
51
52 } // n a m e s p a c e G e n e r a t e d {}
53 } // n a m e s p a c e R T C O P {}
54
55 # e n d i f // ! _ _ R T C O P _ G E N E R A T E D _ E N G L I S H L A Y E R _ _
ソースコードC.40 EnglishLayer.cpp
1 # i n c l u d e " R T C O P _ G e n e r a t e d / API . h "
2 # i n c l u d e " R T C O P _ G e n e r a t e d / E n g l i s h L a y e r . h "
3 # i n c l u d e " R T C O P _ G e n e r a t e d / L a y e r _ P r i v a t e . h "
4 # i n c l u d e " R T C O P _ G e n e r a t e d / L a y e r d O b j e c t _ P r i v a t e . h "
5 # i n c l u d e " R T C O P / F r a m e w o r k . h "
6 # i n c l u d e " R T C O P / C o r e / R T C O P M a n a g e r . h "
7 # i n c l u d e " R T C O P _ G e n e r a t e d / D e p e n d e n t C o d e / E x e c u t e P r o c e e d . h "
8 # i n c l u d e " R T C O P _ G e n e r a t e d / D e p e n d e n t C o d e / G e t V i r t u a l F u n c t i o n T a b l e . h "
9 # i n c l u d e " R T C O P _ G e n e r a t e d / D e p e n d e n t C o d e / G e t L a y e r d O b j e c t F i n a l i z e r . h "
10 # i n c l u d e < i o s t r e a m >
11 # i n c l u d e < cstring >
12
13 # i n c l u d e " H e l l o . h "
14 # i n c l u d e < s t d i o . h >
15
16 n a m e s p a c e R T C O P {
17 n a m e s p a c e G e n e r a t e d {
18
19 //
-20 // レ イ ヤ の 実 装
21 //
-22 // イ ン ス タ ン ス の 取 得
23 E n g l i s h L a y e r * E n g l i s h L a y e r :: G e t I n s t a n c e () {
24 r e t u r n ( E n g l i s h L a y e r *) R T C O P :: F r a m e w o r k :: I n s t a n c e - >
G e t R T C O P M a n a g e r () - > G e t L a y e r ((int) L a y e r I D :: E n g l i s h L a y e r );
25 }
26 // コ ン ス ト ラ ク タ
27 E n g l i s h L a y e r :: E n g l i s h L a y e r (c o n s t int id , c o n s t c h a r* c o n s t name , int n u m O f B a s e C l a s s e s , int* n u m O f B a s e M e t h o d s )
付録
143
28 : R T C O P :: C o r e :: L a y e r ( id , name , n u m O f B a s e C l a s s e s , n u m O f B a s e M e t h o d s ) {
29 // H e l l oク ラ ス の 仮 想 関 数 テ ー ブ ル
30 int s i z e 0 = s i z e o f(v o l a t i l e v o i d*) * n u m O f B a s e M e t h o d s [ 0 ] ;
31 v o l a t i l e v o i d** v i r t u a l F u n c t i o n T a b l e 0 = D e p e n d e n t C o d e ::
H e l l o C l a s s :: G e t V i r t u a l F u n c t i o n T a b l e (t h i s);
32 std :: m e m c p y ( _ P r i v a t e - > _ V i r t u a l F u n c t i o n T a b l e s [0] , v i r t u a l F u n c t i o n T a b l e 0 , s i z e 0 );
33 // 再 定 義 な し の メ ソ ッ ド や デ ス ト ラ ク タ は0に し て お く
34 _ P r i v a t e - > _ V i r t u a l F u n c t i o n T a b l e s [ 0 ] [ 1 ] = 0;
35 _ P r i v a t e - > _ V i r t u a l F u n c t i o n T a b l e s [ 0 ] [ 2 ] = 0;
36 # if d e f i n e d ( L I N U X _ X 8 6 ) || d e f i n e d ( L I N U X _ X 6 4 ) || d e f i n e d (
L I N U X _ A R M ) || d e f i n e d ( L I N U X _ A R M 6 4 ) || d e f i n e d ( W I N 3 2 _ M I N G W )
|| d e f i n e d ( W I N 6 4 _ M I N G W ) || d e f i n e d ( M A C O S _ X 6 4 )
37 _ P r i v a t e - > _ V i r t u a l F u n c t i o n T a b l e s [ 0 ] [ 3 ] = 0;
38 # e n d i f
39 }
40 // デ ス ト ラ ク タ
41 E n g l i s h L a y e r ::~ E n g l i s h L a y e r () {
42 }
43 // レ イ ヤ ー ド オ ブ ジ ェ ク ト の 初 期 化
44 v o i d* E n g l i s h L a y e r :: I n i t i a l i z e L a y e r d O b j e c t (v o i d* obj , int c l a s s I D ) {
45 int l a y e r I D = _ P r i v a t e - > _ID ;
46 if ( c l a s s I D == 0) {
47 // キ ャ ス ト
48 E n g l i s h L a y e r _ H e l l o * l a y e r d O b j e c t = r e i n t e r p r e t _ c a s t<
E n g l i s h L a y e r _ H e l l o * >( obj );
49 // パ ー シ ャ ル ク ラ ス の た め の メ ン バ 変 数
50 l a y e r d O b j e c t - > _ P r i v a t e - > _ P a r t i a l C l a s s M e m b e r s [ l a y e r I D ] = new E n g l i s h L a y e r _ H e l l o :: P a r t i a l C l a s s M e m b e r s ();
51 // レ イ ヤ
52 l a y e r d O b j e c t - > _ P r i v a t e - > _ P a r t i a l C l a s s M e m b e r s [ l a y e r I D ] - > _ L a y e r
= t h i s;
53 // P r o c e e d実 現 の た め の 仮 想 関 数 テ ー ブ ル
54 l a y e r d O b j e c t - > _ P r i v a t e - > _ P a r t i a l C l a s s M e m b e r s [ l a y e r I D ] - >
_ V i r t u a l F u n c t i o n T a b l e F o r P r o c e e d i n g =
55 _ P r i v a t e - > _ V i r t u a l F u n c t i o n T a b l e s F o r P r o c e e d i n g [ c l a s s I D ];
56 // パ ー シ ャ ル ク ラ ス の 処 分 を 行 う メ ソ ッ ド へ の 関 数 ポ イ ン タ
57 v o l a t i l e v o i d* vfp = D e p e n d e n t C o d e :: G e t L a y e r d O b j e c t F i n a l i z e r ( l a y e r d O b j e c t );
58 l a y e r d O b j e c t - > _ P r i v a t e - > _ P a r t i a l C l a s s M e m b e r s [ l a y e r I D ] - >
_ F i n a l i z e r = vfp ;
59 // ユ ー ザ 定 義 の 初 期 化
付録
144
60 l a y e r d O b j e c t - > _ I n i t i a l i z e P a r t i a l C l a s s ();
61 }
62 r e t u r n obj ;
63 }
64 // ア ク テ ィ ベ ー ト 開 始 時 に 実 行 さ れ る
65 v o i d E n g l i s h L a y e r :: O n A c t i v a t i n g () {
66 p r i n t f (" % s A c t i v a t i n g : % d \ n ", _ P r i v a t e - > _Name , (int) _ P r i v a t e - >
_ L a y e r S t a t e );
67 }
68 // ア ク テ ィ ベ ー ト 終 了 時 に 実 行 さ れ る
69 v o i d E n g l i s h L a y e r :: O n A c t i v a t e d () {
70 p r i n t f (" % s A c t i v a t e d : % d \ n ", _ P r i v a t e - > _Name , (int) _ P r i v a t e - >
_ L a y e r S t a t e );
71 }
72 // デ ィ ア ク テ ィ ベ ー ト 開 始 時 に 実 行 さ れ る
73 v o i d E n g l i s h L a y e r :: O n D e a c t i v a t i n g () {
74 p r i n t f (" % s D e a c t i v a t i n g : % d \ n ", _ P r i v a t e - > _Name , (int) _ P r i v a t e - > _ L a y e r S t a t e );
75 }
76 // デ ィ ア ク テ ィ ベ ー ト 終 了 時 に 実 行 さ れ る
77 v o i d E n g l i s h L a y e r :: O n D e a c t i v a t e d () {
78 p r i n t f (" % s D e a c t i v a t e d : % d \ n ", _ P r i v a t e - > _Name , (int) _ P r i v a t e - >
_ L a y e r S t a t e );
79 }
80
81 //
-82 // H e l l oの 実 装
83 //
-84 // コ ン ス ト ラ ク タ
85 // こ れ は 、 仮 想 関 数 テ ー ブ ル 取 得 用
86 E n g l i s h L a y e r _ H e l l o :: E n g l i s h L a y e r _ H e l l o ()
87 : R T C O P :: C o r e :: L a y e r d O b j e c t < Hello >() {
88 }
89 // パ ー シ ャ ル メ ソ ッ ド1
90 v o i d E n g l i s h L a y e r _ H e l l o :: P r i n t () {
91 // 準 備
92 E n g l i s h L a y e r _ H e l l o :: P a r t i a l C l a s s M e m b e r s * l a y e r m e m b e r s = ( E n g l i s h L a y e r _ H e l l o :: P a r t i a l C l a s s M e m b e r s *) _ P r i v a t e - >
_ P a r t i a l C l a s s M e m b e r s [ 2 ] ;
93 a u t o p r o c e e d = [this, l a y e r m e m b e r s ]() { D e p e n d e n t C o d e ::
H e l l o C l a s s :: E x e c u t e P r o c e e d _ P r i n t (this, l a y e r m e m b e r s - >
_ V i r t u a l F u n c t i o n T a b l e F o r P r o c e e d i n g [ 0 ] ) ; };
94 // レ イ ヤ 記 述 の 内 容
95 p r i n t f (" P r i n t : H e l l o % d \ n ", l a y e r m e m b e r s - > _ E n g l i s h M e m b e r );
付録
145
96 p r o c e e d ();
97 }
98 // パ ー シ ャ ル ク ラ ス の 初 期 化
99 v o i d E n g l i s h L a y e r _ H e l l o :: _ I n i t i a l i z e P a r t i a l C l a s s () {
100 // レ イ ヤ 記 述 の 内 容
101 E n g l i s h L a y e r _ H e l l o :: P a r t i a l C l a s s M e m b e r s * m e m b e r s = ( E n g l i s h L a y e r _ H e l l o :: P a r t i a l C l a s s M e m b e r s *) _ P r i v a t e - >
_ P a r t i a l C l a s s M e m b e r s [ 2 ] ;
102 members - > _ E n g l i s h M e m b e r = 5;
103 }
104 // パ ー シ ャ ル ク ラ ス の 終 了 処 理
105 v o i d E n g l i s h L a y e r _ H e l l o :: _ F i n a l i z e P a r t i a l C l a s s () {
106 // レ イ ヤ 記 述 の 内 容
107 E n g l i s h L a y e r _ H e l l o :: P a r t i a l C l a s s M e m b e r s * m e m b e r s = ( E n g l i s h L a y e r _ H e l l o :: P a r t i a l C l a s s M e m b e r s *) _ P r i v a t e - >
_ P a r t i a l C l a s s M e m b e r s [ 2 ] ;
108 members - > _ E n g l i s h M e m b e r = 0;
109 // 共 通 の 終 了 処 理
110 /*今は無し*/
111 }
112
113 } // n a m e s p a c e G e n e r a t e d {}
114 } // n a m e s p a c e R T C O P {}
ソースコード C.41 JapaneseLayer.h
1 # i f n d e f _ _ R T C O P _ G E N E R A T E D _ J A P A N E S E L A Y E R _ _
2 # d e f i n e _ _ R T C O P _ G E N E R A T E D _ J A P A N E S E L A Y E R _ _
3
4 // 機 能 実 現 の た め の ヘ ッ ダ
5 # i n c l u d e " R T C O P / C o r e / L a y e r . h "
6 # i n c l u d e " R T C O P / C o r e / L a y e r d O b j e c t . h "
7 # i n c l u d e " R T C O P / C o r e / P a r t i a l C l a s s M e m b e r s . h "
8 // J a p a n e s e L a y e rに 含 ま れ る ク ラ ス の ヘ ッ ダ
9 # i n c l u d e " H e l l o . h "
10
11 n a m e s p a c e R T C O P {
12 n a m e s p a c e G e n e r a t e d {
13
14 // J a p a n e s eレ イ ヤ
15 c l a s s J a p a n e s e L a y e r : p u b l i c C o r e :: L a y e r {
16 p u b l i c:
17 // イ ン ス タ ン ス の 取 得
付録
146
18 s t a t i c J a p a n e s e L a y e r * G e t I n s t a n c e ();
19 p u b l i c:
20 // コ ン ス ト ラ ク タ ・ デ ス ト ラ ク タ
21 J a p a n e s e L a y e r (c o n s t int id , c o n s t c h a r* c o n s t name , int n u m O f B a s e C l a s s e s , int* n u m O f B a s e M e t h o d s );
22 v i r t u a l ~ J a p a n e s e L a y e r ();
23 p r o t e c t e d:
24 // レ イ ヤ ー ド オ ブ ジ ェ ク ト の 初 期 化
25 v i r t u a l v o i d* I n i t i a l i z e L a y e r d O b j e c t (v o i d* obj , int c l a s s I D );
26 p r o t e c t e d:
27 // イ ベ ン ト 発 生 時 に 実 行 さ れ る メ ソ ッ ド
28 v i r t u a l v o i d O n A c t i v a t i n g (); // ア ク テ ィ ベ ー ト 開 始 時
29 v i r t u a l v o i d O n A c t i v a t e d (); // ア ク テ ィ ベ ー ト 終 了 時
30 v i r t u a l v o i d O n D e a c t i v a t i n g (); // デ ィ ア ク テ ィ ベ ー ト 開 始 時
31 v i r t u a l v o i d O n D e a c t i v a t e d (); // デ ィ ア ク テ ィ ベ ー ト 終 了 時
32 };
33
34 // J a p a n e s eレ イ ヤ のH e l l o
35 c l a s s J a p a n e s e L a y e r _ H e l l o : p u b l i c C o r e :: L a y e r d O b j e c t < Hello > {
36 p u b l i c:
37 // パ ー シ ャ ル ク ラ ス の メ ン バ 変 数
38 c l a s s P a r t i a l C l a s s M e m b e r s : p u b l i c R T C O P :: C o r e ::
P a r t i a l C l a s s M e m b e r s {
39 p u b l i c:
40 int _ J a p a n e s e M e m b e r ;
41 };
42 p u b l i c:
43 J a p a n e s e L a y e r _ H e l l o ();
44 v i r t u a l v o i d P r i n t ();
45 v i r t u a l v o i d P r i n t 2 (c h a r arg );
46 p r i v a t e:
47 v o i d _ I n i t i a l i z e P a r t i a l C l a s s ();
48 v o i d _ F i n a l i z e P a r t i a l C l a s s ();
49 p u b l i c:
50 f r i e n d J a p a n e s e L a y e r ;
51 };
52
53 } // n a m e s p a c e G e n e r a t e d {}
54 } // n a m e s p a c e R T C O P {}
55
56 # e n d i f // ! _ _ R T C O P _ G E N E R A T E D _ J A P A N E S E L A Y E R _ _
付録
147
ソースコード C.42 JapaneseLayer.cpp1 # i n c l u d e " R T C O P _ G e n e r a t e d / API . h "
2 # i n c l u d e " R T C O P _ G e n e r a t e d / J a p a n e s e L a y e r . h "
3 # i n c l u d e " R T C O P _ G e n e r a t e d / L a y e r _ P r i v a t e . h "
4 # i n c l u d e " R T C O P _ G e n e r a t e d / L a y e r d O b j e c t _ P r i v a t e . h "
5 # i n c l u d e " R T C O P / F r a m e w o r k . h "
6 # i n c l u d e " R T C O P / C o r e / R T C O P M a n a g e r . h "
7 # i n c l u d e " R T C O P _ G e n e r a t e d / D e p e n d e n t C o d e / E x e c u t e P r o c e e d . h "
8 # i n c l u d e " R T C O P _ G e n e r a t e d / D e p e n d e n t C o d e / G e t V i r t u a l F u n c t i o n T a b l e . h "
9 # i n c l u d e " R T C O P _ G e n e r a t e d / D e p e n d e n t C o d e / G e t L a y e r d O b j e c t F i n a l i z e r . h "
10 # i n c l u d e < i o s t r e a m >
11 # i n c l u d e < cstring >
12
13 # i n c l u d e " H e l l o . h "
14 # i n c l u d e < s t d i o . h >
15
16 n a m e s p a c e R T C O P {
17 n a m e s p a c e G e n e r a t e d {
18
19 //
-20 // レ イ ヤ の 実 装
21 //
-22 // イ ン ス タ ン ス の 取 得
23 J a p a n e s e L a y e r * J a p a n e s e L a y e r :: G e t I n s t a n c e () {
24 r e t u r n ( J a p a n e s e L a y e r *) R T C O P :: F r a m e w o r k :: I n s t a n c e - >
G e t R T C O P M a n a g e r () - > G e t L a y e r ((int) L a y e r I D :: J a p a n e s e L a y e r );
25 }
26 // コ ン ス ト ラ ク タ
27 J a p a n e s e L a y e r :: J a p a n e s e L a y e r (c o n s t int id , c o n s t c h a r* c o n s t name , int n u m O f B a s e C l a s s e s , int* n u m O f B a s e M e t h o d s )
28 : R T C O P :: C o r e :: L a y e r ( id , name , n u m O f B a s e C l a s s e s , n u m O f B a s e M e t h o d s ) {
29 // H e l l oク ラ ス の 仮 想 関 数 テ ー ブ ル
30 int s i z e 0 = s i z e o f(v o l a t i l e v o i d*) * n u m O f B a s e M e t h o d s [ 0 ] ;
31 v o l a t i l e v o i d** v i r t u a l F u n c t i o n T a b l e 0 = D e p e n d e n t C o d e ::
H e l l o C l a s s :: G e t V i r t u a l F u n c t i o n T a b l e (t h i s);
32 std :: m e m c p y ( _ P r i v a t e - > _ V i r t u a l F u n c t i o n T a b l e s [0] , v i r t u a l F u n c t i o n T a b l e 0 , s i z e 0 );
33 // 再 定 義 な し の メ ソ ッ ド や デ ス ト ラ ク タ は0に し て お く
34 _ P r i v a t e - > _ V i r t u a l F u n c t i o n T a b l e s [ 0 ] [ 2 ] = 0;
35 # if d e f i n e d ( L I N U X _ X 8 6 ) || d e f i n e d ( L I N U X _ X 6 4 ) || d e f i n e d (
付録
148
L I N U X _ A R M ) || d e f i n e d ( L I N U X _ A R M 6 4 ) || d e f i n e d ( W I N 3 2 _ M I N G W )
|| d e f i n e d ( W I N 6 4 _ M I N G W ) || d e f i n e d ( M A C O S _ X 6 4 )
36 _ P r i v a t e - > _ V i r t u a l F u n c t i o n T a b l e s [ 0 ] [ 3 ] = 0;
37 # e n d i f
38 }
39 // デ ス ト ラ ク タ
40 J a p a n e s e L a y e r ::~ J a p a n e s e L a y e r () {
41 }
42 // レ イ ヤ ー ド オ ブ ジ ェ ク ト の 初 期 化
43 v o i d* J a p a n e s e L a y e r :: I n i t i a l i z e L a y e r d O b j e c t (v o i d* obj , int c l a s s I D ) {
44 int l a y e r I D = _ P r i v a t e - > _ID ;
45 if( c l a s s I D == 0) {
46 // キ ャ ス ト
47 J a p a n e s e L a y e r _ H e l l o * l a y e r d O b j e c t = r e i n t e r p r e t _ c a s t<
J a p a n e s e L a y e r _ H e l l o * >( obj );
48 // パ ー シ ャ ル ク ラ ス の た め の メ ン バ 変 数
49 l a y e r d O b j e c t - > _ P r i v a t e - > _ P a r t i a l C l a s s M e m b e r s [ l a y e r I D ] = new J a p a n e s e L a y e r _ H e l l o :: P a r t i a l C l a s s M e m b e r s ();
50 // レ イ ヤ
51 l a y e r d O b j e c t - > _ P r i v a t e - > _ P a r t i a l C l a s s M e m b e r s [ l a y e r I D ] - > _ L a y e r
= t h i s;
52 // P r o c e e d実 現 の た め の 仮 想 関 数 テ ー ブ ル
53 l a y e r d O b j e c t - > _ P r i v a t e - > _ P a r t i a l C l a s s M e m b e r s [ l a y e r I D ] - >
_ V i r t u a l F u n c t i o n T a b l e F o r P r o c e e d i n g =
54 _ P r i v a t e - > _ V i r t u a l F u n c t i o n T a b l e s F o r P r o c e e d i n g [ c l a s s I D ];
55 // パ ー シ ャ ル ク ラ ス の 処 分 を 行 う メ ソ ッ ド へ の 関 数 ポ イ ン タ
56 v o l a t i l e v o i d* vfp = D e p e n d e n t C o d e :: G e t L a y e r d O b j e c t F i n a l i z e r ( l a y e r d O b j e c t );
57 l a y e r d O b j e c t - > _ P r i v a t e - > _ P a r t i a l C l a s s M e m b e r s [ l a y e r I D ] - >
_ F i n a l i z e r = vfp ;
58 // ユ ー ザ 定 義 の 初 期 化
59 l a y e r d O b j e c t - > _ I n i t i a l i z e P a r t i a l C l a s s ();
60 }
61 r e t u r n obj ;
62 }
63 // ア ク テ ィ ベ ー ト 開 始 時 に 実 行 さ れ る
64 v o i d J a p a n e s e L a y e r :: O n A c t i v a t i n g () {
65 p r i n t f (" % s A c t i v a t i n g : % d \ n ", _ P r i v a t e - > _Name , (int) _ P r i v a t e - >
_ L a y e r S t a t e );
66 }
67 // ア ク テ ィ ベ ー ト 終 了 時 に 実 行 さ れ る
68 v o i d J a p a n e s e L a y e r :: O n A c t i v a t e d () {
69 p r i n t f (" % s A c t i v a t e d : % d \ n ", _ P r i v a t e - > _Name , (int) _ P r i v a t e - >
付録
149
_ L a y e r S t a t e );
70 }
71 // デ ィ ア ク テ ィ ベ ー ト 開 始 時 に 実 行 さ れ る
72 v o i d J a p a n e s e L a y e r :: O n D e a c t i v a t i n g () {
73 p r i n t f (" % s D e a c t i v a t i n g : % d \ n ", _ P r i v a t e - > _Name , (int) _ P r i v a t e - > _ L a y e r S t a t e );
74 }
75 // デ ィ ア ク テ ィ ベ ー ト 終 了 時 に 実 行 さ れ る
76 v o i d J a p a n e s e L a y e r :: O n D e a c t i v a t e d () {
77 p r i n t f (" % s D e a c t i v a t e d : % d \ n ", _ P r i v a t e - > _Name , (int) _ P r i v a t e - >
_ L a y e r S t a t e );
78 }
79
80 //
-81 // H e l l oの 実 装
82 //
-83 // コ ン ス ト ラ ク タ
84 // こ れ は 、 仮 想 関 数 テ ー ブ ル 取 得 用
85 J a p a n e s e L a y e r _ H e l l o :: J a p a n e s e L a y e r _ H e l l o ()
86 : R T C O P :: C o r e :: L a y e r d O b j e c t < Hello >() {
87 }
88 // パ ー シ ャ ル メ ソ ッ ド1
89 v o i d J a p a n e s e L a y e r _ H e l l o :: P r i n t () {
90 // 準 備
91 J a p a n e s e L a y e r _ H e l l o :: P a r t i a l C l a s s M e m b e r s * m e m b e r s = ( J a p a n e s e L a y e r _ H e l l o :: P a r t i a l C l a s s M e m b e r s *) _ P r i v a t e - >
_ P a r t i a l C l a s s M e m b e r s [ 1 ] ;
92 a u t o p r o c e e d = [this, m e m b e r s ]() { D e p e n d e n t C o d e :: H e l l o C l a s s ::
E x e c u t e P r o c e e d _ P r i n t (this, members - >
_ V i r t u a l F u n c t i o n T a b l e F o r P r o c e e d i n g [ 0 ] ) ; };
93 // レ イ ヤ 記 述 の 内 容
94 p r i n t f (" P r i n t : こ ん に ち は\ n ");
95 p r o c e e d ();
96 }
97 // パ ー シ ャ ル メ ソ ッ ド2
98 v o i d J a p a n e s e L a y e r _ H e l l o :: P r i n t 2 (c h a r arg ) {
99 // 準 備
100 J a p a n e s e L a y e r _ H e l l o :: P a r t i a l C l a s s M e m b e r s * m e m b e r s = ( J a p a n e s e L a y e r _ H e l l o :: P a r t i a l C l a s s M e m b e r s *) _ P r i v a t e - >
_ P a r t i a l C l a s s M e m b e r s [ 1 ] ;
101 a u t o p r o c e e d = [this, m e m b e r s ](c h a r arg ) { D e p e n d e n t C o d e ::
H e l l o C l a s s :: E x e c u t e P r o c e e d _ P r i n t 2 (this, members - >
_ V i r t u a l F u n c t i o n T a b l e F o r P r o c e e d i n g [1] , arg ); };
102 // レ イ ヤ 記 述 の 内 容