rice 3.0.0 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (237) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +121 -0
  3. data/CONTRIBUTORS.md +19 -0
  4. data/Gemfile +3 -0
  5. data/README.md +44 -1025
  6. data/Rakefile +95 -12
  7. data/include/rice/rice.hpp +7766 -0
  8. data/lib/mkmf-rice.rb +127 -0
  9. data/lib/version.rb +3 -0
  10. data/rice/Address_Registration_Guard.ipp +75 -32
  11. data/rice/Address_Registration_Guard_defn.hpp +60 -56
  12. data/rice/Arg.hpp +80 -4
  13. data/rice/Arg.ipp +51 -0
  14. data/rice/Constructor.hpp +12 -14
  15. data/rice/Data_Object.ipp +234 -107
  16. data/rice/Data_Object_defn.hpp +77 -117
  17. data/rice/Data_Type.hpp +1 -2
  18. data/rice/Data_Type.ipp +251 -295
  19. data/rice/Data_Type_defn.hpp +175 -243
  20. data/rice/Director.hpp +11 -6
  21. data/rice/Enum.hpp +54 -104
  22. data/rice/Enum.ipp +104 -230
  23. data/rice/Exception.hpp +2 -8
  24. data/rice/Exception.ipp +65 -0
  25. data/rice/Exception_defn.hpp +46 -47
  26. data/rice/Identifier.hpp +28 -28
  27. data/rice/Identifier.ipp +23 -27
  28. data/rice/Return.hpp +39 -0
  29. data/rice/Return.ipp +33 -0
  30. data/rice/detail/Exception_Handler.ipp +22 -62
  31. data/rice/detail/Exception_Handler_defn.hpp +76 -91
  32. data/rice/detail/Iterator.hpp +18 -88
  33. data/rice/detail/Iterator.ipp +47 -0
  34. data/rice/detail/Jump_Tag.hpp +21 -0
  35. data/rice/detail/MethodInfo.hpp +44 -0
  36. data/rice/detail/MethodInfo.ipp +78 -0
  37. data/rice/detail/NativeAttribute.hpp +53 -0
  38. data/rice/detail/NativeAttribute.ipp +83 -0
  39. data/rice/detail/NativeFunction.hpp +69 -0
  40. data/rice/detail/NativeFunction.ipp +248 -0
  41. data/rice/detail/RubyFunction.hpp +39 -0
  42. data/rice/detail/RubyFunction.ipp +92 -0
  43. data/rice/detail/Type.hpp +29 -0
  44. data/rice/detail/Type.ipp +138 -0
  45. data/rice/detail/TypeRegistry.hpp +50 -0
  46. data/rice/detail/TypeRegistry.ipp +106 -0
  47. data/rice/detail/Wrapper.hpp +51 -0
  48. data/rice/detail/Wrapper.ipp +151 -0
  49. data/rice/detail/default_allocation_func.hpp +8 -19
  50. data/rice/detail/default_allocation_func.ipp +9 -8
  51. data/rice/detail/from_ruby.hpp +2 -37
  52. data/rice/detail/from_ruby.ipp +1020 -46
  53. data/rice/detail/from_ruby_defn.hpp +38 -0
  54. data/rice/detail/function_traits.hpp +124 -0
  55. data/rice/detail/method_data.hpp +23 -15
  56. data/rice/detail/method_data.ipp +53 -0
  57. data/rice/detail/rice_traits.hpp +116 -0
  58. data/rice/detail/ruby.hpp +9 -46
  59. data/rice/detail/to_ruby.hpp +3 -17
  60. data/rice/detail/to_ruby.ipp +409 -31
  61. data/rice/detail/to_ruby_defn.hpp +48 -0
  62. data/rice/forward_declares.ipp +82 -0
  63. data/rice/global_function.hpp +16 -20
  64. data/rice/global_function.ipp +8 -17
  65. data/rice/rice.hpp +59 -0
  66. data/rice/ruby_mark.hpp +5 -3
  67. data/rice/ruby_try_catch.hpp +4 -4
  68. data/rice/stl.hpp +11 -0
  69. data/sample/callbacks/extconf.rb +3 -0
  70. data/sample/callbacks/sample_callbacks.cpp +10 -13
  71. data/sample/enum/extconf.rb +3 -0
  72. data/sample/enum/sample_enum.cpp +3 -17
  73. data/sample/enum/test.rb +2 -2
  74. data/sample/inheritance/animals.cpp +8 -24
  75. data/sample/inheritance/extconf.rb +3 -0
  76. data/sample/inheritance/test.rb +1 -1
  77. data/sample/map/extconf.rb +3 -0
  78. data/sample/map/map.cpp +10 -18
  79. data/sample/map/test.rb +1 -1
  80. data/test/embed_ruby.cpp +18 -5
  81. data/test/ext/t1/extconf.rb +3 -0
  82. data/test/ext/t1/t1.cpp +1 -3
  83. data/test/ext/t2/extconf.rb +3 -0
  84. data/test/ext/t2/t2.cpp +1 -1
  85. data/test/extconf.rb +23 -0
  86. data/test/ruby/test_callbacks_sample.rb +28 -0
  87. data/test/ruby/test_multiple_extensions.rb +18 -0
  88. data/test/ruby/test_multiple_extensions_same_class.rb +14 -0
  89. data/test/ruby/test_multiple_extensions_with_inheritance.rb +20 -0
  90. data/test/test_Address_Registration_Guard.cpp +23 -10
  91. data/test/test_Array.cpp +129 -73
  92. data/test/test_Attribute.cpp +147 -0
  93. data/test/test_Builtin_Object.cpp +34 -14
  94. data/test/test_Class.cpp +149 -275
  95. data/test/test_Constructor.cpp +10 -9
  96. data/test/test_Data_Object.cpp +133 -192
  97. data/test/test_Data_Type.cpp +322 -252
  98. data/test/test_Director.cpp +54 -41
  99. data/test/test_Enum.cpp +228 -103
  100. data/test/test_Exception.cpp +5 -6
  101. data/test/test_Hash.cpp +31 -30
  102. data/test/test_Identifier.cpp +4 -5
  103. data/test/test_Inheritance.cpp +221 -0
  104. data/test/test_Iterator.cpp +161 -0
  105. data/test/test_Jump_Tag.cpp +1 -1
  106. data/test/test_Keep_Alive.cpp +161 -0
  107. data/test/test_Memory_Management.cpp +2 -4
  108. data/test/test_Module.cpp +167 -110
  109. data/test/test_Object.cpp +41 -21
  110. data/test/test_Ownership.cpp +275 -0
  111. data/test/test_Self.cpp +205 -0
  112. data/test/test_Stl_Optional.cpp +90 -0
  113. data/test/test_Stl_Pair.cpp +144 -0
  114. data/test/test_Stl_SmartPointer.cpp +200 -0
  115. data/test/test_Stl_String.cpp +74 -0
  116. data/test/test_Stl_Vector.cpp +652 -0
  117. data/test/test_String.cpp +1 -2
  118. data/test/test_Struct.cpp +29 -39
  119. data/test/test_Symbol.cpp +1 -2
  120. data/test/test_To_From_Ruby.cpp +249 -285
  121. data/test/test_global_functions.cpp +39 -19
  122. data/test/unittest.hpp +0 -4
  123. metadata +63 -139
  124. data/Doxyfile +0 -2268
  125. data/Makefile.am +0 -26
  126. data/Makefile.in +0 -931
  127. data/README.mingw +0 -8
  128. data/aclocal.m4 +0 -1085
  129. data/ax_cxx_compile_stdcxx.m4 +0 -951
  130. data/bootstrap +0 -8
  131. data/config.guess +0 -1421
  132. data/config.sub +0 -1807
  133. data/configure +0 -7792
  134. data/configure.ac +0 -55
  135. data/depcomp +0 -791
  136. data/doxygen.ac +0 -314
  137. data/doxygen.am +0 -186
  138. data/extconf.rb +0 -70
  139. data/install-sh +0 -501
  140. data/missing +0 -215
  141. data/post-autoconf.rb +0 -22
  142. data/post-automake.rb +0 -28
  143. data/rice/Address_Registration_Guard.cpp +0 -22
  144. data/rice/Arg_impl.hpp +0 -129
  145. data/rice/Arg_operators.cpp +0 -21
  146. data/rice/Arg_operators.hpp +0 -19
  147. data/rice/Array.hpp +0 -214
  148. data/rice/Array.ipp +0 -256
  149. data/rice/Builtin_Object.hpp +0 -8
  150. data/rice/Builtin_Object.ipp +0 -50
  151. data/rice/Builtin_Object_defn.hpp +0 -50
  152. data/rice/Class.cpp +0 -57
  153. data/rice/Class.hpp +0 -8
  154. data/rice/Class.ipp +0 -6
  155. data/rice/Class_defn.hpp +0 -84
  156. data/rice/Data_Type.cpp +0 -54
  157. data/rice/Data_Type_fwd.hpp +0 -12
  158. data/rice/Director.cpp +0 -13
  159. data/rice/Exception.cpp +0 -54
  160. data/rice/Exception_Base.hpp +0 -8
  161. data/rice/Exception_Base.ipp +0 -13
  162. data/rice/Exception_Base_defn.hpp +0 -27
  163. data/rice/Hash.hpp +0 -230
  164. data/rice/Hash.ipp +0 -329
  165. data/rice/Identifier.cpp +0 -8
  166. data/rice/Jump_Tag.hpp +0 -24
  167. data/rice/Makefile.am +0 -121
  168. data/rice/Makefile.in +0 -884
  169. data/rice/Module.cpp +0 -84
  170. data/rice/Module.hpp +0 -8
  171. data/rice/Module.ipp +0 -6
  172. data/rice/Module_defn.hpp +0 -88
  173. data/rice/Module_impl.hpp +0 -281
  174. data/rice/Module_impl.ipp +0 -345
  175. data/rice/Object.cpp +0 -169
  176. data/rice/Object.hpp +0 -8
  177. data/rice/Object.ipp +0 -33
  178. data/rice/Object_defn.hpp +0 -214
  179. data/rice/Require_Guard.hpp +0 -21
  180. data/rice/String.cpp +0 -89
  181. data/rice/String.hpp +0 -91
  182. data/rice/Struct.cpp +0 -117
  183. data/rice/Struct.hpp +0 -162
  184. data/rice/Struct.ipp +0 -26
  185. data/rice/Symbol.cpp +0 -25
  186. data/rice/Symbol.hpp +0 -66
  187. data/rice/Symbol.ipp +0 -44
  188. data/rice/config.hpp +0 -47
  189. data/rice/config.hpp.in +0 -46
  190. data/rice/detail/Arguments.hpp +0 -118
  191. data/rice/detail/Auto_Function_Wrapper.hpp +0 -898
  192. data/rice/detail/Auto_Function_Wrapper.ipp +0 -3181
  193. data/rice/detail/Auto_Member_Function_Wrapper.hpp +0 -897
  194. data/rice/detail/Auto_Member_Function_Wrapper.ipp +0 -2501
  195. data/rice/detail/Caster.hpp +0 -103
  196. data/rice/detail/Not_Copyable.hpp +0 -25
  197. data/rice/detail/Wrapped_Function.hpp +0 -33
  198. data/rice/detail/cfp.hpp +0 -24
  199. data/rice/detail/cfp.ipp +0 -51
  200. data/rice/detail/check_ruby_type.cpp +0 -27
  201. data/rice/detail/check_ruby_type.hpp +0 -23
  202. data/rice/detail/creation_funcs.hpp +0 -37
  203. data/rice/detail/creation_funcs.ipp +0 -36
  204. data/rice/detail/define_method_and_auto_wrap.hpp +0 -31
  205. data/rice/detail/define_method_and_auto_wrap.ipp +0 -30
  206. data/rice/detail/demangle.cpp +0 -56
  207. data/rice/detail/demangle.hpp +0 -19
  208. data/rice/detail/env.hpp +0 -11
  209. data/rice/detail/method_data.cpp +0 -92
  210. data/rice/detail/node.hpp +0 -13
  211. data/rice/detail/protect.cpp +0 -29
  212. data/rice/detail/protect.hpp +0 -34
  213. data/rice/detail/ruby_version_code.hpp +0 -6
  214. data/rice/detail/ruby_version_code.hpp.in +0 -6
  215. data/rice/detail/st.hpp +0 -22
  216. data/rice/detail/win32.hpp +0 -16
  217. data/rice/detail/wrap_function.hpp +0 -66
  218. data/rice/protect.hpp +0 -38
  219. data/rice/protect.ipp +0 -1134
  220. data/rice/rubypp.rb +0 -97
  221. data/rice/to_from_ruby.hpp +0 -8
  222. data/rice/to_from_ruby.ipp +0 -418
  223. data/rice/to_from_ruby_defn.hpp +0 -70
  224. data/ruby.ac +0 -135
  225. data/ruby/Makefile.am +0 -1
  226. data/ruby/Makefile.in +0 -628
  227. data/ruby/lib/Makefile.am +0 -3
  228. data/ruby/lib/Makefile.in +0 -506
  229. data/ruby/lib/mkmf-rice.rb.in +0 -217
  230. data/ruby/lib/version.rb +0 -3
  231. data/sample/Makefile.am +0 -53
  232. data/sample/Makefile.in +0 -495
  233. data/test/Makefile.am +0 -73
  234. data/test/Makefile.in +0 -1219
  235. data/test/ext/Makefile.am +0 -41
  236. data/test/ext/Makefile.in +0 -483
  237. data/test/test_rice.rb +0 -45
data/rice/Module_impl.ipp DELETED
@@ -1,345 +0,0 @@
1
- #include "detail/define_method_and_auto_wrap.hpp"
2
- #include "Object.hpp"
3
- #include "Address_Registration_Guard.hpp"
4
- #include "Data_Object.hpp"
5
- #include "Data_Type.hpp"
6
- #include "Symbol.hpp"
7
- #include "protect.hpp"
8
-
9
- #include "Module.hpp"
10
- #include "Class.hpp"
11
- #include "Data_Type.hpp"
12
-
13
- #include "detail/ruby.hpp"
14
- #include "detail/method_data.hpp"
15
- #include "detail/Iterator.hpp"
16
-
17
-
18
- inline
19
- Rice::Module_base::
20
- Module_base(VALUE v)
21
- : Object(v)
22
- , handler_(Qnil)
23
- , handler_guard_(&handler_)
24
- {
25
- }
26
-
27
- inline
28
- Rice::Module_base::
29
- Module_base(Module_base const & other)
30
- : Object(other)
31
- , handler_(other.handler_)
32
- , handler_guard_(&handler_)
33
- {
34
- }
35
-
36
- inline
37
- Rice::Module_base &
38
- Rice::Module_base::
39
- operator=(Module_base const & other)
40
- {
41
- Module_base tmp(other);
42
- swap(tmp);
43
- return *this;
44
- }
45
-
46
- inline
47
- void
48
- Rice::Module_base::
49
- swap(Module_base & other)
50
- {
51
- std::swap(handler_, other.handler_);
52
- Object::swap(other);
53
- }
54
-
55
- template<typename Exception_T, typename Functor_T>
56
- inline
57
- void
58
- Rice::Module_base::
59
- add_handler(Functor_T functor)
60
- {
61
- Data_Object<detail::Exception_Handler> handler(
62
- new detail::
63
- Functor_Exception_Handler<Exception_T, Functor_T>(
64
- functor,
65
- this->handler()),
66
- rb_cObject);
67
- this->handler_.swap(handler);
68
- }
69
-
70
- inline
71
- Rice::Object
72
- Rice::Module_base::
73
- handler() const
74
- {
75
- if(!handler_.test())
76
- {
77
- Data_Object<Rice::detail::Default_Exception_Handler> handler(
78
- new Rice::detail::Default_Exception_Handler,
79
- rb_cObject);
80
- handler_.swap(handler);
81
- }
82
-
83
- return handler_;
84
- }
85
-
86
- template<typename Base_T, typename Derived_T>
87
- inline
88
- Rice::Module_impl<Base_T, Derived_T>::
89
- Module_impl()
90
- : Base_T()
91
- {
92
- }
93
-
94
- template<typename Base_T, typename Derived_T>
95
- template<typename T>
96
- inline
97
- Rice::Module_impl<Base_T, Derived_T>::
98
- Module_impl(T const & arg)
99
- : Base_T(arg)
100
- {
101
- }
102
-
103
- template<typename Base_T, typename Derived_T>
104
- template<typename Exception_T, typename Functor_T>
105
- inline
106
- Derived_T &
107
- Rice::Module_impl<Base_T, Derived_T>::
108
- add_handler(
109
- Functor_T functor)
110
- {
111
- Module_base::add_handler<Exception_T>(functor);
112
- return (Derived_T &)*this;
113
- }
114
-
115
- template<typename Base_T, typename Derived_T>
116
- template<typename Func_T>
117
- inline
118
- Derived_T &
119
- Rice::Module_impl<Base_T, Derived_T>::
120
- define_method(
121
- Identifier name,
122
- Func_T func,
123
- Arguments* arguments)
124
- {
125
- detail::define_method_and_auto_wrap(
126
- *this, name, func, this->handler(), arguments);
127
- return (Derived_T &)*this;
128
- }
129
-
130
- template<typename Base_T, typename Derived_T>
131
- template<typename Func_T>
132
- inline
133
- Derived_T &
134
- Rice::Module_impl<Base_T, Derived_T>::
135
- define_method(
136
- Identifier name,
137
- Func_T func,
138
- Arg const& arg)
139
- {
140
- Arguments* args = new Arguments();
141
- args->add(arg);
142
- return define_method(name, func, args);
143
- }
144
-
145
-
146
- template<typename Base_T, typename Derived_T>
147
- template<typename Func_T>
148
- inline
149
- Derived_T &
150
- Rice::Module_impl<Base_T, Derived_T>::
151
- define_singleton_method(
152
- Identifier name,
153
- Func_T func,
154
- Arguments* arguments)
155
- {
156
- detail::define_method_and_auto_wrap(
157
- rb_singleton_class(*this), name, func, this->handler(), arguments);
158
- return (Derived_T &)*this;
159
- }
160
-
161
- template<typename Base_T, typename Derived_T>
162
- template<typename Func_T>
163
- inline
164
- Derived_T &
165
- Rice::Module_impl<Base_T, Derived_T>::
166
- define_singleton_method(
167
- Identifier name,
168
- Func_T func,
169
- Arg const& arg)
170
- {
171
- Arguments* args = new Arguments();
172
- args->add(arg);
173
- return define_singleton_method(name, func, args);
174
- }
175
-
176
- template<typename Base_T, typename Derived_T>
177
- template<typename Func_T>
178
- inline
179
- Derived_T &
180
- Rice::Module_impl<Base_T, Derived_T>::
181
- define_module_function(
182
- Identifier name,
183
- Func_T func,
184
- Arguments* arguments)
185
- {
186
- if(this->rb_type() != T_MODULE)
187
- {
188
- throw std::runtime_error("can only define module functions for modules");
189
- }
190
-
191
- define_method(name, func, arguments);
192
- define_singleton_method(name, func, arguments);
193
- return (Derived_T &)*this;
194
- }
195
-
196
- template<typename Base_T, typename Derived_T>
197
- template<typename Func_T>
198
- inline
199
- Derived_T &
200
- Rice::Module_impl<Base_T, Derived_T>::
201
- define_module_function(
202
- Identifier name,
203
- Func_T func,
204
- Arg const& arg)
205
- {
206
- Arguments* args = new Arguments();
207
- args->add(arg);
208
- return define_module_function(name, func, args);
209
- }
210
-
211
- template<typename Base_T, typename Derived_T>
212
- template<typename T, typename Iterator_T>
213
- inline
214
- Derived_T &
215
- Rice::Module_impl<Base_T, Derived_T>::
216
- define_iterator(
217
- Iterator_T (T::*begin)(),
218
- Iterator_T (T::*end)(),
219
- Identifier name)
220
- {
221
- detail::define_iterator(*this, name, begin, end);
222
- return (Derived_T &)*this;
223
- }
224
-
225
- namespace Rice
226
- {
227
-
228
- namespace detail
229
- {
230
-
231
- inline VALUE
232
- include_module(VALUE mod, VALUE inc)
233
- {
234
- rb_include_module(mod, inc);
235
- return Qnil;
236
- }
237
-
238
- inline VALUE
239
- const_set(VALUE mod, ID name, VALUE value)
240
- {
241
- rb_const_set(mod, name, value);
242
- return Qnil;
243
- }
244
-
245
- } // namespace detail
246
-
247
- } // namespace Rice
248
-
249
- template<typename Base_T, typename Derived_T>
250
- inline
251
- Derived_T &
252
- Rice::Module_impl<Base_T, Derived_T>::
253
- include_module(
254
- Module const & inc)
255
- {
256
- protect(detail::include_module, *this, inc);
257
- return (Derived_T &)*this;
258
- }
259
-
260
- template<typename Base_T, typename Derived_T>
261
- inline
262
- Derived_T &
263
- Rice::Module_impl<Base_T, Derived_T>::
264
- const_set(
265
- Identifier name,
266
- Object value)
267
- {
268
- protect(detail::const_set, *this, name, value);
269
- return (Derived_T &)*this;
270
- }
271
-
272
- template<typename Base_T, typename Derived_T>
273
- inline
274
- Rice::Object
275
- Rice::Module_impl<Base_T, Derived_T>::
276
- const_get(
277
- Identifier name) const
278
- {
279
- return protect(rb_const_get, *this, name);
280
- }
281
-
282
- template<typename Base_T, typename Derived_T>
283
- inline
284
- bool
285
- Rice::Module_impl<Base_T, Derived_T>::
286
- const_defined(Identifier name) const
287
- {
288
- size_t result = protect(rb_const_defined, *this, name);
289
- return bool(result);
290
- }
291
-
292
- template<typename Base_T, typename Derived_T>
293
- inline
294
- void
295
- Rice::Module_impl<Base_T, Derived_T>::
296
- remove_const(Identifier name)
297
- {
298
- protect(rb_mod_remove_const, *this, name.to_sym());
299
- }
300
-
301
- template<typename Base_T, typename Derived_T>
302
- inline
303
- Rice::Module
304
- Rice::Module_impl<Base_T, Derived_T>::
305
- define_module(
306
- char const * name)
307
- {
308
- return Rice::define_module_under(*this, name);
309
- }
310
-
311
- template<typename Base_T, typename Derived_T>
312
- inline
313
- Rice::Class
314
- Rice::Module_impl<Base_T, Derived_T>::
315
- define_class(
316
- char const * name,
317
- Object superclass)
318
- {
319
- return Rice::define_class_under(*this, name, superclass);
320
- }
321
-
322
- template<typename Base_T, typename Derived_T>
323
- template<typename T>
324
- inline
325
- Rice::Data_Type<T>
326
- Rice::Module_impl<Base_T, Derived_T>::
327
- define_class_with_object_as_base(
328
- char const * name)
329
- {
330
- return Rice::define_class_under<T>(*this, name);
331
- }
332
-
333
- template<typename Base_T, typename Derived_T>
334
- template<typename T, typename T_Base_T>
335
- inline
336
- Rice::Data_Type<T>
337
- Rice::Module_impl<Base_T, Derived_T>::
338
- define_class(
339
- char const * name)
340
- {
341
- return Rice::define_class_under<T, T_Base_T>(
342
- *this,
343
- name);
344
- }
345
-
data/rice/Object.cpp DELETED
@@ -1,169 +0,0 @@
1
- #include "Object.hpp"
2
- #include "Class.hpp"
3
- #include "String.hpp"
4
- #include "Array.hpp"
5
-
6
- #include <algorithm>
7
- #include <iostream>
8
-
9
- namespace Rice
10
- {
11
-
12
- Object const Nil(Qnil);
13
- Object const True(Qtrue);
14
- Object const False(Qfalse);
15
- Object const Undef(Qundef);
16
-
17
- }
18
-
19
- Rice::Class Rice::Object::
20
- class_of() const {
21
- return rb_class_of(value_);
22
- }
23
-
24
- int Rice::Object::
25
- compare(Object const & other) const
26
- {
27
- Object result = call("<=>", other);
28
- return from_ruby<int>(result);
29
- }
30
-
31
- void Rice::Object::
32
- freeze()
33
- {
34
- protect(rb_obj_freeze, value());
35
- }
36
-
37
- bool Rice::Object::
38
- is_frozen() const
39
- {
40
- return bool(OBJ_FROZEN(value()));
41
- }
42
-
43
- Rice::String Rice::Object::
44
- to_s() const {
45
- return call("to_s");
46
- }
47
-
48
- Rice::String Rice::Object::
49
- inspect() const {
50
- return call("inspect");
51
- }
52
-
53
- void Rice::Object::
54
- swap(Rice::Object & other)
55
- {
56
- std::swap(value_, other.value_);
57
- }
58
-
59
- Rice::Object Rice::Object::
60
- instance_eval(String const & s)
61
- {
62
- VALUE argv[] = { s.value() };
63
- return protect(rb_obj_instance_eval, 1, &argv[0], *this);
64
- }
65
-
66
- int Rice::Object::
67
- rb_type() const
68
- {
69
- return ::rb_type(*this);
70
- }
71
-
72
- bool Rice::Object::
73
- is_a(Object klass) const
74
- {
75
- Object result = protect(rb_obj_is_kind_of, *this, klass);
76
- return result.test();
77
- }
78
-
79
- bool Rice::Object::
80
- respond_to(Identifier id) const
81
- {
82
- return bool(rb_respond_to(*this, id));
83
- }
84
-
85
- bool Rice::Object::
86
- is_instance_of(Object klass) const
87
- {
88
- Object result = protect(rb_obj_is_instance_of, *this, klass);
89
- return result.test();
90
- }
91
-
92
- Rice::Object Rice::Object::
93
- iv_get(
94
- Identifier name) const
95
- {
96
- return protect(rb_ivar_get, *this, name.id());
97
- }
98
-
99
- Rice::Object Rice::Object::
100
- attr_get(
101
- Identifier name) const
102
- {
103
- return protect(rb_attr_get, *this, name.id());
104
- }
105
-
106
- Rice::Object Rice::Object::
107
- vcall(
108
- Identifier id,
109
- Array args)
110
- {
111
- std::vector<VALUE> a(args.size());
112
-
113
- Array::const_iterator it = args.begin();
114
- Array::const_iterator end = args.end();
115
-
116
- for(int i = 0 ;it != end; i++, ++it) {
117
- a[i] = it->value();
118
- }
119
-
120
- return protect(rb_funcall3, *this, id, (int)args.size(), a.data());
121
- }
122
-
123
- void Rice::Object::
124
- mark() const
125
- {
126
- rb_gc_mark(*this);
127
- }
128
-
129
- void Rice::Object::
130
- set_value(VALUE v)
131
- {
132
- value_ = v;
133
- }
134
-
135
- std::ostream & Rice::
136
- operator<<(std::ostream & out, Rice::Object const & obj)
137
- {
138
- String s(obj.to_s());
139
- out << s.c_str();
140
- return out;
141
- }
142
-
143
- bool Rice::
144
- operator==(Rice::Object const & lhs, Rice::Object const & rhs)
145
- {
146
- Object result = lhs.call("==", rhs);
147
- return result.test();
148
- }
149
-
150
- bool Rice::
151
- operator!=(Rice::Object const & lhs, Rice::Object const & rhs)
152
- {
153
- return !(lhs == rhs);
154
- }
155
-
156
- bool Rice::
157
- operator<(Rice::Object const & lhs, Rice::Object const & rhs)
158
- {
159
- Object result = lhs.call("<", rhs);
160
- return result.test();
161
- }
162
-
163
- bool Rice::
164
- operator>(Rice::Object const & lhs, Rice::Object const & rhs)
165
- {
166
- Object result = lhs.call(">", rhs);
167
- return result.test();
168
- }
169
-