rice 2.1.2 → 4.0.1

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 (245) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +121 -0
  3. data/CONTRIBUTORS.md +19 -0
  4. data/COPYING +2 -2
  5. data/Gemfile +3 -0
  6. data/README.md +45 -1028
  7. data/Rakefile +95 -12
  8. data/include/rice/rice.hpp +7766 -0
  9. data/lib/mkmf-rice.rb +127 -0
  10. data/lib/version.rb +3 -0
  11. data/rice/Address_Registration_Guard.ipp +75 -32
  12. data/rice/Address_Registration_Guard_defn.hpp +60 -56
  13. data/rice/Arg.hpp +80 -4
  14. data/rice/Arg.ipp +51 -0
  15. data/rice/Constructor.hpp +30 -376
  16. data/rice/Data_Object.ipp +234 -107
  17. data/rice/Data_Object_defn.hpp +77 -117
  18. data/rice/Data_Type.hpp +1 -2
  19. data/rice/Data_Type.ipp +251 -295
  20. data/rice/Data_Type_defn.hpp +175 -243
  21. data/rice/Director.hpp +14 -9
  22. data/rice/Enum.hpp +54 -104
  23. data/rice/Enum.ipp +104 -230
  24. data/rice/Exception.hpp +2 -8
  25. data/rice/Exception.ipp +65 -0
  26. data/rice/Exception_defn.hpp +46 -47
  27. data/rice/Identifier.hpp +28 -28
  28. data/rice/Identifier.ipp +23 -27
  29. data/rice/Return.hpp +39 -0
  30. data/rice/Return.ipp +33 -0
  31. data/rice/detail/Exception_Handler.ipp +22 -62
  32. data/rice/detail/Exception_Handler_defn.hpp +76 -91
  33. data/rice/detail/Iterator.hpp +18 -88
  34. data/rice/detail/Iterator.ipp +47 -0
  35. data/rice/detail/Jump_Tag.hpp +21 -0
  36. data/rice/detail/MethodInfo.hpp +44 -0
  37. data/rice/detail/MethodInfo.ipp +78 -0
  38. data/rice/detail/NativeAttribute.hpp +53 -0
  39. data/rice/detail/NativeAttribute.ipp +83 -0
  40. data/rice/detail/NativeFunction.hpp +69 -0
  41. data/rice/detail/NativeFunction.ipp +248 -0
  42. data/rice/detail/RubyFunction.hpp +39 -0
  43. data/rice/detail/RubyFunction.ipp +92 -0
  44. data/rice/detail/Type.hpp +29 -0
  45. data/rice/detail/Type.ipp +138 -0
  46. data/rice/detail/TypeRegistry.hpp +50 -0
  47. data/rice/detail/TypeRegistry.ipp +106 -0
  48. data/rice/detail/Wrapper.hpp +51 -0
  49. data/rice/detail/Wrapper.ipp +151 -0
  50. data/rice/detail/default_allocation_func.hpp +8 -19
  51. data/rice/detail/default_allocation_func.ipp +9 -8
  52. data/rice/detail/from_ruby.hpp +2 -37
  53. data/rice/detail/from_ruby.ipp +1020 -46
  54. data/rice/detail/from_ruby_defn.hpp +38 -0
  55. data/rice/detail/function_traits.hpp +124 -0
  56. data/rice/detail/method_data.hpp +23 -15
  57. data/rice/detail/method_data.ipp +53 -0
  58. data/rice/detail/rice_traits.hpp +116 -0
  59. data/rice/detail/ruby.hpp +9 -49
  60. data/rice/detail/to_ruby.hpp +3 -17
  61. data/rice/detail/to_ruby.ipp +409 -31
  62. data/rice/detail/to_ruby_defn.hpp +48 -0
  63. data/rice/forward_declares.ipp +82 -0
  64. data/rice/global_function.hpp +16 -20
  65. data/rice/global_function.ipp +8 -17
  66. data/rice/rice.hpp +59 -0
  67. data/rice/ruby_mark.hpp +5 -3
  68. data/rice/ruby_try_catch.hpp +4 -4
  69. data/rice/stl.hpp +11 -0
  70. data/sample/callbacks/extconf.rb +6 -0
  71. data/sample/callbacks/sample_callbacks.cpp +35 -0
  72. data/sample/callbacks/test.rb +28 -0
  73. data/sample/enum/extconf.rb +3 -0
  74. data/sample/enum/sample_enum.cpp +3 -17
  75. data/sample/enum/test.rb +2 -2
  76. data/sample/inheritance/animals.cpp +8 -24
  77. data/sample/inheritance/extconf.rb +3 -0
  78. data/sample/inheritance/test.rb +1 -1
  79. data/sample/map/extconf.rb +3 -0
  80. data/sample/map/map.cpp +10 -18
  81. data/sample/map/test.rb +1 -1
  82. data/test/embed_ruby.cpp +34 -0
  83. data/test/embed_ruby.hpp +4 -0
  84. data/test/ext/t1/extconf.rb +3 -0
  85. data/test/ext/t1/t1.cpp +1 -3
  86. data/test/ext/t2/extconf.rb +3 -0
  87. data/test/ext/t2/t2.cpp +1 -1
  88. data/test/extconf.rb +23 -0
  89. data/test/ruby/test_callbacks_sample.rb +28 -0
  90. data/test/ruby/test_multiple_extensions.rb +18 -0
  91. data/test/ruby/test_multiple_extensions_same_class.rb +14 -0
  92. data/test/ruby/test_multiple_extensions_with_inheritance.rb +20 -0
  93. data/test/test_Address_Registration_Guard.cpp +25 -11
  94. data/test/test_Array.cpp +131 -74
  95. data/test/test_Attribute.cpp +147 -0
  96. data/test/test_Builtin_Object.cpp +36 -15
  97. data/test/test_Class.cpp +151 -276
  98. data/test/test_Constructor.cpp +10 -9
  99. data/test/test_Data_Object.cpp +135 -193
  100. data/test/test_Data_Type.cpp +323 -252
  101. data/test/test_Director.cpp +56 -42
  102. data/test/test_Enum.cpp +230 -104
  103. data/test/test_Exception.cpp +7 -7
  104. data/test/test_Hash.cpp +33 -31
  105. data/test/test_Identifier.cpp +6 -6
  106. data/test/test_Inheritance.cpp +221 -0
  107. data/test/test_Iterator.cpp +161 -0
  108. data/test/test_Jump_Tag.cpp +1 -1
  109. data/test/test_Keep_Alive.cpp +161 -0
  110. data/test/test_Memory_Management.cpp +4 -5
  111. data/test/test_Module.cpp +169 -111
  112. data/test/test_Object.cpp +51 -19
  113. data/test/test_Ownership.cpp +275 -0
  114. data/test/test_Self.cpp +205 -0
  115. data/test/test_Stl_Optional.cpp +90 -0
  116. data/test/test_Stl_Pair.cpp +144 -0
  117. data/test/test_Stl_SmartPointer.cpp +200 -0
  118. data/test/test_Stl_String.cpp +74 -0
  119. data/test/test_Stl_Vector.cpp +652 -0
  120. data/test/test_String.cpp +3 -3
  121. data/test/test_Struct.cpp +31 -40
  122. data/test/test_Symbol.cpp +3 -3
  123. data/test/test_To_From_Ruby.cpp +283 -218
  124. data/test/test_global_functions.cpp +41 -20
  125. data/test/unittest.cpp +34 -8
  126. data/test/unittest.hpp +0 -4
  127. metadata +120 -136
  128. data/Doxyfile +0 -2268
  129. data/Makefile.am +0 -26
  130. data/Makefile.in +0 -920
  131. data/README.mingw +0 -8
  132. data/aclocal.m4 +0 -1088
  133. data/bootstrap +0 -8
  134. data/check_stdcxx_11.ac +0 -142
  135. data/config.guess +0 -1421
  136. data/config.sub +0 -1807
  137. data/configure +0 -7481
  138. data/configure.ac +0 -55
  139. data/depcomp +0 -791
  140. data/doxygen.ac +0 -314
  141. data/doxygen.am +0 -186
  142. data/extconf.rb +0 -69
  143. data/install-sh +0 -501
  144. data/missing +0 -215
  145. data/post-autoconf.rb +0 -22
  146. data/post-automake.rb +0 -28
  147. data/rice/Address_Registration_Guard.cpp +0 -22
  148. data/rice/Arg_impl.hpp +0 -129
  149. data/rice/Arg_operators.cpp +0 -21
  150. data/rice/Arg_operators.hpp +0 -19
  151. data/rice/Array.hpp +0 -214
  152. data/rice/Array.ipp +0 -256
  153. data/rice/Builtin_Object.hpp +0 -8
  154. data/rice/Builtin_Object.ipp +0 -50
  155. data/rice/Builtin_Object_defn.hpp +0 -50
  156. data/rice/Class.cpp +0 -57
  157. data/rice/Class.hpp +0 -8
  158. data/rice/Class.ipp +0 -6
  159. data/rice/Class_defn.hpp +0 -83
  160. data/rice/Data_Type.cpp +0 -54
  161. data/rice/Data_Type_fwd.hpp +0 -12
  162. data/rice/Director.cpp +0 -13
  163. data/rice/Exception.cpp +0 -59
  164. data/rice/Exception_Base.hpp +0 -8
  165. data/rice/Exception_Base.ipp +0 -13
  166. data/rice/Exception_Base_defn.hpp +0 -27
  167. data/rice/Hash.hpp +0 -227
  168. data/rice/Hash.ipp +0 -329
  169. data/rice/Identifier.cpp +0 -8
  170. data/rice/Jump_Tag.hpp +0 -24
  171. data/rice/Makefile.am +0 -124
  172. data/rice/Makefile.in +0 -839
  173. data/rice/Module.cpp +0 -84
  174. data/rice/Module.hpp +0 -8
  175. data/rice/Module.ipp +0 -6
  176. data/rice/Module_defn.hpp +0 -88
  177. data/rice/Module_impl.hpp +0 -281
  178. data/rice/Module_impl.ipp +0 -345
  179. data/rice/Object.cpp +0 -169
  180. data/rice/Object.hpp +0 -8
  181. data/rice/Object.ipp +0 -19
  182. data/rice/Object_defn.hpp +0 -191
  183. data/rice/Require_Guard.hpp +0 -21
  184. data/rice/String.cpp +0 -94
  185. data/rice/String.hpp +0 -91
  186. data/rice/Struct.cpp +0 -117
  187. data/rice/Struct.hpp +0 -162
  188. data/rice/Struct.ipp +0 -26
  189. data/rice/Symbol.cpp +0 -25
  190. data/rice/Symbol.hpp +0 -66
  191. data/rice/Symbol.ipp +0 -44
  192. data/rice/config.hpp +0 -47
  193. data/rice/config.hpp.in +0 -46
  194. data/rice/detail/Arguments.hpp +0 -118
  195. data/rice/detail/Auto_Function_Wrapper.hpp +0 -898
  196. data/rice/detail/Auto_Function_Wrapper.ipp +0 -3694
  197. data/rice/detail/Auto_Member_Function_Wrapper.hpp +0 -897
  198. data/rice/detail/Auto_Member_Function_Wrapper.ipp +0 -2774
  199. data/rice/detail/Caster.hpp +0 -103
  200. data/rice/detail/Not_Copyable.hpp +0 -25
  201. data/rice/detail/Wrapped_Function.hpp +0 -33
  202. data/rice/detail/cfp.hpp +0 -24
  203. data/rice/detail/cfp.ipp +0 -51
  204. data/rice/detail/check_ruby_type.cpp +0 -27
  205. data/rice/detail/check_ruby_type.hpp +0 -23
  206. data/rice/detail/creation_funcs.hpp +0 -37
  207. data/rice/detail/creation_funcs.ipp +0 -36
  208. data/rice/detail/define_method_and_auto_wrap.hpp +0 -31
  209. data/rice/detail/define_method_and_auto_wrap.ipp +0 -30
  210. data/rice/detail/demangle.cpp +0 -56
  211. data/rice/detail/demangle.hpp +0 -19
  212. data/rice/detail/env.hpp +0 -11
  213. data/rice/detail/method_data.cpp +0 -86
  214. data/rice/detail/node.hpp +0 -13
  215. data/rice/detail/object_call.hpp +0 -69
  216. data/rice/detail/object_call.ipp +0 -131
  217. data/rice/detail/protect.cpp +0 -29
  218. data/rice/detail/protect.hpp +0 -34
  219. data/rice/detail/ruby_version_code.hpp +0 -6
  220. data/rice/detail/ruby_version_code.hpp.in +0 -6
  221. data/rice/detail/st.hpp +0 -22
  222. data/rice/detail/traits.hpp +0 -43
  223. data/rice/detail/win32.hpp +0 -16
  224. data/rice/detail/wrap_function.hpp +0 -341
  225. data/rice/detail/wrap_function.ipp +0 -514
  226. data/rice/protect.hpp +0 -92
  227. data/rice/protect.ipp +0 -1134
  228. data/rice/rubypp.rb +0 -97
  229. data/rice/to_from_ruby.hpp +0 -8
  230. data/rice/to_from_ruby.ipp +0 -294
  231. data/rice/to_from_ruby_defn.hpp +0 -70
  232. data/ruby.ac +0 -135
  233. data/ruby/Makefile.am +0 -1
  234. data/ruby/Makefile.in +0 -625
  235. data/ruby/lib/Makefile.am +0 -3
  236. data/ruby/lib/Makefile.in +0 -503
  237. data/ruby/lib/mkmf-rice.rb.in +0 -217
  238. data/ruby/lib/version.rb +0 -3
  239. data/sample/Makefile.am +0 -47
  240. data/sample/Makefile.in +0 -486
  241. data/test/Makefile.am +0 -72
  242. data/test/Makefile.in +0 -1150
  243. data/test/ext/Makefile.am +0 -41
  244. data/test/ext/Makefile.in +0 -480
  245. data/test/test_rice.rb +0 -41
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[0]);
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
-