rucy 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/src/module.cpp ADDED
@@ -0,0 +1,321 @@
1
+ // -*- c++ -*-
2
+ #include "rucy/module.h"
3
+
4
+
5
+ #include <rucy/class.h>
6
+
7
+
8
+ namespace Rucy
9
+ {
10
+
11
+
12
+ Module::Module (VALUE v)
13
+ : Super(v)
14
+ {
15
+ }
16
+
17
+ Module
18
+ Module::define_module (const char* name)
19
+ {
20
+ return rb_define_module_under(value(), name);
21
+ }
22
+
23
+ Class
24
+ Module::define_class (const char* name, Value super)
25
+ {
26
+ return rb_define_class_under(value(), name, super);
27
+ }
28
+
29
+ Module
30
+ Module::define_const (const char* name, Value val)
31
+ {
32
+ rb_define_const(value(), name, val);
33
+ return *this;
34
+ }
35
+
36
+ Module
37
+ Module::define_attr (const char* name, bool read, bool write)
38
+ {
39
+ rb_define_attr(value(), name, read, write);
40
+ return *this;
41
+ }
42
+
43
+ Module
44
+ Module::define_alias (const char* new_, const char* old)
45
+ {
46
+ rb_define_alias(value(), new_, old);
47
+ return *this;
48
+ }
49
+
50
+ Module
51
+ Module::undef_method (const char* name)
52
+ {
53
+ rb_undef_method(value(), name);
54
+ return *this;
55
+ }
56
+
57
+ Module
58
+ Module::include_module (Value module)
59
+ {
60
+ rb_include_module(value(), module);
61
+ return *this;
62
+ }
63
+
64
+ Module
65
+ Module::define_function (const char* name, RubyFunctionN fun)
66
+ {
67
+ rb_define_module_function(value(), name, RUBY_METHOD_FUNC(fun), -1);
68
+ return *this;
69
+ }
70
+ Module
71
+ Module::define_function (const char* name, RubyFunction0 fun)
72
+ {
73
+ rb_define_module_function(value(), name, RUBY_METHOD_FUNC(fun), 0);
74
+ return *this;
75
+ }
76
+ Module
77
+ Module::define_function (const char* name, RubyFunction1 fun)
78
+ {
79
+ rb_define_module_function(value(), name, RUBY_METHOD_FUNC(fun), 1);
80
+ return *this;
81
+ }
82
+ Module
83
+ Module::define_function (const char* name, RubyFunction2 fun)
84
+ {
85
+ rb_define_module_function(value(), name, RUBY_METHOD_FUNC(fun), 2);
86
+ return *this;
87
+ }
88
+ Module
89
+ Module::define_function (const char* name, RubyFunction3 fun)
90
+ {
91
+ rb_define_module_function(value(), name, RUBY_METHOD_FUNC(fun), 3);
92
+ return *this;
93
+ }
94
+ Module
95
+ Module::define_function (const char* name, RubyFunction4 fun)
96
+ {
97
+ rb_define_module_function(value(), name, RUBY_METHOD_FUNC(fun), 4);
98
+ return *this;
99
+ }
100
+ Module
101
+ Module::define_function (const char* name, RubyFunction5 fun)
102
+ {
103
+ rb_define_module_function(value(), name, RUBY_METHOD_FUNC(fun), 5);
104
+ return *this;
105
+ }
106
+ Module
107
+ Module::define_function (const char* name, RubyFunction6 fun)
108
+ {
109
+ rb_define_module_function(value(), name, RUBY_METHOD_FUNC(fun), 6);
110
+ return *this;
111
+ }
112
+ Module
113
+ Module::define_function (const char* name, RubyFunction7 fun)
114
+ {
115
+ rb_define_module_function(value(), name, RUBY_METHOD_FUNC(fun), 7);
116
+ return *this;
117
+ }
118
+ Module
119
+ Module::define_function (const char* name, RubyFunction8 fun)
120
+ {
121
+ rb_define_module_function(value(), name, RUBY_METHOD_FUNC(fun), 8);
122
+ return *this;
123
+ }
124
+ Module
125
+ Module::define_method (const char* name, RubyFunctionN fun)
126
+ {
127
+ rb_define_method(value(), name, RUBY_METHOD_FUNC(fun), -1);
128
+ return *this;
129
+ }
130
+ Module
131
+ Module::define_method (const char* name, RubyFunction0 fun)
132
+ {
133
+ rb_define_method(value(), name, RUBY_METHOD_FUNC(fun), 0);
134
+ return *this;
135
+ }
136
+ Module
137
+ Module::define_method (const char* name, RubyFunction1 fun)
138
+ {
139
+ rb_define_method(value(), name, RUBY_METHOD_FUNC(fun), 1);
140
+ return *this;
141
+ }
142
+ Module
143
+ Module::define_method (const char* name, RubyFunction2 fun)
144
+ {
145
+ rb_define_method(value(), name, RUBY_METHOD_FUNC(fun), 2);
146
+ return *this;
147
+ }
148
+ Module
149
+ Module::define_method (const char* name, RubyFunction3 fun)
150
+ {
151
+ rb_define_method(value(), name, RUBY_METHOD_FUNC(fun), 3);
152
+ return *this;
153
+ }
154
+ Module
155
+ Module::define_method (const char* name, RubyFunction4 fun)
156
+ {
157
+ rb_define_method(value(), name, RUBY_METHOD_FUNC(fun), 4);
158
+ return *this;
159
+ }
160
+ Module
161
+ Module::define_method (const char* name, RubyFunction5 fun)
162
+ {
163
+ rb_define_method(value(), name, RUBY_METHOD_FUNC(fun), 5);
164
+ return *this;
165
+ }
166
+ Module
167
+ Module::define_method (const char* name, RubyFunction6 fun)
168
+ {
169
+ rb_define_method(value(), name, RUBY_METHOD_FUNC(fun), 6);
170
+ return *this;
171
+ }
172
+ Module
173
+ Module::define_method (const char* name, RubyFunction7 fun)
174
+ {
175
+ rb_define_method(value(), name, RUBY_METHOD_FUNC(fun), 7);
176
+ return *this;
177
+ }
178
+ Module
179
+ Module::define_method (const char* name, RubyFunction8 fun)
180
+ {
181
+ rb_define_method(value(), name, RUBY_METHOD_FUNC(fun), 8);
182
+ return *this;
183
+ }
184
+ Module
185
+ Module::define_private_method (const char* name, RubyFunctionN fun)
186
+ {
187
+ rb_define_private_method(value(), name, RUBY_METHOD_FUNC(fun), -1);
188
+ return *this;
189
+ }
190
+ Module
191
+ Module::define_private_method (const char* name, RubyFunction0 fun)
192
+ {
193
+ rb_define_private_method(value(), name, RUBY_METHOD_FUNC(fun), 0);
194
+ return *this;
195
+ }
196
+ Module
197
+ Module::define_private_method (const char* name, RubyFunction1 fun)
198
+ {
199
+ rb_define_private_method(value(), name, RUBY_METHOD_FUNC(fun), 1);
200
+ return *this;
201
+ }
202
+ Module
203
+ Module::define_private_method (const char* name, RubyFunction2 fun)
204
+ {
205
+ rb_define_private_method(value(), name, RUBY_METHOD_FUNC(fun), 2);
206
+ return *this;
207
+ }
208
+ Module
209
+ Module::define_private_method (const char* name, RubyFunction3 fun)
210
+ {
211
+ rb_define_private_method(value(), name, RUBY_METHOD_FUNC(fun), 3);
212
+ return *this;
213
+ }
214
+ Module
215
+ Module::define_private_method (const char* name, RubyFunction4 fun)
216
+ {
217
+ rb_define_private_method(value(), name, RUBY_METHOD_FUNC(fun), 4);
218
+ return *this;
219
+ }
220
+ Module
221
+ Module::define_private_method (const char* name, RubyFunction5 fun)
222
+ {
223
+ rb_define_private_method(value(), name, RUBY_METHOD_FUNC(fun), 5);
224
+ return *this;
225
+ }
226
+ Module
227
+ Module::define_private_method (const char* name, RubyFunction6 fun)
228
+ {
229
+ rb_define_private_method(value(), name, RUBY_METHOD_FUNC(fun), 6);
230
+ return *this;
231
+ }
232
+ Module
233
+ Module::define_private_method (const char* name, RubyFunction7 fun)
234
+ {
235
+ rb_define_private_method(value(), name, RUBY_METHOD_FUNC(fun), 7);
236
+ return *this;
237
+ }
238
+ Module
239
+ Module::define_private_method (const char* name, RubyFunction8 fun)
240
+ {
241
+ rb_define_private_method(value(), name, RUBY_METHOD_FUNC(fun), 8);
242
+ return *this;
243
+ }
244
+ Module
245
+ Module::define_singleton_method (const char* name, RubyFunctionN fun)
246
+ {
247
+ rb_define_singleton_method(value(), name, RUBY_METHOD_FUNC(fun), -1);
248
+ return *this;
249
+ }
250
+ Module
251
+ Module::define_singleton_method (const char* name, RubyFunction0 fun)
252
+ {
253
+ rb_define_singleton_method(value(), name, RUBY_METHOD_FUNC(fun), 0);
254
+ return *this;
255
+ }
256
+ Module
257
+ Module::define_singleton_method (const char* name, RubyFunction1 fun)
258
+ {
259
+ rb_define_singleton_method(value(), name, RUBY_METHOD_FUNC(fun), 1);
260
+ return *this;
261
+ }
262
+ Module
263
+ Module::define_singleton_method (const char* name, RubyFunction2 fun)
264
+ {
265
+ rb_define_singleton_method(value(), name, RUBY_METHOD_FUNC(fun), 2);
266
+ return *this;
267
+ }
268
+ Module
269
+ Module::define_singleton_method (const char* name, RubyFunction3 fun)
270
+ {
271
+ rb_define_singleton_method(value(), name, RUBY_METHOD_FUNC(fun), 3);
272
+ return *this;
273
+ }
274
+ Module
275
+ Module::define_singleton_method (const char* name, RubyFunction4 fun)
276
+ {
277
+ rb_define_singleton_method(value(), name, RUBY_METHOD_FUNC(fun), 4);
278
+ return *this;
279
+ }
280
+ Module
281
+ Module::define_singleton_method (const char* name, RubyFunction5 fun)
282
+ {
283
+ rb_define_singleton_method(value(), name, RUBY_METHOD_FUNC(fun), 5);
284
+ return *this;
285
+ }
286
+ Module
287
+ Module::define_singleton_method (const char* name, RubyFunction6 fun)
288
+ {
289
+ rb_define_singleton_method(value(), name, RUBY_METHOD_FUNC(fun), 6);
290
+ return *this;
291
+ }
292
+ Module
293
+ Module::define_singleton_method (const char* name, RubyFunction7 fun)
294
+ {
295
+ rb_define_singleton_method(value(), name, RUBY_METHOD_FUNC(fun), 7);
296
+ return *this;
297
+ }
298
+ Module
299
+ Module::define_singleton_method (const char* name, RubyFunction8 fun)
300
+ {
301
+ rb_define_singleton_method(value(), name, RUBY_METHOD_FUNC(fun), 8);
302
+ return *this;
303
+ }
304
+
305
+
306
+ Module
307
+ define_module (const char* name)
308
+ {
309
+ return rb_define_module(name);
310
+ }
311
+
312
+
313
+ Module
314
+ rucy_module ()
315
+ {
316
+ static Module m = define_module("Rucy");
317
+ return m;
318
+ }
319
+
320
+
321
+ }// Rucy
@@ -0,0 +1,103 @@
1
+ // -*- c++ -*-
2
+ % require 'support'
3
+ #include "rucy/module.h"
4
+
5
+
6
+ #include <rucy/class.h>
7
+
8
+
9
+ namespace Rucy
10
+ {
11
+
12
+
13
+ Module::Module (VALUE v)
14
+ : Super(v)
15
+ {
16
+ }
17
+
18
+ Module
19
+ Module::define_module (const char* name)
20
+ {
21
+ return rb_define_module_under(value(), name);
22
+ }
23
+
24
+ Class
25
+ Module::define_class (const char* name, Value super)
26
+ {
27
+ return rb_define_class_under(value(), name, super);
28
+ }
29
+
30
+ Module
31
+ Module::define_const (const char* name, Value val)
32
+ {
33
+ rb_define_const(value(), name, val);
34
+ return *this;
35
+ }
36
+
37
+ Module
38
+ Module::define_attr (const char* name, bool read, bool write)
39
+ {
40
+ rb_define_attr(value(), name, read, write);
41
+ return *this;
42
+ }
43
+
44
+ Module
45
+ Module::define_alias (const char* new_, const char* old)
46
+ {
47
+ rb_define_alias(value(), new_, old);
48
+ return *this;
49
+ }
50
+
51
+ Module
52
+ Module::undef_method (const char* name)
53
+ {
54
+ rb_undef_method(value(), name);
55
+ return *this;
56
+ }
57
+
58
+ Module
59
+ Module::include_module (Value module)
60
+ {
61
+ rb_include_module(value(), module);
62
+ return *this;
63
+ }
64
+
65
+ % [
66
+ % ['define_function', 'rb_define_module_function'],
67
+ % ['define_method', 'rb_define_method'],
68
+ % ['define_private_method', 'rb_define_private_method'],
69
+ % ['define_singleton_method', 'rb_define_singleton_method']
70
+ % ].each do |(op, rb_op)|
71
+ Module
72
+ Module::<%= op %> (const char* name, RubyFunctionN fun)
73
+ {
74
+ <%= rb_op %>(value(), name, RUBY_METHOD_FUNC(fun), -1);
75
+ return *this;
76
+ }
77
+ % NTIMES.each do |n|
78
+ Module
79
+ Module::<%= op %> (const char* name, RubyFunction<%= n %> fun)
80
+ {
81
+ <%= rb_op %>(value(), name, RUBY_METHOD_FUNC(fun), <%= n %>);
82
+ return *this;
83
+ }
84
+ % end
85
+ % end
86
+
87
+
88
+ Module
89
+ define_module (const char* name)
90
+ {
91
+ return rb_define_module(name);
92
+ }
93
+
94
+
95
+ Module
96
+ rucy_module ()
97
+ {
98
+ static Module m = define_module("Rucy");
99
+ return m;
100
+ }
101
+
102
+
103
+ }// Rucy
data/src/rucy.cpp ADDED
@@ -0,0 +1,56 @@
1
+ // -*- c++ -*-
2
+ #include "rucy/rucy.h"
3
+
4
+
5
+ #include <rucy/module.h>
6
+ #include <rucy/exception.h>
7
+
8
+
9
+ namespace Rucy
10
+ {
11
+
12
+
13
+ bool
14
+ init ()
15
+ {
16
+ static bool done = false;
17
+ if (done) return true;
18
+ done = true;
19
+
20
+ rucy_module();
21
+ native_error_class();
22
+ return true;
23
+ }
24
+
25
+
26
+ Value
27
+ require (const char* name)
28
+ {
29
+ return rb_require(name);
30
+ }
31
+
32
+ void
33
+ define_const (const char* name, Value val)
34
+ {
35
+ rb_define_global_const(name, val);
36
+ }
37
+
38
+
39
+ bool
40
+ check_class (Value obj, Value class_)
41
+ {
42
+ return class_ && obj.is_kind_of(class_);
43
+
44
+ #if 0
45
+ SYMBOL(klass, "class");
46
+ SYM(name);
47
+ String message = stringf(
48
+ "object is instance of %s, bug %s is expected.",
49
+ obj(klass)(name).c_str(), class_(name).c_str());
50
+
51
+ throw RubyException(rb_eTypeError, message);
52
+ #endif
53
+ }
54
+
55
+
56
+ }// Rucy
data/src/string.cpp ADDED
@@ -0,0 +1,78 @@
1
+ // -*- c++ -*-
2
+ #include "rucy/string.h"
3
+
4
+
5
+ #include <stdio.h>
6
+ #include <stdarg.h>
7
+ #include <boost/scoped_array.hpp>
8
+
9
+
10
+ namespace Rucy
11
+ {
12
+
13
+
14
+ String
15
+ stringf (const char* format, ...)
16
+ {
17
+ va_list args;
18
+ va_start(args, format);
19
+ String ret = stringf(format, args);
20
+ va_end(args);
21
+ return ret;
22
+ }
23
+
24
+ String
25
+ stringf (const char* format, va_list args)
26
+ {
27
+ enum {BUFSIZE = 256};
28
+ char stack[BUFSIZE];
29
+ if (vsnprintf(&stack[0], BUFSIZE, format, args) <= BUFSIZE)
30
+ return &stack[0];
31
+
32
+ int bufsize = BUFSIZE;// vscprintf(format, args);
33
+ boost::scoped_array<char> heap;
34
+ while (true)
35
+ {
36
+ bufsize *= 2;
37
+ heap.reset(new char[bufsize]);
38
+ if (vsnprintf(&heap[0], bufsize, format, args) <= bufsize)
39
+ return &heap[0];
40
+ }
41
+
42
+ return NULL;
43
+ }
44
+
45
+ template <> String
46
+ to_s<int> (const int& val)
47
+ {
48
+ return stringf("%d", val);
49
+ }
50
+
51
+ template <> String
52
+ to_s<float> (const float& val)
53
+ {
54
+ return stringf("%f", val);
55
+ }
56
+
57
+ template <> String
58
+ to_s<double> (const double& val)
59
+ {
60
+ return stringf("%f", val);
61
+ }
62
+
63
+ typedef const char* const_char_p;
64
+
65
+ template <> String
66
+ to_s<const_char_p> (const const_char_p& val)
67
+ {
68
+ return val;
69
+ }
70
+
71
+ template <> String
72
+ to_s<String> (const String& val)
73
+ {
74
+ return val;
75
+ }
76
+
77
+
78
+ }// Rucy
data/src/symbol.cpp ADDED
@@ -0,0 +1,51 @@
1
+ // -*- c++ -*-
2
+ #include "rucy/symbol.h"
3
+
4
+
5
+ #include <rucy/rucy.h>
6
+
7
+
8
+ namespace Rucy
9
+ {
10
+
11
+
12
+ Symbol::Symbol ()
13
+ : id_(0)
14
+ {
15
+ }
16
+
17
+ Symbol::Symbol (ID id)
18
+ : id_(id)
19
+ {
20
+ }
21
+
22
+ Symbol::Symbol (const char* str)
23
+ : id_(rb_intern(str))
24
+ {
25
+ }
26
+
27
+ ID
28
+ Symbol::id () const
29
+ {
30
+ return id_;
31
+ }
32
+
33
+ const char*
34
+ Symbol::c_str () const
35
+ {
36
+ return rb_id2name(id_);
37
+ }
38
+
39
+ Symbol::operator bool () const
40
+ {
41
+ return id_ != 0;
42
+ }
43
+
44
+ bool
45
+ Symbol::operator ! () const
46
+ {
47
+ return !operator bool();
48
+ }
49
+
50
+
51
+ }// Rucy