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
@@ -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
+ }