source: asp3_gr_sakura/trunk/tecsgen/tecs/mruby/TECSStruct.h@ 317

Last change on this file since 317 was 317, checked in by coas-nagasima, 7 years ago

GR-SAKURA向けASP3を追加

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-chdr
File size: 5.9 KB
Line 
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 317 2017-08-03 13:14:26Z 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__ */
Note: See TracBrowser for help on using the repository browser.