rice 3.0.0 → 4.0.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.
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
-