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
@@ -1,22 +1,8 @@
1
1
  #ifndef Rice__detail__to_ruby__hpp_
2
2
  #define Rice__detail__to_ruby__hpp_
3
3
 
4
- namespace Rice
5
- {
6
- namespace detail
7
- {
8
- template<typename T>
9
- struct to_ruby_
10
- {
11
- static Rice::Object convert(T const & x);
12
- };
13
-
14
- template<typename T>
15
- struct to_ruby_<T *>
16
- {
17
- static Rice::Object convert(T * x);
18
- };
19
- } // detail
20
- } // Rice
4
+ #include "to_ruby_defn.hpp"
5
+ #include "to_ruby.ipp"
21
6
 
22
7
  #endif // Rice__detail__to_ruby__hpp_
8
+
@@ -1,36 +1,414 @@
1
- #include "../Data_Object.hpp"
1
+ #include "RubyFunction.hpp"
2
+ #include "../Return.hpp"
2
3
 
3
- template<typename T>
4
- Rice::Object
5
- Rice::detail::to_ruby_<T>::
6
- convert(T const & x)
4
+ namespace Rice
7
5
  {
8
- if(Data_Type<T>::is_bound())
6
+ namespace detail
9
7
  {
10
- return Rice::Data_Object<T >(new T(x), Rice::Data_Type<T >::klass());
11
- }
12
- else
13
- {
14
- std::string s("Unable to convert ");
15
- s += demangle(typeid(T *).name());
16
- throw std::invalid_argument(s.c_str());
17
- }
18
- }
8
+ template<>
9
+ class To_Ruby<void>
10
+ {
11
+ public:
12
+ VALUE convert(void const*)
13
+ {
14
+ return Qnil;
15
+ }
16
+ };
19
17
 
20
- template<typename T>
21
- Rice::Object
22
- Rice::detail::to_ruby_<T *>::
23
- convert(T * x)
24
- {
25
- if(Data_Type<T>::is_bound())
26
- {
27
- Data_Object<T> obj(x);
28
- return obj;
29
- }
30
- else
31
- {
32
- std::string s("Unable to convert ");
33
- s += demangle(typeid(T *).name());
34
- throw std::invalid_argument(s.c_str());
18
+ template<>
19
+ class To_Ruby<std::nullptr_t>
20
+ {
21
+ public:
22
+ VALUE convert(std::nullptr_t const)
23
+ {
24
+ return Qnil;
25
+ }
26
+ };
27
+
28
+ template<>
29
+ class To_Ruby<short>
30
+ {
31
+ public:
32
+ VALUE convert(short const& x)
33
+ {
34
+ #ifdef rb_int2num_inline
35
+ return protect(rb_int2num_inline, (int)x);
36
+ #else
37
+ return RB_INT2NUM(x);
38
+ #endif
39
+ }
40
+ };
41
+
42
+ template<>
43
+ class To_Ruby<short&>
44
+ {
45
+ public:
46
+ VALUE convert(short const& x)
47
+ {
48
+ #ifdef rb_int2num_inline
49
+ return protect(rb_int2num_inline, (int)x);
50
+ #else
51
+ return RB_INT2NUM(x);
52
+ #endif
53
+ }
54
+ };
55
+
56
+ template<>
57
+ class To_Ruby<int>
58
+ {
59
+ public:
60
+ VALUE convert(int const& x)
61
+ {
62
+ #ifdef rb_int2num_inline
63
+ return protect(rb_int2num_inline, (int)x);
64
+ #else
65
+ return RB_INT2NUM(x);
66
+ #endif
67
+ }
68
+ };
69
+
70
+ template<>
71
+ class To_Ruby<int&>
72
+ {
73
+ public:
74
+ VALUE convert(int const& x)
75
+ {
76
+ #ifdef rb_int2num_inline
77
+ return protect(rb_int2num_inline, (int)x);
78
+ #else
79
+ return RB_INT2NUM(x);
80
+ #endif
81
+ }
82
+ };
83
+
84
+ template<>
85
+ class To_Ruby<long>
86
+ {
87
+ public:
88
+ VALUE convert(long const& x)
89
+ {
90
+ return protect(rb_long2num_inline, x);
91
+ }
92
+ };
93
+
94
+ template<>
95
+ class To_Ruby<long&>
96
+ {
97
+ public:
98
+ VALUE convert(long const& x)
99
+ {
100
+ return protect(rb_long2num_inline, x);
101
+ }
102
+ };
103
+
104
+ template<>
105
+ class To_Ruby<long long>
106
+ {
107
+ public:
108
+ VALUE convert(long long const& x)
109
+ {
110
+ return protect(rb_ll2inum, x);
111
+ }
112
+ };
113
+
114
+ template<>
115
+ class To_Ruby<long long&>
116
+ {
117
+ public:
118
+ VALUE convert(long long const& x)
119
+ {
120
+ return protect(rb_ll2inum, x);
121
+ }
122
+ };
123
+
124
+ template<>
125
+ class To_Ruby<unsigned short>
126
+ {
127
+ public:
128
+ VALUE convert(unsigned short const& x)
129
+ {
130
+ #ifdef rb_int2num_inline
131
+ return protect(rb_uint2num_inline, (unsigned int)x);
132
+ #else
133
+ return RB_UINT2NUM(x);
134
+ #endif
135
+ }
136
+ };
137
+
138
+ template<>
139
+ class To_Ruby<unsigned short&>
140
+ {
141
+ public:
142
+ VALUE convert(unsigned short const& x)
143
+ {
144
+ #ifdef rb_int2num_inline
145
+ return protect(rb_uint2num_inline, (unsigned int)x);
146
+ #else
147
+ return RB_UINT2NUM(x);
148
+ #endif
149
+ }
150
+ };
151
+
152
+ template<>
153
+ class To_Ruby<unsigned int>
154
+ {
155
+ public:
156
+ VALUE convert(unsigned int const& x)
157
+ {
158
+ #ifdef rb_int2num_inline
159
+ return protect(rb_uint2num_inline, (unsigned int)x);
160
+ #else
161
+ return RB_UINT2NUM(x);
162
+ #endif
163
+ }
164
+ };
165
+
166
+ template<>
167
+ class To_Ruby<unsigned int&>
168
+ {
169
+ public:
170
+ VALUE convert(unsigned int const& x)
171
+ {
172
+ #ifdef rb_int2num_inline
173
+ return protect(rb_uint2num_inline, (unsigned int)x);
174
+ #else
175
+ return RB_UINT2NUM(x);
176
+ #endif
177
+ }
178
+ };
179
+
180
+ template<>
181
+ class To_Ruby<unsigned long>
182
+ {
183
+ public:
184
+ To_Ruby() = default;
185
+
186
+ explicit To_Ruby(Return* returnInfo) : returnInfo_(returnInfo)
187
+ {
188
+ }
189
+
190
+ VALUE convert(unsigned long const& x)
191
+ {
192
+ if (this->returnInfo_ && this->returnInfo_->getIsValue())
193
+ {
194
+ return x;
195
+ }
196
+ else
197
+ {
198
+ return protect(rb_ulong2num_inline, x);
199
+ }
200
+ }
201
+
202
+ private:
203
+ Return* returnInfo_ = nullptr;
204
+ };
205
+
206
+ template<>
207
+ class To_Ruby<unsigned long&>
208
+ {
209
+ public:
210
+ To_Ruby() = default;
211
+
212
+ explicit To_Ruby(Return* returnInfo) : returnInfo_(returnInfo)
213
+ {
214
+ }
215
+
216
+ VALUE convert(unsigned long const& x)
217
+ {
218
+ if (this->returnInfo_ && this->returnInfo_->getIsValue())
219
+ {
220
+ return x;
221
+ }
222
+ else
223
+ {
224
+ return protect(rb_ulong2num_inline, x);
225
+ }
226
+ }
227
+
228
+ private:
229
+ Return* returnInfo_ = nullptr;
230
+ };
231
+
232
+ template<>
233
+ class To_Ruby<unsigned long long>
234
+ {
235
+ public:
236
+ To_Ruby() = default;
237
+
238
+ explicit To_Ruby(Return* returnInfo) : returnInfo_(returnInfo)
239
+ {
240
+ }
241
+
242
+ VALUE convert(unsigned long long const& x)
243
+ {
244
+ if (this->returnInfo_ && this->returnInfo_->getIsValue())
245
+ {
246
+ return x;
247
+ }
248
+ else
249
+ {
250
+ return protect(rb_ull2inum, (unsigned long long)x);
251
+ }
252
+ }
253
+
254
+ private:
255
+ Return* returnInfo_ = nullptr;
256
+ };
257
+
258
+ template<>
259
+ class To_Ruby<unsigned long long&>
260
+ {
261
+ public:
262
+ To_Ruby() = default;
263
+
264
+ explicit To_Ruby(Return* returnInfo) : returnInfo_(returnInfo)
265
+ {
266
+ }
267
+
268
+ VALUE convert(unsigned long long const& x)
269
+ {
270
+ if (this->returnInfo_ && this->returnInfo_->getIsValue())
271
+ {
272
+ return x;
273
+ }
274
+ else
275
+ {
276
+ return protect(rb_ull2inum, (unsigned long long)x);
277
+ }
278
+ }
279
+
280
+ private:
281
+ Return* returnInfo_ = nullptr;
282
+ };
283
+
284
+ template<>
285
+ class To_Ruby<float>
286
+ {
287
+ public:
288
+ VALUE convert(float const& x)
289
+ {
290
+ return protect(rb_float_new, (double)x);
291
+ }
292
+ };
293
+
294
+ template<>
295
+ class To_Ruby<float&>
296
+ {
297
+ public:
298
+ VALUE convert(float const& x)
299
+ {
300
+ return protect(rb_float_new, (double)x);
301
+ }
302
+ };
303
+
304
+ template<>
305
+ class To_Ruby<double>
306
+ {
307
+ public:
308
+ VALUE convert(double const& x)
309
+ {
310
+ return protect(rb_float_new, x);
311
+ }
312
+ };
313
+
314
+ template<>
315
+ class To_Ruby<double&>
316
+ {
317
+ public:
318
+ VALUE convert(double const& x)
319
+ {
320
+ return protect(rb_float_new, x);
321
+ }
322
+ };
323
+
324
+ template<>
325
+ class To_Ruby<bool>
326
+ {
327
+ public:
328
+ VALUE convert(bool const& x)
329
+ {
330
+ return x ? Qtrue : Qfalse;
331
+ }
332
+ };
333
+
334
+ template<>
335
+ class To_Ruby<bool&>
336
+ {
337
+ public:
338
+ VALUE convert(bool const& x)
339
+ {
340
+ return x ? Qtrue : Qfalse;
341
+ }
342
+ };
343
+
344
+ template<>
345
+ class To_Ruby<char>
346
+ {
347
+ public:
348
+ VALUE convert(char const& x)
349
+ {
350
+ return To_Ruby<int>().convert(x);
351
+ }
352
+ };
353
+
354
+ template<>
355
+ class To_Ruby<char&>
356
+ {
357
+ public:
358
+ VALUE convert(char const& x)
359
+ {
360
+ return To_Ruby<int>().convert(x);
361
+ }
362
+ };
363
+
364
+ template<>
365
+ class To_Ruby<unsigned char>
366
+ {
367
+ public:
368
+ VALUE convert(unsigned char const& x)
369
+ {
370
+ return To_Ruby<unsigned int>().convert(x);
371
+ }
372
+ };
373
+
374
+ template<>
375
+ class To_Ruby<unsigned char&>
376
+ {
377
+ public:
378
+ VALUE convert(unsigned char const& x)
379
+ {
380
+ return To_Ruby<unsigned int>().convert(x);
381
+ }
382
+ };
383
+
384
+ template<>
385
+ class To_Ruby<signed char>
386
+ {
387
+ public:
388
+ VALUE convert(signed char const& x)
389
+ {
390
+ return To_Ruby<signed int>().convert(x);
391
+ }
392
+ };
393
+
394
+ template<>
395
+ class To_Ruby<signed char&>
396
+ {
397
+ public:
398
+ VALUE convert(signed char const& x)
399
+ {
400
+ return To_Ruby<signed int>().convert(x);
401
+ }
402
+ };
403
+
404
+ template<>
405
+ class To_Ruby<char*>
406
+ {
407
+ public:
408
+ VALUE convert(char const* x)
409
+ {
410
+ return protect(rb_str_new2, x);
411
+ }
412
+ };
35
413
  }
36
- }
414
+ }