rucy 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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