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/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,418 +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 short num2short(VALUE x)
27
- {
28
- return NUM2SHORT(x);
29
- }
30
-
31
- inline VALUE short2num(short x)
32
- {
33
- return INT2NUM(x);
34
- }
35
- }
36
- }
37
-
38
- template<>
39
- inline
40
- short from_ruby<short>(Rice::Object x)
41
- {
42
- return Rice::detail::num2short(x);
43
- }
44
-
45
- template<>
46
- inline
47
- Rice::Object to_ruby<short>(short const & x)
48
- {
49
- return Rice::protect(Rice::detail::short2num, x);
50
- }
51
-
52
- // ---------------------------------------------------------------------
53
- namespace Rice
54
- {
55
- namespace detail
56
- {
57
- inline int num2int(VALUE x)
58
- {
59
- return NUM2INT(x);
60
- }
61
-
62
- inline VALUE int2num(int x)
63
- {
64
- return INT2NUM(x);
65
- }
66
- }
67
- }
68
-
69
- template<>
70
- inline
71
- int from_ruby<int>(Rice::Object x)
72
- {
73
- return Rice::detail::num2int(x);
74
- }
75
-
76
- template<>
77
- inline
78
- Rice::Object to_ruby<int>(int const & x)
79
- {
80
- return Rice::protect(Rice::detail::int2num, x);
81
- }
82
-
83
- // ---------------------------------------------------------------------
84
- namespace Rice
85
- {
86
- namespace detail
87
- {
88
- inline long num2long(VALUE x)
89
- {
90
- return NUM2LONG(x);
91
- }
92
-
93
- inline VALUE long2num(long x)
94
- {
95
- return LONG2NUM(x);
96
- }
97
- }
98
- }
99
-
100
- template<>
101
- inline
102
- long from_ruby<long>(Rice::Object x)
103
- {
104
- return (long)Rice::protect(Rice::detail::num2long, x);
105
- }
106
-
107
- template<>
108
- inline
109
- Rice::Object to_ruby<long>(long const & x)
110
- {
111
- return Rice::protect(Rice::detail::long2num, x);
112
- }
113
-
114
- // ---------------------------------------------------------------------
115
- namespace Rice
116
- {
117
- namespace detail
118
- {
119
- inline long long num2longlong(VALUE x)
120
- {
121
- return NUM2LL(x);
122
- }
123
-
124
- inline VALUE longlong2num(long long x)
125
- {
126
- return LL2NUM(x);
127
- }
128
- }
129
- }
130
-
131
- template<>
132
- inline
133
- long long from_ruby<long long>(Rice::Object x)
134
- {
135
- return Rice::protect(Rice::detail::num2longlong, x);
136
- }
137
-
138
- template<>
139
- inline
140
- Rice::Object to_ruby<long long>(long long const & x)
141
- {
142
- return Rice::protect(Rice::detail::longlong2num, x);
143
- }
144
-
145
- // ---------------------------------------------------------------------
146
- namespace Rice
147
- {
148
- namespace detail
149
- {
150
- inline unsigned short num2ushort(VALUE x)
151
- {
152
- return NUM2USHORT(x);
153
- }
154
-
155
- inline VALUE ushort2num(unsigned short x)
156
- {
157
- return UINT2NUM(x);
158
- }
159
- }
160
- }
161
-
162
- template<>
163
- inline
164
- unsigned short from_ruby<unsigned short>(Rice::Object x)
165
- {
166
- return Rice::detail::num2ushort(x);
167
- }
168
-
169
- template<>
170
- inline
171
- Rice::Object to_ruby<unsigned short>(unsigned short const & x)
172
- {
173
- return Rice::protect(Rice::detail::ushort2num, x);
174
- }
175
-
176
- // ---------------------------------------------------------------------
177
- namespace Rice
178
- {
179
- namespace detail
180
- {
181
- inline unsigned int num2uint(VALUE x)
182
- {
183
- return NUM2UINT(x);
184
- }
185
-
186
- inline VALUE uint2num(unsigned int x)
187
- {
188
- return UINT2NUM(x);
189
- }
190
- }
191
- }
192
-
193
- template<>
194
- inline
195
- unsigned int from_ruby<unsigned int>(Rice::Object x)
196
- {
197
- return Rice::detail::num2uint(x);
198
- }
199
-
200
- template<>
201
- inline
202
- Rice::Object to_ruby<unsigned int>(unsigned int const & x)
203
- {
204
- return Rice::protect(Rice::detail::uint2num, x);
205
- }
206
-
207
- // ---------------------------------------------------------------------
208
- namespace Rice
209
- {
210
- namespace detail
211
- {
212
- inline unsigned long num2ulong(VALUE x)
213
- {
214
- return NUM2ULONG(x);
215
- }
216
-
217
- inline VALUE ulong2num(unsigned long x)
218
- {
219
- return ULONG2NUM(x);
220
- }
221
- }
222
- }
223
-
224
- template<>
225
- inline
226
- unsigned long from_ruby<unsigned long>(Rice::Object x)
227
- {
228
- return (unsigned long)Rice::protect(Rice::detail::num2ulong, x);
229
- }
230
-
231
- template<>
232
- inline
233
- Rice::Object to_ruby<unsigned long>(unsigned long const & x)
234
- {
235
- return Rice::protect(Rice::detail::ulong2num, x);
236
- }
237
-
238
- // ---------------------------------------------------------------------
239
- namespace Rice
240
- {
241
- namespace detail
242
- {
243
- inline unsigned long long num2ulonglong(VALUE x)
244
- {
245
- return NUM2ULL(x);
246
- }
247
-
248
- inline VALUE ulonglong2num(unsigned long long x)
249
- {
250
- return ULL2NUM(x);
251
- }
252
- }
253
- }
254
-
255
- template<>
256
- inline
257
- unsigned long long from_ruby<unsigned long long>(Rice::Object x)
258
- {
259
- return Rice::protect(Rice::detail::num2ulonglong, x);
260
- }
261
-
262
- template<>
263
- inline
264
- Rice::Object to_ruby<unsigned long long>(unsigned long long const & x)
265
- {
266
- return Rice::protect(Rice::detail::ulonglong2num, x);
267
- }
268
-
269
- // ---------------------------------------------------------------------
270
- template<>
271
- inline
272
- bool from_ruby<bool>(Rice::Object x)
273
- {
274
- return RTEST(x);
275
- }
276
-
277
- template<>
278
- inline
279
- Rice::Object to_ruby<bool>(bool const & x)
280
- {
281
- return x ? Qtrue : Qfalse;
282
- }
283
-
284
- // ---------------------------------------------------------------------
285
- template<>
286
- inline
287
- char from_ruby<char>(Rice::Object x)
288
- {
289
- if(x.rb_type() == T_STRING)
290
- {
291
- if(RSTRING_LEN(x.value()) == 1)
292
- {
293
- return RSTRING_PTR(x.value())[0];
294
- }
295
- else
296
- {
297
- throw std::invalid_argument("from_ruby<char>: string must have length 1");
298
- }
299
- }
300
- else
301
- {
302
- return from_ruby<int>(x) & 0xff;
303
- }
304
- }
305
-
306
- template<>
307
- inline
308
- Rice::Object to_ruby<char>(char const & x)
309
- {
310
- return to_ruby<int>(x);
311
- }
312
-
313
- // ---------------------------------------------------------------------
314
-
315
- template<>
316
- inline
317
- unsigned char from_ruby<unsigned char>(Rice::Object x)
318
- {
319
- // TODO: I'm not sure if this is the right behavior yet
320
- return from_ruby<char>(x);
321
- }
322
-
323
- template<>
324
- inline
325
- Rice::Object to_ruby<unsigned char>(unsigned char const & x)
326
- {
327
- return to_ruby<unsigned int>(x);
328
- }
329
-
330
- // ---------------------------------------------------------------------
331
-
332
- namespace Rice
333
- {
334
- namespace detail
335
- {
336
- inline VALUE num2dbl(VALUE x, double * d)
337
- {
338
- *d = NUM2DBL(x);
339
- return Qnil;
340
- }
341
-
342
- inline VALUE dbl2num(double x)
343
- {
344
- return rb_float_new(x);
345
- }
346
- }
347
- }
348
-
349
- template<>
350
- inline
351
- float from_ruby<float>(Rice::Object x)
352
- {
353
- double d;
354
- Rice::protect(Rice::detail::num2dbl, x, &d);
355
- return float(d);
356
- }
357
-
358
- template<>
359
- inline
360
- Rice::Object to_ruby<float>(float const & x)
361
- {
362
- return Rice::protect(Rice::detail::dbl2num, x);
363
- }
364
-
365
- // ---------------------------------------------------------------------
366
-
367
- template<>
368
- inline
369
- double from_ruby<double>(Rice::Object x)
370
- {
371
- double d;
372
- Rice::protect(Rice::detail::num2dbl, x, &d);
373
- return d;
374
- }
375
-
376
- template<>
377
- inline
378
- Rice::Object to_ruby<double>(double const & x)
379
- {
380
- return Rice::protect(Rice::detail::dbl2num, x);
381
- }
382
-
383
- // ---------------------------------------------------------------------
384
- template<>
385
- inline
386
- char const * from_ruby<char const *>(Rice::Object x)
387
- {
388
- return Rice::String(x).c_str();
389
- }
390
-
391
- template<>
392
- inline
393
- Rice::Object to_ruby<char const *>(char const * const & x)
394
- {
395
- return Rice::protect(rb_str_new2, x);
396
- }
397
-
398
- // ---------------------------------------------------------------------
399
- template<>
400
- inline
401
- std::string from_ruby<std::string>(Rice::Object x)
402
- {
403
- return Rice::String(x).str();
404
- }
405
-
406
- template<>
407
- inline
408
- Rice::Object to_ruby<std::string>(std::string const & x)
409
- {
410
- return Rice::protect(rb_str_new, x.data(), (long)x.size());
411
- }
412
-
413
- template<>
414
- inline
415
- std::string* from_ruby<std::string* >(Rice::Object x)
416
- {
417
- return new std::string(Rice::String(x).str());
418
- }