rice 4.6.1 → 4.7.1
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 +38 -0
- data/CMakeLists.txt +0 -4
- data/Rakefile +2 -8
- data/bin/rice-doc.rb +211 -0
- data/bin/rice-rbs.rb +92 -0
- data/include/rice/rice.hpp +4694 -3704
- data/include/rice/stl.hpp +840 -294
- data/lib/rice/doc/cpp_reference.rb +166 -0
- data/lib/rice/doc/doxygen.rb +294 -0
- data/lib/rice/doc/mkdocs.rb +298 -0
- data/lib/rice/doc/rice.rb +29 -0
- data/lib/rice/doc/ruby.rb +37 -0
- data/lib/rice/doc.rb +5 -0
- data/lib/{make_rice_headers.rb → rice/make_rice_headers.rb} +3 -0
- data/lib/rice/native.rb +18 -0
- data/lib/rice/native_registry.rb +21 -0
- data/lib/rice/parameter.rb +7 -0
- data/lib/rice/rbs.rb +104 -0
- data/lib/rice/version.rb +1 -1
- data/lib/rice.rb +4 -0
- data/lib/rubygems/cmake_builder.rb +24 -27
- data/rice/Arg.hpp +4 -4
- data/rice/Arg.ipp +4 -4
- data/rice/Buffer.hpp +32 -28
- data/rice/Buffer.ipp +306 -178
- data/rice/Data_Object.ipp +136 -88
- data/rice/Data_Type.hpp +5 -7
- data/rice/Data_Type.ipp +48 -29
- data/rice/Enum.ipp +15 -21
- data/rice/Function.hpp +17 -0
- data/rice/Function.ipp +13 -0
- data/rice/Pointer.hpp +15 -0
- data/rice/Pointer.ipp +49 -0
- data/rice/Return.hpp +1 -1
- data/rice/Return.ipp +2 -2
- data/rice/api.hpp +30 -0
- data/rice/cpp_api/Array.hpp +4 -4
- data/rice/cpp_api/Array.ipp +50 -5
- data/rice/cpp_api/Class.hpp +0 -5
- data/rice/cpp_api/Class.ipp +19 -0
- data/rice/cpp_api/Hash.ipp +20 -0
- data/rice/cpp_api/Module.hpp +6 -3
- data/rice/cpp_api/Module.ipp +49 -11
- data/rice/cpp_api/Object.ipp +31 -2
- data/rice/cpp_api/String.hpp +1 -2
- data/rice/cpp_api/String.ipp +21 -1
- data/rice/cpp_api/Struct.ipp +5 -0
- data/rice/cpp_api/Symbol.ipp +43 -0
- data/rice/cpp_api/shared_methods.hpp +12 -12
- data/rice/detail/MethodInfo.hpp +4 -2
- data/rice/detail/MethodInfo.ipp +19 -3
- data/rice/detail/ModuleRegistry.hpp +18 -0
- data/rice/detail/ModuleRegistry.ipp +25 -0
- data/rice/detail/Native.hpp +45 -2
- data/rice/detail/Native.ipp +196 -6
- data/rice/detail/NativeAttributeGet.hpp +9 -4
- data/rice/detail/NativeAttributeGet.ipp +65 -11
- data/rice/detail/NativeAttributeSet.hpp +4 -0
- data/rice/detail/NativeAttributeSet.ipp +30 -2
- data/rice/detail/NativeCallbackFFI.ipp +2 -2
- data/rice/detail/NativeCallbackSimple.ipp +1 -1
- data/rice/detail/NativeFunction.hpp +11 -49
- data/rice/detail/NativeFunction.ipp +82 -379
- data/rice/detail/NativeInvoker.hpp +74 -0
- data/rice/detail/NativeInvoker.ipp +197 -0
- data/rice/detail/NativeIterator.hpp +4 -0
- data/rice/detail/NativeIterator.ipp +19 -0
- data/rice/detail/NativeMethod.hpp +97 -0
- data/rice/detail/NativeMethod.ipp +332 -0
- data/rice/detail/NativeProc.hpp +51 -0
- data/rice/detail/NativeProc.ipp +133 -0
- data/rice/detail/NativeRegistry.hpp +8 -0
- data/rice/detail/NativeRegistry.ipp +26 -0
- data/rice/detail/Parameter.hpp +47 -0
- data/rice/detail/Parameter.ipp +105 -0
- data/rice/detail/Proc.ipp +14 -13
- data/rice/detail/Registries.hpp +1 -0
- data/rice/detail/RubyType.hpp +0 -2
- data/rice/detail/RubyType.ipp +15 -33
- data/rice/detail/Type.hpp +44 -8
- data/rice/detail/Type.ipp +151 -49
- data/rice/detail/TypeRegistry.hpp +3 -0
- data/rice/detail/TypeRegistry.ipp +17 -27
- data/rice/detail/Types.ipp +430 -0
- data/rice/detail/Wrapper.hpp +12 -0
- data/rice/detail/Wrapper.ipp +45 -2
- data/rice/detail/from_ruby.ipp +567 -1073
- data/rice/detail/ruby.hpp +1 -0
- data/rice/detail/to_ruby.ipp +4 -635
- data/rice/libc/file.ipp +3 -6
- data/rice/rice.hpp +22 -12
- data/rice/rice_api/Arg.hpp +7 -0
- data/rice/rice_api/Arg.ipp +9 -0
- data/rice/rice_api/ModuleRegistry.hpp +7 -0
- data/rice/rice_api/ModuleRegistry.ipp +10 -0
- data/rice/rice_api/Native.hpp +7 -0
- data/rice/rice_api/Native.ipp +52 -0
- data/rice/rice_api/NativeRegistry.hpp +7 -0
- data/rice/rice_api/NativeRegistry.ipp +21 -0
- data/rice/rice_api/Parameter.hpp +7 -0
- data/rice/rice_api/Parameter.ipp +11 -0
- data/rice/rice_api/Registries.hpp +6 -0
- data/rice/rice_api/Registries.ipp +12 -0
- data/rice/rice_api/TypeRegistry.hpp +7 -0
- data/rice/rice_api/TypeRegistry.ipp +10 -0
- data/rice/stl/complex.ipp +35 -0
- data/rice/stl/exception.ipp +20 -7
- data/rice/stl/filesystem.hpp +6 -0
- data/rice/stl/filesystem.ipp +34 -0
- data/rice/stl/map.ipp +13 -21
- data/rice/stl/monostate.ipp +37 -1
- data/rice/stl/multimap.ipp +17 -24
- data/rice/stl/optional.ipp +47 -2
- data/rice/stl/pair.ipp +23 -58
- data/rice/stl/reference_wrapper.ipp +22 -1
- data/rice/stl/set.ipp +17 -9
- data/rice/stl/shared_ptr.ipp +44 -17
- data/rice/stl/string.ipp +175 -7
- data/rice/stl/string_view.ipp +23 -0
- data/rice/stl/tuple.ipp +38 -9
- data/rice/stl/unique_ptr.ipp +46 -2
- data/rice/stl/unordered_map.ipp +13 -21
- data/rice/stl/variant.ipp +47 -11
- data/rice/stl/vector.ipp +183 -104
- data/rice/stl.hpp +1 -0
- data/rice/traits/function_traits.hpp +2 -2
- data/rice/traits/method_traits.hpp +5 -16
- data/rice/traits/rice_traits.hpp +24 -4
- data/rice.gemspec +10 -22
- data/test/embed_ruby.cpp +0 -3
- data/test/test_Array.cpp +38 -38
- data/test/test_Attribute.cpp +187 -2
- data/test/test_Buffer.cpp +302 -26
- data/test/test_Callback.cpp +2 -3
- data/test/test_Class.cpp +5 -5
- data/test/test_Data_Object.cpp +1 -56
- data/test/test_Data_Type.cpp +20 -30
- data/test/test_Enum.cpp +4 -46
- data/test/test_From_Ruby.cpp +89 -82
- data/test/test_GVL.cpp +109 -0
- data/test/test_Iterator.cpp +1 -1
- data/test/test_Keep_Alive_No_Wrapper.cpp +5 -3
- data/test/test_Module.cpp +8 -9
- data/test/test_Object.cpp +1 -1
- data/test/test_Overloads.cpp +58 -10
- data/test/test_Stl_Map.cpp +8 -8
- data/test/test_Stl_Multimap.cpp +4 -4
- data/test/test_Stl_Pair.cpp +5 -3
- data/test/test_Stl_SharedPtr.cpp +24 -12
- data/test/test_Stl_String_View.cpp +10 -0
- data/test/test_Stl_Tuple.cpp +1 -1
- data/test/test_Stl_UniquePtr.cpp +8 -0
- data/test/test_Stl_Unordered_Map.cpp +9 -9
- data/test/test_Stl_Variant.cpp +9 -3
- data/test/test_Stl_Vector.cpp +118 -13
- data/test/test_Symbol.cpp +12 -0
- data/test/test_To_Ruby.cpp +35 -28
- data/test/test_Type.cpp +256 -53
- data/test/unittest.hpp +35 -0
- metadata +52 -34
- data/rice/Init.hpp +0 -8
- data/rice/Init.ipp +0 -8
- data/rice/detail/RubyFunction.hpp +0 -31
- data/rice/detail/RubyFunction.ipp +0 -77
- data/sample/callbacks/extconf.rb +0 -5
- data/sample/callbacks/sample_callbacks.cpp +0 -35
- data/sample/callbacks/test.rb +0 -28
- data/sample/enum/extconf.rb +0 -5
- data/sample/enum/sample_enum.cpp +0 -40
- data/sample/enum/test.rb +0 -8
- data/sample/inheritance/animals.cpp +0 -82
- data/sample/inheritance/extconf.rb +0 -5
- data/sample/inheritance/test.rb +0 -7
- data/sample/map/extconf.rb +0 -5
- data/sample/map/map.cpp +0 -73
- data/sample/map/test.rb +0 -7
- data/test/ext/t1/Foo.hpp +0 -10
- data/test/ext/t1/extconf.rb +0 -4
- data/test/ext/t1/t1.cpp +0 -13
- data/test/ext/t2/extconf.rb +0 -4
- data/test/ext/t2/t2.cpp +0 -11
- data/test/ruby/test_callbacks_sample.rb +0 -28
- data/test/ruby/test_multiple_extensions.rb +0 -18
- data/test/ruby/test_multiple_extensions_same_class.rb +0 -14
- data/test/ruby/test_multiple_extensions_with_inheritance.rb +0 -20
- /data/test/{test_Stl_Type.cpp → test_Stl_Type_Info.cpp} +0 -0
data/test/test_Type.cpp
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
#include "unittest.hpp"
|
|
2
2
|
#include "embed_ruby.hpp"
|
|
3
3
|
|
|
4
4
|
#include <rice/rice.hpp>
|
|
5
|
+
#include <rice/stl.hpp>
|
|
5
6
|
|
|
6
7
|
#include <complex>
|
|
7
8
|
|
|
@@ -40,120 +41,322 @@ TESTCASE(FindGroup)
|
|
|
40
41
|
{
|
|
41
42
|
std::string name = "class std::vector<class cv::Vec<unsigned char, 2>, class std::allocator<class cv::Vec<unsigned char, 2> > >";
|
|
42
43
|
|
|
43
|
-
|
|
44
|
+
detail::TypeMapper<int> typeMapper;
|
|
45
|
+
std::string group = typeMapper.findGroup(name, 0);
|
|
44
46
|
ASSERT_EQUAL("<class cv::Vec<unsigned char, 2>, class std::allocator<class cv::Vec<unsigned char, 2> > >", group.c_str());
|
|
45
47
|
|
|
46
|
-
group =
|
|
48
|
+
group = typeMapper.findGroup(name, 18);
|
|
47
49
|
ASSERT_EQUAL("<unsigned char, 2>", group.c_str());
|
|
48
50
|
|
|
49
|
-
group =
|
|
51
|
+
group = typeMapper.findGroup(name, 49);
|
|
50
52
|
ASSERT_EQUAL("<class cv::Vec<unsigned char, 2> >", group.c_str());
|
|
51
53
|
|
|
52
54
|
ASSERT_EXCEPTION_CHECK(
|
|
53
55
|
std::runtime_error,
|
|
54
|
-
|
|
56
|
+
typeMapper.findGroup(name, 48),
|
|
55
57
|
ASSERT_EQUAL("Unbalanced Group", ex.what())
|
|
56
58
|
);
|
|
57
59
|
}
|
|
58
60
|
|
|
59
|
-
TESTCASE(
|
|
61
|
+
TESTCASE(SimplifiedName)
|
|
60
62
|
{
|
|
61
|
-
|
|
62
|
-
std::string className =
|
|
63
|
+
detail::TypeMapper<char*> typeMapper1;
|
|
64
|
+
std::string className = typeMapper1.simplifiedName();
|
|
65
|
+
ASSERT_EQUAL("char*", className.c_str());
|
|
66
|
+
|
|
67
|
+
detail::TypeMapper<char**> typeMapper2;
|
|
68
|
+
className = typeMapper2.simplifiedName();
|
|
69
|
+
ASSERT_EQUAL("char**", className.c_str());
|
|
70
|
+
|
|
71
|
+
detail::TypeMapper<double> typeMapper3;
|
|
72
|
+
className = typeMapper3.simplifiedName();
|
|
73
|
+
ASSERT_EQUAL("double", className.c_str());
|
|
74
|
+
|
|
75
|
+
detail::TypeMapper<double*> typeMapper4;
|
|
76
|
+
className = typeMapper4.simplifiedName();
|
|
77
|
+
ASSERT_EQUAL("double*", className.c_str());
|
|
78
|
+
|
|
79
|
+
detail::TypeMapper<std::string> typeMapper5;
|
|
80
|
+
className = typeMapper5.simplifiedName();
|
|
63
81
|
ASSERT_EQUAL("std::string", className.c_str());
|
|
64
82
|
|
|
65
|
-
|
|
66
|
-
className =
|
|
83
|
+
detail::TypeMapper<std::wstring> typeMapper6;
|
|
84
|
+
className = typeMapper6.simplifiedName();
|
|
67
85
|
ASSERT_EQUAL("std::wstring", className.c_str());
|
|
68
86
|
|
|
69
|
-
|
|
70
|
-
className =
|
|
87
|
+
detail::TypeMapper<std::vector<std::string>> typeMapper7;
|
|
88
|
+
className = typeMapper7.simplifiedName();
|
|
71
89
|
ASSERT_EQUAL("std::vector<std::string>", className.c_str());
|
|
72
90
|
|
|
73
|
-
|
|
74
|
-
className =
|
|
91
|
+
detail::TypeMapper<std::vector<std::wstring>> typeMapper8;
|
|
92
|
+
className = typeMapper8.simplifiedName();
|
|
75
93
|
ASSERT_EQUAL("std::vector<std::wstring>", className.c_str());
|
|
76
94
|
|
|
77
|
-
|
|
78
|
-
className =
|
|
95
|
+
detail::TypeMapper<std::vector<double*>> typeMapper9;
|
|
96
|
+
className = typeMapper9.simplifiedName();
|
|
79
97
|
ASSERT_EQUAL("std::vector<double*>", className.c_str());
|
|
80
98
|
|
|
81
|
-
|
|
82
|
-
className =
|
|
99
|
+
detail::TypeMapper<std::vector<double**>> typeMapper10;
|
|
100
|
+
className = typeMapper10.simplifiedName();
|
|
83
101
|
ASSERT_EQUAL("std::vector<double**>", className.c_str());
|
|
84
102
|
|
|
85
|
-
|
|
86
|
-
className =
|
|
103
|
+
detail::TypeMapper<Outer::Inner::Vec1> typeMapper11;
|
|
104
|
+
className = typeMapper11.simplifiedName();
|
|
87
105
|
ASSERT_EQUAL("std::vector<std::complex<float>>", className.c_str());
|
|
88
106
|
|
|
89
|
-
|
|
90
|
-
className =
|
|
107
|
+
detail::TypeMapper<Outer::Inner::Vec2> typeMapper12;
|
|
108
|
+
className = typeMapper12.simplifiedName();
|
|
91
109
|
ASSERT_EQUAL("std::vector<unsigned char*>", className.c_str());
|
|
92
110
|
|
|
93
|
-
|
|
94
|
-
className =
|
|
111
|
+
detail::TypeMapper<Outer::Inner::Vec3> typeMapper13;
|
|
112
|
+
className = typeMapper13.simplifiedName();
|
|
95
113
|
ASSERT_EQUAL("std::vector<Outer::Inner::SomeClass>", className.c_str());
|
|
96
114
|
|
|
97
|
-
|
|
98
|
-
className =
|
|
115
|
+
detail::TypeMapper<Outer::Inner::Map1> typeMapper14;
|
|
116
|
+
className = typeMapper14.simplifiedName();
|
|
99
117
|
ASSERT_EQUAL("std::map<std::string, std::vector<std::complex<float>>>", className.c_str());
|
|
100
118
|
|
|
101
|
-
|
|
102
|
-
className =
|
|
119
|
+
detail::TypeMapper<Outer::Inner::UnorderedMap1> typeMapper15;
|
|
120
|
+
className = typeMapper15.simplifiedName();
|
|
103
121
|
ASSERT_EQUAL("std::unordered_map<std::string, std::complex<float>>", className.c_str());
|
|
104
122
|
}
|
|
105
123
|
|
|
106
|
-
TESTCASE(
|
|
124
|
+
TESTCASE(RubyName)
|
|
107
125
|
{
|
|
108
|
-
|
|
109
|
-
std::string className =
|
|
126
|
+
detail::TypeMapper<char*> typeMapper1;
|
|
127
|
+
std::string className = typeMapper1.rubyName();
|
|
128
|
+
ASSERT_EQUAL("String", className.c_str());
|
|
129
|
+
|
|
130
|
+
detail::TypeMapper<const unsigned char> typeMapper2;
|
|
131
|
+
className = typeMapper2.rubyName();
|
|
132
|
+
ASSERT_EQUAL("String", className.c_str());
|
|
133
|
+
|
|
134
|
+
detail::TypeMapper<const unsigned char*> typeMapper3;
|
|
135
|
+
className = typeMapper3.rubyName();
|
|
136
|
+
ASSERT_EQUAL("UnsignedChar", className.c_str());
|
|
137
|
+
|
|
138
|
+
detail::TypeMapper<char**> typeMapper4;
|
|
139
|
+
className = typeMapper4.rubyName();
|
|
140
|
+
ASSERT_EQUAL("Char", className.c_str());
|
|
141
|
+
|
|
142
|
+
detail::TypeMapper<double> typeMapper5;
|
|
143
|
+
className = typeMapper5.rubyName();
|
|
144
|
+
ASSERT_EQUAL("Float", className.c_str());
|
|
145
|
+
|
|
146
|
+
detail::TypeMapper<double*> typeMapper6;
|
|
147
|
+
className = typeMapper6.rubyName();
|
|
148
|
+
ASSERT_EQUAL("Double", className.c_str());
|
|
149
|
+
|
|
150
|
+
detail::TypeMapper<Buffer<double*>> typeMapper7;
|
|
151
|
+
className = typeMapper7.rubyName();
|
|
152
|
+
ASSERT_EQUAL("Buffer≺double∗≻", className.c_str());
|
|
153
|
+
|
|
154
|
+
detail::TypeMapper<std::string> typeMapper8;
|
|
155
|
+
className = typeMapper8.rubyName();
|
|
110
156
|
ASSERT_EQUAL("String", className.c_str());
|
|
111
157
|
|
|
112
|
-
|
|
113
|
-
className =
|
|
158
|
+
detail::TypeMapper<std::wstring> typeMapper9;
|
|
159
|
+
className = typeMapper9.rubyName();
|
|
114
160
|
ASSERT_EQUAL("Wstring", className.c_str());
|
|
115
161
|
|
|
116
|
-
|
|
117
|
-
className =
|
|
162
|
+
detail::TypeMapper<std::vector<std::string>> typeMapper10;
|
|
163
|
+
className = typeMapper10.rubyName();
|
|
118
164
|
ASSERT_EQUAL("Vector≺string≻", className.c_str());
|
|
119
165
|
|
|
120
|
-
|
|
121
|
-
className =
|
|
166
|
+
detail::TypeMapper<std::vector<std::wstring>> typeMapper11;
|
|
167
|
+
className = typeMapper11.rubyName();
|
|
122
168
|
ASSERT_EQUAL("Vector≺wstring≻", className.c_str());
|
|
123
169
|
|
|
124
|
-
|
|
125
|
-
className =
|
|
170
|
+
detail::TypeMapper<std::vector<double*>> typeMapper12;
|
|
171
|
+
className = typeMapper12.rubyName();
|
|
126
172
|
ASSERT_EQUAL("Vector≺double∗≻", className.c_str());
|
|
127
173
|
|
|
128
|
-
|
|
129
|
-
className =
|
|
174
|
+
detail::TypeMapper<std::vector<double**>> typeMapper13;
|
|
175
|
+
className = typeMapper13.rubyName();
|
|
130
176
|
ASSERT_EQUAL("Vector≺double∗∗≻", className.c_str());
|
|
131
177
|
|
|
132
|
-
|
|
133
|
-
className =
|
|
178
|
+
detail::TypeMapper<Outer::Inner::Vec1> typeMapper14;
|
|
179
|
+
className = typeMapper14.rubyName();
|
|
134
180
|
ASSERT_EQUAL("Vector≺complex≺float≻≻", className.c_str());
|
|
135
181
|
|
|
136
|
-
|
|
137
|
-
className =
|
|
182
|
+
detail::TypeMapper<Outer::Inner::Vec2> typeMapper15;
|
|
183
|
+
className = typeMapper15.rubyName();
|
|
138
184
|
ASSERT_EQUAL("Vector≺unsigned char∗≻", className.c_str());
|
|
139
185
|
|
|
140
|
-
|
|
141
|
-
className =
|
|
186
|
+
detail::TypeMapper<Outer::Inner::Vec3> typeMapper16;
|
|
187
|
+
className = typeMapper16.rubyName();
|
|
142
188
|
ASSERT_EQUAL("Vector≺Outer꞉꞉Inner꞉꞉SomeClass≻", className.c_str());
|
|
143
189
|
|
|
144
|
-
|
|
145
|
-
className =
|
|
190
|
+
detail::TypeMapper<Outer::Inner::Map1> typeMapper17;
|
|
191
|
+
className = typeMapper17.rubyName();
|
|
146
192
|
ASSERT_EQUAL("Map≺string‚ vector≺complex≺float≻≻≻", className.c_str());
|
|
147
193
|
|
|
148
|
-
|
|
149
|
-
className =
|
|
194
|
+
detail::TypeMapper<Outer::Inner::UnorderedMap1> typeMapper18;
|
|
195
|
+
className = typeMapper18.rubyName();
|
|
150
196
|
ASSERT_EQUAL("UnorderedMap≺string‚ complex≺float≻≻", className.c_str());
|
|
197
|
+
|
|
198
|
+
detail::TypeMapper<Outer::Inner::SomeClass*> typeMapper19;
|
|
199
|
+
className = typeMapper19.rubyName();
|
|
200
|
+
ASSERT_EQUAL("SomeClass", className.c_str());
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
TESTCASE(RubyKlass)
|
|
204
|
+
{
|
|
205
|
+
Module riceModule = define_module("Rice");
|
|
206
|
+
|
|
207
|
+
detail::TypeMapper<int> typeMapper1;
|
|
208
|
+
VALUE actual = typeMapper1.rubyKlass();
|
|
209
|
+
ASSERT_EQUAL(rb_cInteger, actual);
|
|
210
|
+
|
|
211
|
+
detail::TypeMapper<const int> typeMapper2;
|
|
212
|
+
actual = typeMapper2.rubyKlass();
|
|
213
|
+
ASSERT_EQUAL(rb_cInteger, actual);
|
|
214
|
+
|
|
215
|
+
detail::TypeMapper<int&> typeMapper3;
|
|
216
|
+
actual = typeMapper3.rubyKlass();
|
|
217
|
+
ASSERT_EQUAL(rb_cInteger, actual);
|
|
218
|
+
|
|
219
|
+
detail::TypeMapper<const int&> typeMapper4;
|
|
220
|
+
actual = typeMapper4.rubyKlass();
|
|
221
|
+
ASSERT_EQUAL(rb_cInteger, actual);
|
|
222
|
+
|
|
223
|
+
detail::TypeMapper<char*> typeMapper5;
|
|
224
|
+
actual = typeMapper5.rubyKlass();
|
|
225
|
+
ASSERT_EQUAL(rb_cString, actual);
|
|
226
|
+
|
|
227
|
+
detail::TypeMapper<const unsigned char> typeMapper6;
|
|
228
|
+
actual = typeMapper6.rubyKlass();
|
|
229
|
+
ASSERT_EQUAL(rb_cString, actual);
|
|
230
|
+
|
|
231
|
+
define_buffer<unsigned char>();
|
|
232
|
+
Object expected = riceModule.const_get("Buffer≺unsigned char≻");
|
|
233
|
+
detail::TypeMapper<Buffer<unsigned char>> typeMapper8;
|
|
234
|
+
actual = typeMapper8.rubyKlass();
|
|
235
|
+
ASSERT_EQUAL(expected.value(), actual);
|
|
236
|
+
|
|
237
|
+
expected = Object(rb_cObject).const_get("String");
|
|
238
|
+
detail::TypeMapper<char*> typeMapper9;
|
|
239
|
+
actual = typeMapper9.rubyKlass();
|
|
240
|
+
ASSERT_EQUAL(expected.value(), actual);
|
|
241
|
+
|
|
242
|
+
define_pointer<char*>();
|
|
243
|
+
expected = riceModule.const_get("Pointer≺char∗≻");
|
|
244
|
+
detail::TypeMapper<char**> typeMapper10;
|
|
245
|
+
actual = typeMapper10.rubyKlass();
|
|
246
|
+
ASSERT_EQUAL(expected.value(), actual);
|
|
247
|
+
|
|
248
|
+
define_pointer<char*>();
|
|
249
|
+
expected = riceModule.const_get("Pointer≺char∗≻");
|
|
250
|
+
detail::TypeMapper<const char**> typeMapper11;
|
|
251
|
+
actual = typeMapper11.rubyKlass();
|
|
252
|
+
ASSERT_EQUAL(expected.value(), actual);
|
|
253
|
+
|
|
254
|
+
define_buffer<char**>();
|
|
255
|
+
expected = riceModule.const_get("Buffer≺char∗≻");
|
|
256
|
+
detail::TypeMapper<Buffer<char*>> typeMapper12;
|
|
257
|
+
actual = typeMapper12.rubyKlass();
|
|
258
|
+
ASSERT_EQUAL(expected.value(), actual);
|
|
259
|
+
|
|
260
|
+
detail::TypeMapper<double> typeMapper13;
|
|
261
|
+
actual = typeMapper13.rubyKlass();
|
|
262
|
+
ASSERT_EQUAL(rb_cFloat, actual);
|
|
263
|
+
|
|
264
|
+
define_pointer<double>();
|
|
265
|
+
expected = riceModule.const_get("Pointer≺double≻");
|
|
266
|
+
detail::TypeMapper<volatile double*> typeMapper14;
|
|
267
|
+
actual = typeMapper14.rubyKlass();
|
|
268
|
+
ASSERT_EQUAL(expected.value(), actual);
|
|
269
|
+
|
|
270
|
+
define_pointer<double*>();
|
|
271
|
+
expected = riceModule.const_get("Pointer≺double∗≻");
|
|
272
|
+
detail::TypeMapper<const volatile double**> typeMapper15;
|
|
273
|
+
actual = typeMapper15.rubyKlass();
|
|
274
|
+
ASSERT_EQUAL(expected.value(), actual);
|
|
275
|
+
|
|
276
|
+
detail::TypeMapper<std::string> typeMapper16;
|
|
277
|
+
actual = typeMapper16.rubyKlass();
|
|
278
|
+
ASSERT_EQUAL(rb_cString, actual);
|
|
279
|
+
|
|
280
|
+
define_pointer<std::string>();
|
|
281
|
+
detail::TypeMapper<std::string*> typeMapper17;
|
|
282
|
+
expected = riceModule.const_get("Pointer≺string≻");
|
|
283
|
+
actual = typeMapper17.rubyKlass();
|
|
284
|
+
ASSERT_EQUAL(expected.value(), actual);
|
|
285
|
+
|
|
286
|
+
define_pointer<std::string*>();
|
|
287
|
+
detail::TypeMapper<std::string**> typeMapper18;
|
|
288
|
+
expected = riceModule.const_get("Pointer≺string∗≻");
|
|
289
|
+
actual = typeMapper18.rubyKlass();
|
|
290
|
+
ASSERT_EQUAL(expected.value(), actual);
|
|
291
|
+
|
|
292
|
+
define_vector<std::string>();
|
|
293
|
+
Module stdModule("Std");
|
|
294
|
+
|
|
295
|
+
detail::TypeMapper<std::vector<std::string>> typeMapper19;
|
|
296
|
+
expected = stdModule.const_get("Vector≺string≻");
|
|
297
|
+
actual = typeMapper19.rubyKlass();
|
|
298
|
+
ASSERT_EQUAL(expected.value(), actual);
|
|
299
|
+
|
|
300
|
+
define_class<Outer::Inner::Vec1>("Vec1");
|
|
301
|
+
detail::TypeMapper<Outer::Inner::Vec1> typeMapper20;
|
|
302
|
+
expected = Object(rb_cObject).const_get("Vec1");
|
|
303
|
+
actual = typeMapper20.rubyKlass();
|
|
304
|
+
ASSERT_EQUAL(expected.value(), actual);
|
|
305
|
+
|
|
306
|
+
define_class<Outer::Inner::Map1>("Map1");
|
|
307
|
+
detail::TypeMapper<Outer::Inner::Map1> typeMapper21;
|
|
308
|
+
expected = Object(rb_cObject).const_get("Map1");
|
|
309
|
+
actual = typeMapper21.rubyKlass();
|
|
310
|
+
ASSERT_EQUAL(expected.value(), actual);
|
|
311
|
+
|
|
312
|
+
define_class<Outer::Inner::UnorderedMap1>("UnorderedMap1");
|
|
313
|
+
detail::TypeMapper<Outer::Inner::UnorderedMap1> typeMapper22;
|
|
314
|
+
expected = Object(rb_cObject).const_get("UnorderedMap1");
|
|
315
|
+
actual = typeMapper22.rubyKlass();
|
|
316
|
+
ASSERT_EQUAL(expected.value(), actual);
|
|
317
|
+
|
|
318
|
+
define_class<Outer::Inner::SomeClass>("SomeClass");
|
|
319
|
+
detail::TypeMapper<Outer::Inner::SomeClass**> typeMapper23;
|
|
320
|
+
expected = Object(rb_cObject).const_get("SomeClass");
|
|
321
|
+
actual = typeMapper23.rubyKlass();
|
|
322
|
+
ASSERT_EQUAL(expected.value(), actual);
|
|
323
|
+
|
|
324
|
+
using Callback_T = char*(*)(int, double, bool, char*);
|
|
325
|
+
detail::TypeMapper<Callback_T> typeMapper24;
|
|
326
|
+
expected = Object(rb_cObject).const_get("Proc");
|
|
327
|
+
actual = typeMapper24.rubyKlass();
|
|
328
|
+
ASSERT_EQUAL(expected.value(), actual);
|
|
329
|
+
|
|
330
|
+
detail::TypeMapper<std::tuple<float, float>> typeMapper25;
|
|
331
|
+
expected = Object(rb_cObject).const_get("Array");
|
|
332
|
+
actual = typeMapper25.rubyKlass();
|
|
333
|
+
ASSERT_EQUAL(expected.value(), actual);
|
|
334
|
+
|
|
335
|
+
detail::TypeMapper<std::optional<float>> typeMapper26;
|
|
336
|
+
actual = typeMapper26.rubyKlass();
|
|
337
|
+
ASSERT_EQUAL(rb_cFloat, actual);
|
|
338
|
+
|
|
339
|
+
detail::TypeMapper<std::complex<float>> typeMapper27;
|
|
340
|
+
actual = typeMapper27.rubyKlass();
|
|
341
|
+
ASSERT_EQUAL(rb_cComplex, actual);
|
|
342
|
+
|
|
343
|
+
detail::TypeMapper<std::monostate> typeMapper28;
|
|
344
|
+
actual = typeMapper28.rubyKlass();
|
|
345
|
+
ASSERT_EQUAL(rb_cNilClass, actual);
|
|
346
|
+
|
|
347
|
+
detail::TypeMapper<std::reference_wrapper<int>> typeMapper29;
|
|
348
|
+
actual = typeMapper29.rubyKlass();
|
|
349
|
+
ASSERT_EQUAL(rb_cInteger, actual);
|
|
350
|
+
|
|
351
|
+
detail::TypeMapper<std::string_view> typeMapper30;
|
|
352
|
+
actual = typeMapper30.rubyKlass();
|
|
353
|
+
ASSERT_EQUAL(rb_cString, actual);
|
|
151
354
|
}
|
|
152
355
|
|
|
153
356
|
TESTCASE(MakeRubyClass)
|
|
154
357
|
{
|
|
155
|
-
|
|
156
|
-
std::string rubyClassName =
|
|
358
|
+
detail::TypeMapper<Outer::Inner::Vec1> typeMapper;
|
|
359
|
+
std::string rubyClassName = typeMapper.rubyName();
|
|
157
360
|
|
|
158
361
|
Module module = define_module("Testing");
|
|
159
362
|
|
data/test/unittest.hpp
CHANGED
|
@@ -263,6 +263,33 @@ void assert_not_equal(
|
|
|
263
263
|
}
|
|
264
264
|
}
|
|
265
265
|
|
|
266
|
+
template<typename T, typename U, typename V>
|
|
267
|
+
void assert_in_delta(
|
|
268
|
+
T const& expected,
|
|
269
|
+
U const& actual,
|
|
270
|
+
V const& delta,
|
|
271
|
+
std::string const& s_t,
|
|
272
|
+
std::string const& s_u,
|
|
273
|
+
std::string const& s_delta,
|
|
274
|
+
std::string const& file,
|
|
275
|
+
size_t line)
|
|
276
|
+
{
|
|
277
|
+
// Negative deltas don't make sense; treat as failure for clarity.
|
|
278
|
+
if (delta < 0)
|
|
279
|
+
{
|
|
280
|
+
throw Assertion_Failed("assert_in_delta failed: negative delta");
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
T diff = std::abs(expected - actual);
|
|
284
|
+
if (!(diff <= delta))
|
|
285
|
+
{
|
|
286
|
+
std::stringstream strm;
|
|
287
|
+
strm << "assert_in_delta failed: |" << actual << " - " << expected << "| = "
|
|
288
|
+
<< diff << " > " << delta;
|
|
289
|
+
throw Assertion_Failed(strm.str());
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
266
293
|
#define FAIL(message, expect, got) \
|
|
267
294
|
do \
|
|
268
295
|
{ \
|
|
@@ -285,6 +312,14 @@ void assert_not_equal(
|
|
|
285
312
|
assert_not_equal((x), (y), #x, #y, __FILE__, __LINE__); \
|
|
286
313
|
} while(0)
|
|
287
314
|
|
|
315
|
+
#define ASSERT_IN_DELTA(x, y, delta) \
|
|
316
|
+
do \
|
|
317
|
+
{ \
|
|
318
|
+
++assertions; \
|
|
319
|
+
assert_in_delta((x), (y), (delta), #x, #y, #delta, __FILE__, __LINE__); \
|
|
320
|
+
} while(0)
|
|
321
|
+
|
|
322
|
+
|
|
288
323
|
#define ASSERT(x) \
|
|
289
324
|
ASSERT_EQUAL(true, !!x);
|
|
290
325
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rice
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 4.
|
|
4
|
+
version: 4.7.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Paul Brannan
|
|
@@ -61,7 +61,9 @@ email:
|
|
|
61
61
|
- curlypaul924@gmail.com
|
|
62
62
|
- jasongroelofs@gmail.com
|
|
63
63
|
- cfis@savagexi.com
|
|
64
|
-
executables:
|
|
64
|
+
executables:
|
|
65
|
+
- rice-doc.rb
|
|
66
|
+
- rice-rbs.rb
|
|
65
67
|
extensions: []
|
|
66
68
|
extra_rdoc_files:
|
|
67
69
|
- README.md
|
|
@@ -75,11 +77,23 @@ files:
|
|
|
75
77
|
- Gemfile
|
|
76
78
|
- README.md
|
|
77
79
|
- Rakefile
|
|
80
|
+
- bin/rice-doc.rb
|
|
81
|
+
- bin/rice-rbs.rb
|
|
78
82
|
- include/rice/rice.hpp
|
|
79
83
|
- include/rice/stl.hpp
|
|
80
|
-
- lib/make_rice_headers.rb
|
|
81
84
|
- lib/mkmf-rice.rb
|
|
82
85
|
- lib/rice.rb
|
|
86
|
+
- lib/rice/doc.rb
|
|
87
|
+
- lib/rice/doc/cpp_reference.rb
|
|
88
|
+
- lib/rice/doc/doxygen.rb
|
|
89
|
+
- lib/rice/doc/mkdocs.rb
|
|
90
|
+
- lib/rice/doc/rice.rb
|
|
91
|
+
- lib/rice/doc/ruby.rb
|
|
92
|
+
- lib/rice/make_rice_headers.rb
|
|
93
|
+
- lib/rice/native.rb
|
|
94
|
+
- lib/rice/native_registry.rb
|
|
95
|
+
- lib/rice/parameter.rb
|
|
96
|
+
- lib/rice/rbs.rb
|
|
83
97
|
- lib/rice/version.rb
|
|
84
98
|
- lib/rubygems/builder.rb
|
|
85
99
|
- lib/rubygems/cmake_builder.rb
|
|
@@ -104,14 +118,17 @@ files:
|
|
|
104
118
|
- rice/Enum.ipp
|
|
105
119
|
- rice/Exception.hpp
|
|
106
120
|
- rice/Exception.ipp
|
|
107
|
-
- rice/
|
|
108
|
-
- rice/
|
|
121
|
+
- rice/Function.hpp
|
|
122
|
+
- rice/Function.ipp
|
|
109
123
|
- rice/JumpException.hpp
|
|
110
124
|
- rice/JumpException.ipp
|
|
111
125
|
- rice/MemoryView.hpp
|
|
112
126
|
- rice/MemoryView.ipp
|
|
127
|
+
- rice/Pointer.hpp
|
|
128
|
+
- rice/Pointer.ipp
|
|
113
129
|
- rice/Return.hpp
|
|
114
130
|
- rice/Return.ipp
|
|
131
|
+
- rice/api.hpp
|
|
115
132
|
- rice/cpp_api/Array.hpp
|
|
116
133
|
- rice/cpp_api/Array.ipp
|
|
117
134
|
- rice/cpp_api/Builtin_Object.hpp
|
|
@@ -143,6 +160,8 @@ files:
|
|
|
143
160
|
- rice/detail/InstanceRegistry.ipp
|
|
144
161
|
- rice/detail/MethodInfo.hpp
|
|
145
162
|
- rice/detail/MethodInfo.ipp
|
|
163
|
+
- rice/detail/ModuleRegistry.hpp
|
|
164
|
+
- rice/detail/ModuleRegistry.ipp
|
|
146
165
|
- rice/detail/Native.hpp
|
|
147
166
|
- rice/detail/Native.ipp
|
|
148
167
|
- rice/detail/NativeAttributeGet.hpp
|
|
@@ -155,22 +174,29 @@ files:
|
|
|
155
174
|
- rice/detail/NativeCallbackSimple.ipp
|
|
156
175
|
- rice/detail/NativeFunction.hpp
|
|
157
176
|
- rice/detail/NativeFunction.ipp
|
|
177
|
+
- rice/detail/NativeInvoker.hpp
|
|
178
|
+
- rice/detail/NativeInvoker.ipp
|
|
158
179
|
- rice/detail/NativeIterator.hpp
|
|
159
180
|
- rice/detail/NativeIterator.ipp
|
|
181
|
+
- rice/detail/NativeMethod.hpp
|
|
182
|
+
- rice/detail/NativeMethod.ipp
|
|
183
|
+
- rice/detail/NativeProc.hpp
|
|
184
|
+
- rice/detail/NativeProc.ipp
|
|
160
185
|
- rice/detail/NativeRegistry.hpp
|
|
161
186
|
- rice/detail/NativeRegistry.ipp
|
|
187
|
+
- rice/detail/Parameter.hpp
|
|
188
|
+
- rice/detail/Parameter.ipp
|
|
162
189
|
- rice/detail/Proc.hpp
|
|
163
190
|
- rice/detail/Proc.ipp
|
|
164
191
|
- rice/detail/Registries.hpp
|
|
165
192
|
- rice/detail/Registries.ipp
|
|
166
|
-
- rice/detail/RubyFunction.hpp
|
|
167
|
-
- rice/detail/RubyFunction.ipp
|
|
168
193
|
- rice/detail/RubyType.hpp
|
|
169
194
|
- rice/detail/RubyType.ipp
|
|
170
195
|
- rice/detail/Type.hpp
|
|
171
196
|
- rice/detail/Type.ipp
|
|
172
197
|
- rice/detail/TypeRegistry.hpp
|
|
173
198
|
- rice/detail/TypeRegistry.ipp
|
|
199
|
+
- rice/detail/Types.ipp
|
|
174
200
|
- rice/detail/Wrapper.hpp
|
|
175
201
|
- rice/detail/Wrapper.ipp
|
|
176
202
|
- rice/detail/cpp_protect.hpp
|
|
@@ -187,6 +213,20 @@ files:
|
|
|
187
213
|
- rice/libc/file.hpp
|
|
188
214
|
- rice/libc/file.ipp
|
|
189
215
|
- rice/rice.hpp
|
|
216
|
+
- rice/rice_api/Arg.hpp
|
|
217
|
+
- rice/rice_api/Arg.ipp
|
|
218
|
+
- rice/rice_api/ModuleRegistry.hpp
|
|
219
|
+
- rice/rice_api/ModuleRegistry.ipp
|
|
220
|
+
- rice/rice_api/Native.hpp
|
|
221
|
+
- rice/rice_api/Native.ipp
|
|
222
|
+
- rice/rice_api/NativeRegistry.hpp
|
|
223
|
+
- rice/rice_api/NativeRegistry.ipp
|
|
224
|
+
- rice/rice_api/Parameter.hpp
|
|
225
|
+
- rice/rice_api/Parameter.ipp
|
|
226
|
+
- rice/rice_api/Registries.hpp
|
|
227
|
+
- rice/rice_api/Registries.ipp
|
|
228
|
+
- rice/rice_api/TypeRegistry.hpp
|
|
229
|
+
- rice/rice_api/TypeRegistry.ipp
|
|
190
230
|
- rice/ruby_mark.hpp
|
|
191
231
|
- rice/stl.hpp
|
|
192
232
|
- rice/stl/complex.hpp
|
|
@@ -195,6 +235,8 @@ files:
|
|
|
195
235
|
- rice/stl/exception.ipp
|
|
196
236
|
- rice/stl/exception_ptr.hpp
|
|
197
237
|
- rice/stl/exception_ptr.ipp
|
|
238
|
+
- rice/stl/filesystem.hpp
|
|
239
|
+
- rice/stl/filesystem.ipp
|
|
198
240
|
- rice/stl/map.hpp
|
|
199
241
|
- rice/stl/map.ipp
|
|
200
242
|
- rice/stl/monostate.hpp
|
|
@@ -233,30 +275,9 @@ files:
|
|
|
233
275
|
- rice/traits/function_traits.hpp
|
|
234
276
|
- rice/traits/method_traits.hpp
|
|
235
277
|
- rice/traits/rice_traits.hpp
|
|
236
|
-
- sample/callbacks/extconf.rb
|
|
237
|
-
- sample/callbacks/sample_callbacks.cpp
|
|
238
|
-
- sample/callbacks/test.rb
|
|
239
|
-
- sample/enum/extconf.rb
|
|
240
|
-
- sample/enum/sample_enum.cpp
|
|
241
|
-
- sample/enum/test.rb
|
|
242
|
-
- sample/inheritance/animals.cpp
|
|
243
|
-
- sample/inheritance/extconf.rb
|
|
244
|
-
- sample/inheritance/test.rb
|
|
245
|
-
- sample/map/extconf.rb
|
|
246
|
-
- sample/map/map.cpp
|
|
247
|
-
- sample/map/test.rb
|
|
248
278
|
- test/embed_ruby.cpp
|
|
249
279
|
- test/embed_ruby.hpp
|
|
250
|
-
- test/ext/t1/Foo.hpp
|
|
251
|
-
- test/ext/t1/extconf.rb
|
|
252
|
-
- test/ext/t1/t1.cpp
|
|
253
|
-
- test/ext/t2/extconf.rb
|
|
254
|
-
- test/ext/t2/t2.cpp
|
|
255
280
|
- test/extconf.rb
|
|
256
|
-
- test/ruby/test_callbacks_sample.rb
|
|
257
|
-
- test/ruby/test_multiple_extensions.rb
|
|
258
|
-
- test/ruby/test_multiple_extensions_same_class.rb
|
|
259
|
-
- test/ruby/test_multiple_extensions_with_inheritance.rb
|
|
260
281
|
- test/test_Address_Registration_Guard.cpp
|
|
261
282
|
- test/test_Array.cpp
|
|
262
283
|
- test/test_Attribute.cpp
|
|
@@ -272,6 +293,7 @@ files:
|
|
|
272
293
|
- test/test_Exception.cpp
|
|
273
294
|
- test/test_File.cpp
|
|
274
295
|
- test/test_From_Ruby.cpp
|
|
296
|
+
- test/test_GVL.cpp
|
|
275
297
|
- test/test_Hash.cpp
|
|
276
298
|
- test/test_Identifier.cpp
|
|
277
299
|
- test/test_Inheritance.cpp
|
|
@@ -298,7 +320,7 @@ files:
|
|
|
298
320
|
- test/test_Stl_String.cpp
|
|
299
321
|
- test/test_Stl_String_View.cpp
|
|
300
322
|
- test/test_Stl_Tuple.cpp
|
|
301
|
-
- test/
|
|
323
|
+
- test/test_Stl_Type_Info.cpp
|
|
302
324
|
- test/test_Stl_UniquePtr.cpp
|
|
303
325
|
- test/test_Stl_Unordered_Map.cpp
|
|
304
326
|
- test/test_Stl_Variant.cpp
|
|
@@ -338,8 +360,4 @@ requirements: []
|
|
|
338
360
|
rubygems_version: 3.6.9
|
|
339
361
|
specification_version: 4
|
|
340
362
|
summary: Ruby Interface for C++ Extensions
|
|
341
|
-
test_files:
|
|
342
|
-
- test/ruby/test_callbacks_sample.rb
|
|
343
|
-
- test/ruby/test_multiple_extensions.rb
|
|
344
|
-
- test/ruby/test_multiple_extensions_same_class.rb
|
|
345
|
-
- test/ruby/test_multiple_extensions_with_inheritance.rb
|
|
363
|
+
test_files: []
|
data/rice/Init.hpp
DELETED
data/rice/Init.ipp
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
#ifndef Rice__detail__ruby_function__hpp_
|
|
2
|
-
#define Rice__detail__ruby_function__hpp_
|
|
3
|
-
|
|
4
|
-
namespace Rice::detail
|
|
5
|
-
{
|
|
6
|
-
/* This is functor class that wraps calls to a Ruby C API method. It is needed because
|
|
7
|
-
rb_protect only supports calling methods that take one argument. Thus
|
|
8
|
-
we invoke rb_protect telling it to invoke Ruby_Function::call with an
|
|
9
|
-
instance of a Ruby_Function. That instance then in turn calls the original
|
|
10
|
-
Ruby method passing along its required arguments. */
|
|
11
|
-
|
|
12
|
-
template<typename Function_T, typename...Arg_Ts>
|
|
13
|
-
class RubyFunction
|
|
14
|
-
{
|
|
15
|
-
public:
|
|
16
|
-
using Return_T = typename function_traits<Function_T>::return_type;
|
|
17
|
-
|
|
18
|
-
public:
|
|
19
|
-
RubyFunction(Function_T func, const Arg_Ts&... args);
|
|
20
|
-
Return_T operator()();
|
|
21
|
-
|
|
22
|
-
private:
|
|
23
|
-
Function_T func_;
|
|
24
|
-
std::tuple<Arg_Ts...> args_;
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
template<typename Function_T, typename ...Arg_Ts>
|
|
28
|
-
auto protect(Function_T func, Arg_Ts...args);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
#endif // Rice__detail__ruby_function__hpp_
|