• 検索結果がありません。

レイヤクラス

ドキュメント内 九州大学学術情報リポジトリ (ページ 150-161)

第 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.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 / 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 // レ イ ヤ 記 述 の 内 容

ドキュメント内 九州大学学術情報リポジトリ (ページ 150-161)