rice 2.1.1 → 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 (246) 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 +69 -0
  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 -274
  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 +117 -137
  128. data/Doxyfile +0 -2280
  129. data/Makefile.am +0 -26
  130. data/Makefile.in +0 -920
  131. data/README +0 -1055
  132. data/README.mingw +0 -8
  133. data/aclocal.m4 +0 -1088
  134. data/bootstrap +0 -8
  135. data/check_stdcxx_11.ac +0 -142
  136. data/config.guess +0 -1421
  137. data/config.sub +0 -1807
  138. data/configure +0 -7481
  139. data/configure.ac +0 -55
  140. data/depcomp +0 -791
  141. data/doxygen.ac +0 -314
  142. data/doxygen.am +0 -186
  143. data/extconf.rb +0 -69
  144. data/install-sh +0 -501
  145. data/missing +0 -215
  146. data/post-autoconf.rb +0 -22
  147. data/post-automake.rb +0 -28
  148. data/rice/Address_Registration_Guard.cpp +0 -22
  149. data/rice/Arg_impl.hpp +0 -129
  150. data/rice/Arg_operators.cpp +0 -21
  151. data/rice/Arg_operators.hpp +0 -19
  152. data/rice/Array.hpp +0 -214
  153. data/rice/Array.ipp +0 -256
  154. data/rice/Builtin_Object.hpp +0 -8
  155. data/rice/Builtin_Object.ipp +0 -50
  156. data/rice/Builtin_Object_defn.hpp +0 -50
  157. data/rice/Class.cpp +0 -57
  158. data/rice/Class.hpp +0 -8
  159. data/rice/Class.ipp +0 -6
  160. data/rice/Class_defn.hpp +0 -83
  161. data/rice/Data_Type.cpp +0 -54
  162. data/rice/Data_Type_fwd.hpp +0 -12
  163. data/rice/Director.cpp +0 -13
  164. data/rice/Exception.cpp +0 -59
  165. data/rice/Exception_Base.hpp +0 -8
  166. data/rice/Exception_Base.ipp +0 -13
  167. data/rice/Exception_Base_defn.hpp +0 -27
  168. data/rice/Hash.hpp +0 -227
  169. data/rice/Hash.ipp +0 -329
  170. data/rice/Identifier.cpp +0 -8
  171. data/rice/Jump_Tag.hpp +0 -24
  172. data/rice/Makefile.am +0 -124
  173. data/rice/Makefile.in +0 -839
  174. data/rice/Module.cpp +0 -84
  175. data/rice/Module.hpp +0 -8
  176. data/rice/Module.ipp +0 -6
  177. data/rice/Module_defn.hpp +0 -88
  178. data/rice/Module_impl.hpp +0 -281
  179. data/rice/Module_impl.ipp +0 -345
  180. data/rice/Object.cpp +0 -169
  181. data/rice/Object.hpp +0 -8
  182. data/rice/Object.ipp +0 -19
  183. data/rice/Object_defn.hpp +0 -191
  184. data/rice/Require_Guard.hpp +0 -21
  185. data/rice/String.cpp +0 -94
  186. data/rice/String.hpp +0 -91
  187. data/rice/Struct.cpp +0 -117
  188. data/rice/Struct.hpp +0 -162
  189. data/rice/Struct.ipp +0 -26
  190. data/rice/Symbol.cpp +0 -25
  191. data/rice/Symbol.hpp +0 -66
  192. data/rice/Symbol.ipp +0 -44
  193. data/rice/config.hpp +0 -47
  194. data/rice/config.hpp.in +0 -46
  195. data/rice/detail/Arguments.hpp +0 -118
  196. data/rice/detail/Auto_Function_Wrapper.hpp +0 -898
  197. data/rice/detail/Auto_Function_Wrapper.ipp +0 -3694
  198. data/rice/detail/Auto_Member_Function_Wrapper.hpp +0 -897
  199. data/rice/detail/Auto_Member_Function_Wrapper.ipp +0 -2774
  200. data/rice/detail/Caster.hpp +0 -103
  201. data/rice/detail/Not_Copyable.hpp +0 -25
  202. data/rice/detail/Wrapped_Function.hpp +0 -33
  203. data/rice/detail/cfp.hpp +0 -24
  204. data/rice/detail/cfp.ipp +0 -51
  205. data/rice/detail/check_ruby_type.cpp +0 -27
  206. data/rice/detail/check_ruby_type.hpp +0 -23
  207. data/rice/detail/creation_funcs.hpp +0 -37
  208. data/rice/detail/creation_funcs.ipp +0 -36
  209. data/rice/detail/define_method_and_auto_wrap.hpp +0 -31
  210. data/rice/detail/define_method_and_auto_wrap.ipp +0 -30
  211. data/rice/detail/demangle.cpp +0 -56
  212. data/rice/detail/demangle.hpp +0 -19
  213. data/rice/detail/env.hpp +0 -11
  214. data/rice/detail/method_data.cpp +0 -86
  215. data/rice/detail/node.hpp +0 -13
  216. data/rice/detail/object_call.hpp +0 -69
  217. data/rice/detail/object_call.ipp +0 -131
  218. data/rice/detail/protect.cpp +0 -29
  219. data/rice/detail/protect.hpp +0 -34
  220. data/rice/detail/ruby_version_code.hpp +0 -6
  221. data/rice/detail/ruby_version_code.hpp.in +0 -6
  222. data/rice/detail/st.hpp +0 -22
  223. data/rice/detail/traits.hpp +0 -43
  224. data/rice/detail/win32.hpp +0 -16
  225. data/rice/detail/wrap_function.hpp +0 -341
  226. data/rice/detail/wrap_function.ipp +0 -514
  227. data/rice/protect.hpp +0 -92
  228. data/rice/protect.ipp +0 -1134
  229. data/rice/rubypp.rb +0 -97
  230. data/rice/to_from_ruby.hpp +0 -8
  231. data/rice/to_from_ruby.ipp +0 -294
  232. data/rice/to_from_ruby_defn.hpp +0 -70
  233. data/ruby.ac +0 -135
  234. data/ruby/Makefile.am +0 -1
  235. data/ruby/Makefile.in +0 -625
  236. data/ruby/lib/Makefile.am +0 -3
  237. data/ruby/lib/Makefile.in +0 -503
  238. data/ruby/lib/mkmf-rice.rb.in +0 -217
  239. data/ruby/lib/version.rb +0 -3
  240. data/sample/Makefile.am +0 -47
  241. data/sample/Makefile.in +0 -486
  242. data/test/Makefile.am +0 -72
  243. data/test/Makefile.in +0 -1150
  244. data/test/ext/Makefile.am +0 -41
  245. data/test/ext/Makefile.in +0 -480
  246. data/test/test_rice.rb +0 -41
data/rice/rubypp.rb DELETED
@@ -1,97 +0,0 @@
1
- class Preprocessor
2
- def initialize(input, output, filename)
3
- @input = input
4
- @output = output
5
- @filename = filename
6
- @linenum = 1
7
- end
8
-
9
- def getline
10
- line = @input.gets
11
- @linenum += 1 if not line.nil?
12
- return line
13
- end
14
-
15
- def preprocess
16
- success = false
17
- begin
18
- loop do
19
- line = getline
20
- break if line.nil?
21
- case line
22
- when /(.*[^\\]|^)\#\{(.*?)\}(.*)/
23
- puts "#{$1}#{evaluate($2, @linenum)}#{$3}"
24
- when /^\#ruby\s+<<(.*)/
25
- marker = $1
26
- str = ''
27
- evalstart = @linenum
28
- loop do
29
- line = getline
30
- if line.nil? then
31
- raise "End of input without #{marker}"
32
- end
33
- break if line.chomp == marker
34
- str << line
35
- end
36
- result = evaluate(str, evalstart)
37
- puts result if not result.nil?
38
- when /^\#ruby\s+(.*)/
39
- str = line = $1
40
- while line[-1] == ?\\
41
- str.chop!
42
- line = getline
43
- break if line.nil?
44
- line.chomp!
45
- str << line
46
- end
47
- result = evaluate(str, @linenum)
48
- puts result if not result.nil?
49
- else
50
- puts line
51
- end
52
- end
53
- success = true
54
- ensure
55
- if not success then
56
- $stderr.puts "Error on line #{@linenum}:"
57
- end
58
- end
59
- end
60
-
61
- def evaluate(str, linenum)
62
- result = eval(str, TOPLEVEL_BINDING, @filename, linenum)
63
- success = true
64
- return result
65
- end
66
-
67
- def puts(line='')
68
- @output.puts(line)
69
- end
70
- end
71
-
72
- def puts(line='')
73
- $preprocessor.puts(line)
74
- end
75
-
76
- def rubypp(input_file, output_file)
77
- input = input_file ? File.open(input_file) : $stdin
78
- output = output_file ? File.open(output_file, 'w') : $stdout
79
-
80
- success = false
81
- begin
82
- $preprocessor = Preprocessor.new(input, output, input_file || "(stdin)")
83
- $preprocessor.preprocess()
84
- success = true
85
- ensure
86
- if not success then
87
- File.unlink(output_file) rescue Errno::ENOENT
88
- end
89
- end
90
- end
91
-
92
- if __FILE__ == $0 then
93
- input_file = ARGV[0]
94
- output_file = ARGV[1]
95
- rubypp(input_file, output_file)
96
- end
97
-
@@ -1,8 +0,0 @@
1
- #ifndef Rice__to_from_ruby__hpp_
2
- #define Rice__to_from_ruby__hpp_
3
-
4
- #include "to_from_ruby_defn.hpp"
5
- #include "to_from_ruby.ipp"
6
-
7
- #endif // Rice__to_from_ruby__hpp_
8
-
@@ -1,294 +0,0 @@
1
- #include "protect.hpp"
2
- #include "Object.hpp"
3
- #include "detail/from_ruby.ipp"
4
- #include "detail/to_ruby.ipp"
5
-
6
- // ---------------------------------------------------------------------
7
- template<>
8
- inline
9
- Rice::Object from_ruby<Rice::Object>(Rice::Object x)
10
- {
11
- return x;
12
- }
13
-
14
- template<>
15
- inline
16
- Rice::Object to_ruby<Rice::Object>(Rice::Object const & x)
17
- {
18
- return x;
19
- }
20
-
21
- // ---------------------------------------------------------------------
22
- namespace Rice
23
- {
24
- namespace detail
25
- {
26
- inline int num2int(VALUE x)
27
- {
28
- return NUM2INT(x);
29
- }
30
-
31
- inline VALUE int2num(int x)
32
- {
33
- return INT2NUM(x);
34
- }
35
- }
36
- }
37
-
38
- template<>
39
- inline
40
- int from_ruby<int>(Rice::Object x)
41
- {
42
- return Rice::detail::num2int(x);
43
- }
44
-
45
- template<>
46
- inline
47
- Rice::Object to_ruby<int>(int const & x)
48
- {
49
- return Rice::protect(Rice::detail::int2num, x);
50
- }
51
-
52
- // ---------------------------------------------------------------------
53
- namespace Rice
54
- {
55
- namespace detail
56
- {
57
- inline long num2long(VALUE x)
58
- {
59
- return NUM2LONG(x);
60
- }
61
-
62
- inline VALUE long2num(long x)
63
- {
64
- return LONG2NUM(x);
65
- }
66
- }
67
- }
68
-
69
- template<>
70
- inline
71
- long from_ruby<long>(Rice::Object x)
72
- {
73
- return Rice::protect(Rice::detail::num2long, x);
74
- }
75
-
76
- template<>
77
- inline
78
- Rice::Object to_ruby<long>(long const & x)
79
- {
80
- return Rice::protect(Rice::detail::long2num, x);
81
- }
82
-
83
- // ---------------------------------------------------------------------
84
- namespace Rice
85
- {
86
- namespace detail
87
- {
88
- inline unsigned int num2uint(VALUE x)
89
- {
90
- return NUM2UINT(x);
91
- }
92
-
93
- inline VALUE uint2num(unsigned int x)
94
- {
95
- return UINT2NUM(x);
96
- }
97
- }
98
- }
99
-
100
- template<>
101
- inline
102
- unsigned int from_ruby<unsigned int>(Rice::Object x)
103
- {
104
- return Rice::detail::num2uint(x);
105
- }
106
-
107
- template<>
108
- inline
109
- Rice::Object to_ruby<unsigned int>(unsigned int const & x)
110
- {
111
- return Rice::protect(Rice::detail::uint2num, x);
112
- }
113
-
114
- // ---------------------------------------------------------------------
115
- namespace Rice
116
- {
117
- namespace detail
118
- {
119
- inline unsigned long num2ulong(VALUE x)
120
- {
121
- return NUM2ULONG(x);
122
- }
123
-
124
- inline VALUE ulong2num(unsigned long x)
125
- {
126
- return ULONG2NUM(x);
127
- }
128
- }
129
- }
130
-
131
- template<>
132
- inline
133
- unsigned long from_ruby<unsigned long>(Rice::Object x)
134
- {
135
- return Rice::protect(Rice::detail::num2ulong, x);
136
- }
137
-
138
- template<>
139
- inline
140
- Rice::Object to_ruby<unsigned long>(unsigned long const & x)
141
- {
142
- return Rice::protect(Rice::detail::ulong2num, x);
143
- }
144
-
145
- // ---------------------------------------------------------------------
146
- template<>
147
- inline
148
- bool from_ruby<bool>(Rice::Object x)
149
- {
150
- return RTEST(x);
151
- }
152
-
153
- template<>
154
- inline
155
- Rice::Object to_ruby<bool>(bool const & x)
156
- {
157
- return x ? Qtrue : Qfalse;
158
- }
159
-
160
- // ---------------------------------------------------------------------
161
- template<>
162
- inline
163
- char from_ruby<char>(Rice::Object x)
164
- {
165
- if(x.rb_type() == T_STRING)
166
- {
167
- if(RSTRING_LEN(x.value()) == 1)
168
- {
169
- return RSTRING_PTR(x.value())[0];
170
- }
171
- else
172
- {
173
- throw std::invalid_argument("from_ruby<char>: string must have length 1");
174
- }
175
- }
176
- else
177
- {
178
- return from_ruby<int>(x) & 0xff;
179
- }
180
- }
181
-
182
- template<>
183
- inline
184
- Rice::Object to_ruby<char>(char const & x)
185
- {
186
- return to_ruby<int>(x);
187
- }
188
-
189
- // ---------------------------------------------------------------------
190
-
191
- template<>
192
- inline
193
- unsigned char from_ruby<unsigned char>(Rice::Object x)
194
- {
195
- // TODO: I'm not sure if this is the right behavior yet
196
- return from_ruby<char>(x);
197
- }
198
-
199
- template<>
200
- inline
201
- Rice::Object to_ruby<unsigned char>(unsigned char const & x)
202
- {
203
- return to_ruby<unsigned int>(x);
204
- }
205
-
206
- // ---------------------------------------------------------------------
207
-
208
- namespace Rice
209
- {
210
- namespace detail
211
- {
212
- inline VALUE num2dbl(VALUE x, double * d)
213
- {
214
- *d = NUM2DBL(x);
215
- return Qnil;
216
- }
217
-
218
- inline VALUE dbl2num(double x)
219
- {
220
- return rb_float_new(x);
221
- }
222
- }
223
- }
224
-
225
- template<>
226
- inline
227
- float from_ruby<float>(Rice::Object x)
228
- {
229
- double d;
230
- Rice::protect(Rice::detail::num2dbl, x, &d);
231
- return float(d);
232
- }
233
-
234
- template<>
235
- inline
236
- Rice::Object to_ruby<float>(float const & x)
237
- {
238
- return Rice::protect(Rice::detail::dbl2num, x);
239
- }
240
-
241
- // ---------------------------------------------------------------------
242
-
243
- template<>
244
- inline
245
- double from_ruby<double>(Rice::Object x)
246
- {
247
- double d;
248
- Rice::protect(Rice::detail::num2dbl, x, &d);
249
- return d;
250
- }
251
-
252
- template<>
253
- inline
254
- Rice::Object to_ruby<double>(double const & x)
255
- {
256
- return Rice::protect(Rice::detail::dbl2num, x);
257
- }
258
-
259
- // ---------------------------------------------------------------------
260
- template<>
261
- inline
262
- char const * from_ruby<char const *>(Rice::Object x)
263
- {
264
- return Rice::String(x).str().data();
265
- }
266
-
267
- template<>
268
- inline
269
- Rice::Object to_ruby<char const *>(char const * const & x)
270
- {
271
- return Rice::protect(rb_str_new2, x);
272
- }
273
-
274
- // ---------------------------------------------------------------------
275
- template<>
276
- inline
277
- std::string from_ruby<std::string>(Rice::Object x)
278
- {
279
- return Rice::String(x).str();
280
- }
281
-
282
- template<>
283
- inline
284
- Rice::Object to_ruby<std::string>(std::string const & x)
285
- {
286
- return Rice::protect(rb_str_new, x.data(), x.size());
287
- }
288
-
289
- template<>
290
- inline
291
- std::string* from_ruby<std::string* >(Rice::Object x)
292
- {
293
- return new std::string(Rice::String(x).str());
294
- }
@@ -1,70 +0,0 @@
1
- #ifndef Rice__to_from_ruby_defn__hpp_
2
- #define Rice__to_from_ruby_defn__hpp_
3
-
4
- #include "Object_defn.hpp"
5
- #include "detail/from_ruby.hpp"
6
- #include "detail/to_ruby.hpp"
7
-
8
- #include <typeinfo>
9
- #include <string>
10
- #include <stdexcept>
11
-
12
- // ---------------------------------------------------------------------
13
-
14
- //! Convert a Ruby object to C++.
15
- /*! If the Ruby object can be converted to an immediate value, returns a
16
- * copy of the Ruby object. If the Ruby object is holding a C++
17
- * object and the type specified is a pointer to that type, returns a
18
- * pointer to that object.
19
- *
20
- * Conversions from ruby to a pointer type are automatically generated
21
- * when a type is bound using Data_Type. If no conversion exists an
22
- * exception is thrown.
23
- *
24
- * \param T the C++ type to which to convert.
25
- * \param x the Ruby object to convert.
26
- * \return a C++ representation of the Ruby object.
27
- *
28
- * Example:
29
- * \code
30
- * Object x = INT2NUM(42);
31
- * std::cout << from_ruby<int>(x);
32
- *
33
- * Data_Object<Foo> foo(new Foo);
34
- * Object obj(foo);
35
- * std::cout << *from_ruby<Foo *>(obj) << std::endl;
36
- * \endcode
37
- */
38
- template<typename T>
39
- inline
40
- typename Rice::detail::from_ruby_<T>::Retval_T from_ruby(Rice::Object x)
41
- {
42
- return Rice::detail::from_ruby_<T>::convert(x);
43
- }
44
-
45
- //! Convert a C++ object to Ruby.
46
- /*! If x is a pointer, wraps the pointee as a Ruby object. If x is an
47
- * Object, returns x.
48
- *
49
- * If no conversion exists a compile-time error is generated.
50
- *
51
- * \param x the object to convert.
52
- * \return a Ruby representation of the C++ object.
53
- *
54
- * Example:
55
- * \code
56
- * rb_p(to_ruby(42));
57
- *
58
- * Foo * p_foo = new Foo();
59
- * rb_p(to_ruby(p_foo));
60
- * \endcode
61
- */
62
- template<typename T>
63
- inline
64
- Rice::Object to_ruby(T const & x)
65
- {
66
- return Rice::detail::to_ruby_<T>::convert(x);
67
- }
68
-
69
- #endif // Rice__to_from_ruby_defn__hpp_
70
-