rice 3.0.0 → 4.0.3
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +121 -0
- data/CONTRIBUTORS.md +19 -0
- data/Gemfile +3 -0
- data/README.md +44 -1025
- data/Rakefile +95 -12
- data/include/rice/rice.hpp +7766 -0
- data/include/rice/stl.hpp +1113 -0
- data/lib/mkmf-rice.rb +127 -0
- data/lib/version.rb +3 -0
- data/rice/Address_Registration_Guard.ipp +75 -32
- data/rice/Address_Registration_Guard_defn.hpp +60 -56
- data/rice/Arg.hpp +80 -4
- data/rice/Arg.ipp +51 -0
- data/rice/Constructor.hpp +12 -14
- data/rice/Data_Object.ipp +234 -107
- data/rice/Data_Object_defn.hpp +77 -117
- data/rice/Data_Type.hpp +1 -2
- data/rice/Data_Type.ipp +251 -295
- data/rice/Data_Type_defn.hpp +175 -243
- data/rice/Director.hpp +11 -6
- data/rice/Enum.hpp +54 -104
- data/rice/Enum.ipp +104 -230
- data/rice/Exception.hpp +2 -8
- data/rice/Exception.ipp +65 -0
- data/rice/Exception_defn.hpp +46 -47
- data/rice/Identifier.hpp +28 -28
- data/rice/Identifier.ipp +23 -27
- data/rice/Return.hpp +39 -0
- data/rice/Return.ipp +33 -0
- data/rice/detail/Exception_Handler.ipp +22 -62
- data/rice/detail/Exception_Handler_defn.hpp +76 -91
- data/rice/detail/Iterator.hpp +18 -88
- data/rice/detail/Iterator.ipp +47 -0
- data/rice/detail/Jump_Tag.hpp +21 -0
- data/rice/detail/MethodInfo.hpp +44 -0
- data/rice/detail/MethodInfo.ipp +78 -0
- data/rice/detail/NativeAttribute.hpp +53 -0
- data/rice/detail/NativeAttribute.ipp +83 -0
- data/rice/detail/NativeFunction.hpp +69 -0
- data/rice/detail/NativeFunction.ipp +248 -0
- data/rice/detail/RubyFunction.hpp +39 -0
- data/rice/detail/RubyFunction.ipp +92 -0
- data/rice/detail/Type.hpp +29 -0
- data/rice/detail/Type.ipp +138 -0
- data/rice/detail/TypeRegistry.hpp +50 -0
- data/rice/detail/TypeRegistry.ipp +106 -0
- data/rice/detail/Wrapper.hpp +51 -0
- data/rice/detail/Wrapper.ipp +151 -0
- data/rice/detail/default_allocation_func.hpp +8 -19
- data/rice/detail/default_allocation_func.ipp +9 -8
- data/rice/detail/from_ruby.hpp +2 -37
- data/rice/detail/from_ruby.ipp +1020 -46
- data/rice/detail/from_ruby_defn.hpp +38 -0
- data/rice/detail/function_traits.hpp +124 -0
- data/rice/detail/method_data.hpp +23 -15
- data/rice/detail/method_data.ipp +53 -0
- data/rice/detail/rice_traits.hpp +116 -0
- data/rice/detail/ruby.hpp +9 -46
- data/rice/detail/to_ruby.hpp +3 -17
- data/rice/detail/to_ruby.ipp +409 -31
- data/rice/detail/to_ruby_defn.hpp +48 -0
- data/rice/forward_declares.ipp +82 -0
- data/rice/global_function.hpp +16 -20
- data/rice/global_function.ipp +8 -17
- data/rice/rice.hpp +59 -0
- data/rice/ruby_mark.hpp +5 -3
- data/rice/ruby_try_catch.hpp +4 -4
- data/rice/stl.hpp +11 -0
- data/sample/callbacks/extconf.rb +3 -0
- data/sample/callbacks/sample_callbacks.cpp +10 -13
- data/sample/enum/extconf.rb +3 -0
- data/sample/enum/sample_enum.cpp +3 -17
- data/sample/enum/test.rb +2 -2
- data/sample/inheritance/animals.cpp +8 -24
- data/sample/inheritance/extconf.rb +3 -0
- data/sample/inheritance/test.rb +1 -1
- data/sample/map/extconf.rb +3 -0
- data/sample/map/map.cpp +10 -18
- data/sample/map/test.rb +1 -1
- data/test/embed_ruby.cpp +18 -5
- data/test/ext/t1/extconf.rb +3 -0
- data/test/ext/t1/t1.cpp +1 -3
- data/test/ext/t2/extconf.rb +3 -0
- data/test/ext/t2/t2.cpp +1 -1
- data/test/extconf.rb +23 -0
- data/test/ruby/test_callbacks_sample.rb +28 -0
- data/test/ruby/test_multiple_extensions.rb +18 -0
- data/test/ruby/test_multiple_extensions_same_class.rb +14 -0
- data/test/ruby/test_multiple_extensions_with_inheritance.rb +20 -0
- data/test/test_Address_Registration_Guard.cpp +23 -10
- data/test/test_Array.cpp +129 -73
- data/test/test_Attribute.cpp +147 -0
- data/test/test_Builtin_Object.cpp +34 -14
- data/test/test_Class.cpp +149 -275
- data/test/test_Constructor.cpp +10 -9
- data/test/test_Data_Object.cpp +133 -192
- data/test/test_Data_Type.cpp +322 -252
- data/test/test_Director.cpp +54 -41
- data/test/test_Enum.cpp +228 -103
- data/test/test_Exception.cpp +5 -6
- data/test/test_Hash.cpp +31 -30
- data/test/test_Identifier.cpp +4 -5
- data/test/test_Inheritance.cpp +221 -0
- data/test/test_Iterator.cpp +161 -0
- data/test/test_Jump_Tag.cpp +1 -1
- data/test/test_Keep_Alive.cpp +161 -0
- data/test/test_Memory_Management.cpp +2 -4
- data/test/test_Module.cpp +167 -110
- data/test/test_Object.cpp +41 -21
- data/test/test_Ownership.cpp +275 -0
- data/test/test_Self.cpp +205 -0
- data/test/test_Stl_Optional.cpp +90 -0
- data/test/test_Stl_Pair.cpp +144 -0
- data/test/test_Stl_SmartPointer.cpp +200 -0
- data/test/test_Stl_String.cpp +74 -0
- data/test/test_Stl_Vector.cpp +652 -0
- data/test/test_String.cpp +1 -2
- data/test/test_Struct.cpp +29 -39
- data/test/test_Symbol.cpp +1 -2
- data/test/test_To_From_Ruby.cpp +249 -285
- data/test/test_global_functions.cpp +39 -19
- data/test/unittest.hpp +0 -4
- metadata +70 -141
- data/Doxyfile +0 -2268
- data/Makefile.am +0 -26
- data/Makefile.in +0 -931
- data/README.mingw +0 -8
- data/aclocal.m4 +0 -1085
- data/ax_cxx_compile_stdcxx.m4 +0 -951
- data/bootstrap +0 -8
- data/config.guess +0 -1421
- data/config.sub +0 -1807
- data/configure +0 -7792
- data/configure.ac +0 -55
- data/depcomp +0 -791
- data/doxygen.ac +0 -314
- data/doxygen.am +0 -186
- data/extconf.rb +0 -70
- data/install-sh +0 -501
- data/missing +0 -215
- data/post-autoconf.rb +0 -22
- data/post-automake.rb +0 -28
- data/rice/Address_Registration_Guard.cpp +0 -22
- data/rice/Arg_impl.hpp +0 -129
- data/rice/Arg_operators.cpp +0 -21
- data/rice/Arg_operators.hpp +0 -19
- data/rice/Array.hpp +0 -214
- data/rice/Array.ipp +0 -256
- data/rice/Builtin_Object.hpp +0 -8
- data/rice/Builtin_Object.ipp +0 -50
- data/rice/Builtin_Object_defn.hpp +0 -50
- data/rice/Class.cpp +0 -57
- data/rice/Class.hpp +0 -8
- data/rice/Class.ipp +0 -6
- data/rice/Class_defn.hpp +0 -84
- data/rice/Data_Type.cpp +0 -54
- data/rice/Data_Type_fwd.hpp +0 -12
- data/rice/Director.cpp +0 -13
- data/rice/Exception.cpp +0 -54
- data/rice/Exception_Base.hpp +0 -8
- data/rice/Exception_Base.ipp +0 -13
- data/rice/Exception_Base_defn.hpp +0 -27
- data/rice/Hash.hpp +0 -230
- data/rice/Hash.ipp +0 -329
- data/rice/Identifier.cpp +0 -8
- data/rice/Jump_Tag.hpp +0 -24
- data/rice/Makefile.am +0 -121
- data/rice/Makefile.in +0 -884
- data/rice/Module.cpp +0 -84
- data/rice/Module.hpp +0 -8
- data/rice/Module.ipp +0 -6
- data/rice/Module_defn.hpp +0 -88
- data/rice/Module_impl.hpp +0 -281
- data/rice/Module_impl.ipp +0 -345
- data/rice/Object.cpp +0 -169
- data/rice/Object.hpp +0 -8
- data/rice/Object.ipp +0 -33
- data/rice/Object_defn.hpp +0 -214
- data/rice/Require_Guard.hpp +0 -21
- data/rice/String.cpp +0 -89
- data/rice/String.hpp +0 -91
- data/rice/Struct.cpp +0 -117
- data/rice/Struct.hpp +0 -162
- data/rice/Struct.ipp +0 -26
- data/rice/Symbol.cpp +0 -25
- data/rice/Symbol.hpp +0 -66
- data/rice/Symbol.ipp +0 -44
- data/rice/config.hpp +0 -47
- data/rice/config.hpp.in +0 -46
- data/rice/detail/Arguments.hpp +0 -118
- data/rice/detail/Auto_Function_Wrapper.hpp +0 -898
- data/rice/detail/Auto_Function_Wrapper.ipp +0 -3181
- data/rice/detail/Auto_Member_Function_Wrapper.hpp +0 -897
- data/rice/detail/Auto_Member_Function_Wrapper.ipp +0 -2501
- data/rice/detail/Caster.hpp +0 -103
- data/rice/detail/Not_Copyable.hpp +0 -25
- data/rice/detail/Wrapped_Function.hpp +0 -33
- data/rice/detail/cfp.hpp +0 -24
- data/rice/detail/cfp.ipp +0 -51
- data/rice/detail/check_ruby_type.cpp +0 -27
- data/rice/detail/check_ruby_type.hpp +0 -23
- data/rice/detail/creation_funcs.hpp +0 -37
- data/rice/detail/creation_funcs.ipp +0 -36
- data/rice/detail/define_method_and_auto_wrap.hpp +0 -31
- data/rice/detail/define_method_and_auto_wrap.ipp +0 -30
- data/rice/detail/demangle.cpp +0 -56
- data/rice/detail/demangle.hpp +0 -19
- data/rice/detail/env.hpp +0 -11
- data/rice/detail/method_data.cpp +0 -92
- data/rice/detail/node.hpp +0 -13
- data/rice/detail/protect.cpp +0 -29
- data/rice/detail/protect.hpp +0 -34
- data/rice/detail/ruby_version_code.hpp +0 -6
- data/rice/detail/ruby_version_code.hpp.in +0 -6
- data/rice/detail/st.hpp +0 -22
- data/rice/detail/win32.hpp +0 -16
- data/rice/detail/wrap_function.hpp +0 -66
- data/rice/protect.hpp +0 -38
- data/rice/protect.ipp +0 -1134
- data/rice/rubypp.rb +0 -97
- data/rice/to_from_ruby.hpp +0 -8
- data/rice/to_from_ruby.ipp +0 -418
- data/rice/to_from_ruby_defn.hpp +0 -70
- data/ruby/Makefile.am +0 -1
- data/ruby/Makefile.in +0 -628
- data/ruby/lib/Makefile.am +0 -3
- data/ruby/lib/Makefile.in +0 -506
- data/ruby/lib/mkmf-rice.rb.in +0 -217
- data/ruby/lib/version.rb +0 -3
- data/ruby.ac +0 -135
- data/sample/Makefile.am +0 -53
- data/sample/Makefile.in +0 -495
- data/test/Makefile.am +0 -73
- data/test/Makefile.in +0 -1219
- data/test/ext/Makefile.am +0 -41
- data/test/ext/Makefile.in +0 -483
- data/test/test_rice.rb +0 -45
data/rice/detail/to_ruby.ipp
CHANGED
|
@@ -1,36 +1,414 @@
|
|
|
1
|
-
#include "
|
|
1
|
+
#include "RubyFunction.hpp"
|
|
2
|
+
#include "../Return.hpp"
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
Rice::Object
|
|
5
|
-
Rice::detail::to_ruby_<T>::
|
|
6
|
-
convert(T const & x)
|
|
4
|
+
namespace Rice
|
|
7
5
|
{
|
|
8
|
-
|
|
6
|
+
namespace detail
|
|
9
7
|
{
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#ifndef Rice__detail__to_ruby_defn__hpp_
|
|
2
|
+
#define Rice__detail__to_ruby_defn__hpp_
|
|
3
|
+
|
|
4
|
+
#include "rice_traits.hpp"
|
|
5
|
+
|
|
6
|
+
namespace Rice
|
|
7
|
+
{
|
|
8
|
+
namespace detail
|
|
9
|
+
{
|
|
10
|
+
//! Convert a C++ object to Ruby.
|
|
11
|
+
/*! If x is a pointer, wraps the pointee as a Ruby object. If x is an
|
|
12
|
+
* Object, returns x.
|
|
13
|
+
*
|
|
14
|
+
* If no conversion exists a compile-time error is generated.
|
|
15
|
+
*
|
|
16
|
+
* \param x the object to convert.
|
|
17
|
+
* \return a Ruby representation of the C++ object.
|
|
18
|
+
*
|
|
19
|
+
* Example:
|
|
20
|
+
* \code
|
|
21
|
+
* rb_p(to_ruby(42));
|
|
22
|
+
*
|
|
23
|
+
* Foo * p_foo = new Foo();
|
|
24
|
+
* rb_p(to_ruby(p_foo));
|
|
25
|
+
* \endcode
|
|
26
|
+
*/
|
|
27
|
+
template <typename T>
|
|
28
|
+
class To_Ruby;
|
|
29
|
+
|
|
30
|
+
// Helper template function that let's users avoid having to specify the template type - its deduced
|
|
31
|
+
template <typename T>
|
|
32
|
+
VALUE to_ruby(T&& x)
|
|
33
|
+
{
|
|
34
|
+
using Unqualified_T = remove_cv_recursive_t<T>;
|
|
35
|
+
return To_Ruby<Unqualified_T>().convert(std::forward<T>(x));
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Helper template function that let's users avoid having to specify the template type - its deduced
|
|
39
|
+
template <typename T>
|
|
40
|
+
VALUE to_ruby(T* x)
|
|
41
|
+
{
|
|
42
|
+
using Unqualified_T = remove_cv_recursive_t<T>;
|
|
43
|
+
return To_Ruby<Unqualified_T*>().convert(x);
|
|
44
|
+
}
|
|
45
|
+
} // detail
|
|
46
|
+
} // Rice
|
|
47
|
+
|
|
48
|
+
#endif // Rice__detail__to_ruby_defn__hpp_
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
#ifndef Rice__Forward_Declares__ipp_
|
|
2
|
+
#define Rice__Forward_Declares__ipp_
|
|
3
|
+
|
|
4
|
+
namespace Rice
|
|
5
|
+
{
|
|
6
|
+
// These methods cannot be defined where they are declared due to circular dependencies
|
|
7
|
+
inline Class Object::class_of() const
|
|
8
|
+
{
|
|
9
|
+
return detail::protect(rb_class_of, value_);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
inline String Object::to_s() const
|
|
13
|
+
{
|
|
14
|
+
return call("to_s");
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
inline String Object::class_name() const
|
|
18
|
+
{
|
|
19
|
+
return detail::protect(rb_obj_classname, this->value());
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
inline String Object::inspect() const
|
|
23
|
+
{
|
|
24
|
+
return call("inspect");
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
inline Object Object::instance_eval(String const& s)
|
|
28
|
+
{
|
|
29
|
+
const VALUE argv[] = { s.value() };
|
|
30
|
+
return detail::protect(rb_obj_instance_eval, 1, &argv[0], this->value());
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
inline Object Object::vcall(Identifier id, Array args)
|
|
34
|
+
{
|
|
35
|
+
std::vector<VALUE> a(args.size());
|
|
36
|
+
|
|
37
|
+
Array::const_iterator it = args.begin();
|
|
38
|
+
Array::const_iterator end = args.end();
|
|
39
|
+
|
|
40
|
+
for (int i = 0; it != end; i++, ++it)
|
|
41
|
+
{
|
|
42
|
+
a[i] = it->value();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return detail::protect(rb_funcall3, this->value(), id.id(), (int)args.size(), (const VALUE*)a.data());
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
inline std::ostream& operator<<(std::ostream& out, Object const& obj)
|
|
49
|
+
{
|
|
50
|
+
String s(obj.to_s());
|
|
51
|
+
out << s.c_str();
|
|
52
|
+
return out;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
inline Identifier::Identifier(Symbol const& symbol) : id_(SYM2ID(symbol.value()))
|
|
56
|
+
{
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
inline String Module::name() const
|
|
60
|
+
{
|
|
61
|
+
VALUE name = detail::protect(rb_mod_name, this->value());
|
|
62
|
+
if (name == Qnil)
|
|
63
|
+
{
|
|
64
|
+
return String("");
|
|
65
|
+
}
|
|
66
|
+
else
|
|
67
|
+
{
|
|
68
|
+
return name;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
inline Array Module::ancestors() const
|
|
73
|
+
{
|
|
74
|
+
return detail::protect(rb_mod_ancestors, this->value());
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
inline Class Module::singleton_class() const
|
|
78
|
+
{
|
|
79
|
+
return CLASS_OF(value());
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
#endif // Rice__Forward_Declares__ipp_
|
data/rice/global_function.hpp
CHANGED
|
@@ -5,27 +5,23 @@
|
|
|
5
5
|
|
|
6
6
|
namespace Rice
|
|
7
7
|
{
|
|
8
|
+
template<typename Function_T>
|
|
9
|
+
[[deprecated("Please call define_global_function with Arg parameters")]]
|
|
10
|
+
void define_global_function(char const * name, Function_T&& func, MethodInfo* arguments);
|
|
8
11
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
template<typename Func_T>
|
|
23
|
-
void define_global_function(
|
|
24
|
-
char const * name,
|
|
25
|
-
Func_T func,
|
|
26
|
-
Arg const& arg);
|
|
27
|
-
|
|
28
|
-
|
|
12
|
+
//! Define an global function
|
|
13
|
+
/*! The method's implementation can be any function or static member
|
|
14
|
+
* function. A wrapper will be generated which will convert the arguments
|
|
15
|
+
* from ruby types to C++ types before calling the function. The return
|
|
16
|
+
* value will be converted back to ruby.
|
|
17
|
+
* \param name the name of the method
|
|
18
|
+
* \param func the implementation of the function, either a function
|
|
19
|
+
* pointer or a member function pointer.
|
|
20
|
+
* \param args a list of Arg instance used to define default parameters (optional)
|
|
21
|
+
* \return *this
|
|
22
|
+
*/
|
|
23
|
+
template<typename Function_T, typename...Arg_Ts>
|
|
24
|
+
void define_global_function(char const * name, Function_T&& func, Arg_Ts const& ...args);
|
|
29
25
|
} // Rice
|
|
30
26
|
|
|
31
27
|
#include "global_function.ipp"
|
data/rice/global_function.ipp
CHANGED
|
@@ -1,22 +1,13 @@
|
|
|
1
|
-
#include "
|
|
1
|
+
#include "cpp_api/Module.hpp"
|
|
2
2
|
|
|
3
|
-
template<typename
|
|
4
|
-
void Rice::define_global_function(
|
|
5
|
-
char const * name,
|
|
6
|
-
Func_T func,
|
|
7
|
-
Arguments* arguments)
|
|
3
|
+
template<typename Function_T>
|
|
4
|
+
void Rice::define_global_function(char const * name, Function_T&& func, MethodInfo* methodInfo)
|
|
8
5
|
{
|
|
9
|
-
Module(rb_mKernel).define_module_function(name, func,
|
|
6
|
+
Module(rb_mKernel).define_module_function(name, std::forward<Function_T>(func), methodInfo);
|
|
10
7
|
}
|
|
11
8
|
|
|
12
|
-
template<typename
|
|
13
|
-
void Rice::define_global_function(
|
|
14
|
-
char const * name,
|
|
15
|
-
Func_T func,
|
|
16
|
-
Arg const& arg)
|
|
9
|
+
template<typename Function_T, typename...Arg_Ts>
|
|
10
|
+
void Rice::define_global_function(char const * name, Function_T&& func, Arg_Ts const& ...args)
|
|
17
11
|
{
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
define_global_function(name, func, args);
|
|
21
|
-
}
|
|
22
|
-
|
|
12
|
+
Module(rb_mKernel).define_module_function(name, std::forward<Function_T>(func), args...);
|
|
13
|
+
}
|
data/rice/rice.hpp
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
#ifndef Rice__hpp_
|
|
2
|
+
#define Rice__hpp_
|
|
3
|
+
|
|
4
|
+
#include "detail/ruby.hpp"
|
|
5
|
+
#include "detail/rice_traits.hpp"
|
|
6
|
+
#include "detail/function_traits.hpp"
|
|
7
|
+
#include "detail/Type.hpp"
|
|
8
|
+
#include "detail/TypeRegistry.hpp"
|
|
9
|
+
#include "detail/Wrapper.hpp"
|
|
10
|
+
#include "detail/default_allocation_func.hpp"
|
|
11
|
+
#include "detail/Jump_Tag.hpp"
|
|
12
|
+
#include "Exception_defn.hpp"
|
|
13
|
+
#include "detail/RubyFunction.hpp"
|
|
14
|
+
#include "Return.hpp"
|
|
15
|
+
#include "Arg.hpp"
|
|
16
|
+
#include "detail/from_ruby.hpp"
|
|
17
|
+
#include "detail/to_ruby.hpp"
|
|
18
|
+
#include "detail/MethodInfo.hpp"
|
|
19
|
+
#include "detail/Exception_Handler.hpp"
|
|
20
|
+
#include "detail/Iterator.hpp"
|
|
21
|
+
#include "Exception.ipp"
|
|
22
|
+
#include "detail/method_data.hpp"
|
|
23
|
+
#include "ruby_try_catch.hpp"
|
|
24
|
+
#include "detail/NativeAttribute.hpp"
|
|
25
|
+
#include "detail/NativeFunction.hpp"
|
|
26
|
+
|
|
27
|
+
#include "ruby_mark.hpp"
|
|
28
|
+
|
|
29
|
+
#include "Identifier.hpp"
|
|
30
|
+
|
|
31
|
+
#include "cpp_api/Object.hpp"
|
|
32
|
+
#include "cpp_api/Builtin_Object.hpp"
|
|
33
|
+
#include "cpp_api/String.hpp"
|
|
34
|
+
#include "cpp_api/Array.hpp"
|
|
35
|
+
#include "cpp_api/Hash.hpp"
|
|
36
|
+
#include "cpp_api/Symbol.hpp"
|
|
37
|
+
|
|
38
|
+
#include "Address_Registration_Guard.hpp"
|
|
39
|
+
#include "cpp_api/Module.hpp"
|
|
40
|
+
#include "global_function.hpp"
|
|
41
|
+
|
|
42
|
+
#include "cpp_api/Class.hpp"
|
|
43
|
+
#include "cpp_api/Struct.hpp"
|
|
44
|
+
|
|
45
|
+
#include "Director.hpp"
|
|
46
|
+
#include "Data_Type.hpp"
|
|
47
|
+
#include "Constructor.hpp"
|
|
48
|
+
#include "Data_Object.hpp"
|
|
49
|
+
#include "detail/Iterator.ipp"
|
|
50
|
+
|
|
51
|
+
// Dependent on Data_Object due to the way method metadata is stored in the Ruby class
|
|
52
|
+
#include "detail/default_allocation_func.ipp"
|
|
53
|
+
|
|
54
|
+
#include "Enum.hpp"
|
|
55
|
+
|
|
56
|
+
// Dependent on Module, Class, Array and String
|
|
57
|
+
#include "forward_declares.ipp"
|
|
58
|
+
|
|
59
|
+
#endif // Rice__hpp_
|