1 | /*
|
---|
2 | * mruby => TECS brige
|
---|
3 | *
|
---|
4 | * Copyright (C) 2008-2012 by TOPPERS Project
|
---|
5 | *--
|
---|
6 | * ä¸è¨èä½æ¨©è
|
---|
7 | ã¯ï¼ä»¥ä¸ã®(1)(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
|
---|
8 | * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹
|
---|
9 | * å¤ã»åé
|
---|
10 | å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
|
---|
11 | * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
|
---|
12 | * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
|
---|
13 | * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼
|
---|
14 | * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
|
---|
15 | * ç¨ã§ããå½¢ã§åé
|
---|
16 | å¸ããå ´åã«ã¯ï¼åé
|
---|
17 | å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨
|
---|
18 | * è
|
---|
19 | ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
|
---|
20 | * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
|
---|
21 | * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
|
---|
22 | * ç¨ã§ããªãå½¢ã§åé
|
---|
23 | å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
|
---|
24 | * ã¨ï¼
|
---|
25 | * (a) åé
|
---|
26 | å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è
|
---|
27 | ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
|
---|
28 | * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
|
---|
29 | * (b) åé
|
---|
30 | å¸ã®å½¢æ
|
---|
31 | ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã«
|
---|
32 | * å ±åãããã¨ï¼
|
---|
33 | * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
|
---|
34 | * 害ãããï¼ä¸è¨èä½æ¨©è
|
---|
35 | ããã³TOPPERSããã¸ã§ã¯ããå
|
---|
36 | 責ãããã¨ï¼
|
---|
37 | * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
|
---|
38 | * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
|
---|
39 | ããã³TOPPERSããã¸ã§ã¯ãã
|
---|
40 | * å
|
---|
41 | 責ãããã¨ï¼
|
---|
42 | *
|
---|
43 | * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
|
---|
44 | ã
|
---|
45 | * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
|
---|
46 | * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
|
---|
47 | * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã
|
---|
48 | * ã®è²¬ä»»ãè² ããªãï¼
|
---|
49 | *
|
---|
50 | * $Id: TECSStruct.h 270 2017-02-09 04:03:47Z coas-nagasima $
|
---|
51 | */
|
---|
52 |
|
---|
53 | #ifndef TECSStruct_h__
|
---|
54 | #define TECSStruct_h__
|
---|
55 |
|
---|
56 | #define MEMBER_GET_SET_INT( TAG, MEMBER, Type, TYPE ) \
|
---|
57 | static mrb_value \
|
---|
58 | Struct_ ## TAG ## _ ## MEMBER ## _aget(mrb_state *mrb, mrb_value self) \
|
---|
59 | { \
|
---|
60 | struct TAG *st = DATA_PTR( self ); \
|
---|
61 | TYPE ## _t val; \
|
---|
62 | \
|
---|
63 | val = st->MEMBER; \
|
---|
64 | VALCHECK_MRB_ ## Type( mrb, val ); \
|
---|
65 | return mrb_fixnum_value( val ); \
|
---|
66 | } \
|
---|
67 | \
|
---|
68 | static mrb_value \
|
---|
69 | Struct_ ## TAG ## _ ## MEMBER ## _aset(mrb_state *mrb, mrb_value self) \
|
---|
70 | { \
|
---|
71 | struct TAG *st = DATA_PTR( self ); \
|
---|
72 | mrb_int val; \
|
---|
73 | \
|
---|
74 | mrb_get_args(mrb, "i", &val ); \
|
---|
75 | \
|
---|
76 | VALCHECK_ ## Type ( mrb, val ); \
|
---|
77 | st->MEMBER = val; \
|
---|
78 | \
|
---|
79 | return self; \
|
---|
80 | }
|
---|
81 |
|
---|
82 | #define MEMBER_GET_SET_FLOAT( TAG, MEMBER ) \
|
---|
83 | static mrb_value \
|
---|
84 | Struct_ ## TAG ## _ ## MEMBER ## _aget(mrb_state *mrb, mrb_value self) \
|
---|
85 | { \
|
---|
86 | struct TAG *st = DATA_PTR( self ); \
|
---|
87 | \
|
---|
88 | return mrb_float_value( mrb, st->MEMBER ); \
|
---|
89 | } \
|
---|
90 | \
|
---|
91 | static mrb_value \
|
---|
92 | Struct_ ## TAG ## _ ## MEMBER ## _aset(mrb_state *mrb, mrb_value self) \
|
---|
93 | { \
|
---|
94 | struct TAG *st = DATA_PTR( self ); \
|
---|
95 | mrb_float val; \
|
---|
96 | \
|
---|
97 | mrb_get_args(mrb, "f", &val ); \
|
---|
98 | \
|
---|
99 | st->MEMBER = val; \
|
---|
100 | \
|
---|
101 | return self; \
|
---|
102 | }
|
---|
103 |
|
---|
104 | //// define Struct class ////
|
---|
105 | #define STRUCT_CLASS( TAG ) \
|
---|
106 | \
|
---|
107 | static void \
|
---|
108 | Struct ## TAG ## Body_free( mrb_state *mrb, void *p ) \
|
---|
109 | { \
|
---|
110 | (void)mrb_free( mrb, p ); \
|
---|
111 | } \
|
---|
112 | \
|
---|
113 | struct mrb_data_type Struct ## TAG ## Body_mrb_data_type = \
|
---|
114 | { \
|
---|
115 | "TECS::Struct" #TAG, \
|
---|
116 | Struct ## TAG ## Body_free \
|
---|
117 | }; \
|
---|
118 | \
|
---|
119 | static mrb_value \
|
---|
120 | Struct_ ## TAG ## _initialize( mrb_state *mrb, mrb_value self) \
|
---|
121 | { \
|
---|
122 | mrb_int length; \
|
---|
123 | struct TAG *structBody; \
|
---|
124 | \
|
---|
125 | DATA_TYPE( self ) = &Struct ## TAG ## Body_mrb_data_type; \
|
---|
126 | DATA_PTR( self ) = mrb_malloc(mrb, sizeof(struct TAG)); \
|
---|
127 | \
|
---|
128 | return self; \
|
---|
129 | }
|
---|
130 |
|
---|
131 | #define STRUCT_INIT_BEGIN( TAG ) \
|
---|
132 | struct RClass * \
|
---|
133 | tecs_init_Struct_## TAG(mrb_state *mrb, struct RClass *TECS) \
|
---|
134 | { \
|
---|
135 | struct RClass *a; \
|
---|
136 | \
|
---|
137 | a = mrb_define_class_under(mrb, TECS, "Struct" #TAG, mrb->object_class); \
|
---|
138 | MRB_SET_INSTANCE_TT(a, MRB_TT_DATA); \
|
---|
139 | \
|
---|
140 | mrb_define_method(mrb, a, "initialize", Struct_ ## TAG ## _initialize, MRB_ARGS_NONE());
|
---|
141 |
|
---|
142 | #define STRUCT_INIT_MEMBER( TAG, MEMBER ) \
|
---|
143 | mrb_define_method(mrb, a, #MEMBER, Struct_ ## TAG ## _ ## MEMBER ## _aget, MRB_ARGS_NONE()); \
|
---|
144 | mrb_define_method(mrb, a, #MEMBER "=", Struct_ ## TAG ## _ ## MEMBER ## _aset, MRB_ARGS_REQ(1));
|
---|
145 |
|
---|
146 |
|
---|
147 | #define STRUCT_INIT_END( TAG ) \
|
---|
148 | }
|
---|
149 |
|
---|
150 | #define CHECK_STRUCT( tag, value ) \
|
---|
151 | do { \
|
---|
152 | if( mrb_type(value) != MRB_TT_DATA \
|
---|
153 | || DATA_TYPE( value ) == 0 \
|
---|
154 | || strcmp( DATA_TYPE( value )->struct_name, "TECS::Struct" #tag ) ) \
|
---|
155 | mrb_raise(mrb, E_TYPE_ERROR, "not Struct or tag mismatch"); \
|
---|
156 | }while(0)
|
---|
157 |
|
---|
158 | #endif /* TECSStruct_h__ */
|
---|