rice 4.8.0 → 4.9.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 +25 -1
- data/CMakePresets.json +77 -50
- data/FindRuby.cmake +1 -1
- data/bin/rice-doc.rb +2 -0
- data/include/rice/api.hpp +14 -1
- data/include/rice/rice.hpp +351 -132
- data/include/rice/stl.hpp +319 -256
- data/lib/rice/doc/config.rb +57 -57
- data/lib/rice/doc/cpp_reference.rb +158 -158
- data/lib/rice/doc/doxygen.rb +289 -289
- data/lib/rice/doc/mkdocs.rb +332 -332
- data/lib/rice/doc/rice.rb +48 -47
- data/lib/rice/doc/ruby.rb +26 -26
- data/lib/rice/native.rb +15 -15
- data/lib/rice/native_registry.rb +12 -17
- data/lib/rice/parameter.rb +5 -5
- data/lib/rice/rbs.rb +72 -72
- data/lib/rice/version.rb +1 -1
- data/lib/rubygems/builder.rb +9 -9
- data/lib/rubygems_plugin.rb +8 -8
- data/rice/Data_Type.ipp +12 -7
- data/rice/cpp_api/Class.hpp +5 -0
- data/rice/cpp_api/Class.ipp +5 -0
- data/rice/cpp_api/Object.hpp +6 -0
- data/rice/cpp_api/Object.ipp +5 -0
- data/rice/detail/Forwards.hpp +18 -0
- data/rice/detail/Forwards.ipp +60 -0
- data/rice/detail/Native.ipp +2 -4
- data/rice/detail/NativeAttributeGet.ipp +1 -1
- data/rice/detail/NativeAttributeSet.hpp +5 -3
- data/rice/detail/NativeAttributeSet.ipp +41 -33
- data/rice/detail/NativeMethod.ipp +25 -22
- data/rice/detail/NativeRegistry.hpp +4 -2
- data/rice/detail/NativeRegistry.ipp +42 -9
- data/rice/detail/Parameter.ipp +3 -4
- data/rice/detail/Type.ipp +4 -0
- data/rice/detail/Wrapper.hpp +17 -12
- data/rice/detail/Wrapper.ipp +95 -36
- data/rice/rice.hpp +3 -0
- data/rice/rice_api/NativeRegistry.ipp +14 -1
- data/rice/stl/exception.ipp +1 -1
- data/rice/stl/filesystem.ipp +1 -1
- data/rice/stl/map.ipp +13 -11
- data/rice/stl/multimap.ipp +13 -11
- data/rice/stl/pair.ipp +14 -8
- data/rice/stl/set.ipp +16 -16
- data/rice/stl/shared_ptr.hpp +16 -0
- data/rice/stl/shared_ptr.ipp +74 -37
- data/rice/stl/type_index.ipp +1 -1
- data/rice/stl/unique_ptr.hpp +9 -3
- data/rice/stl/unique_ptr.ipp +80 -124
- data/rice/stl/unordered_map.ipp +14 -12
- data/rice/stl/vector.ipp +67 -31
- data/test/test_Attribute.cpp +72 -0
- data/test/test_Callback.cpp +3 -0
- data/test/test_Inheritance.cpp +14 -14
- data/test/test_Keep_Alive_No_Wrapper.cpp +6 -2
- data/test/test_Stl_Map.cpp +46 -0
- data/test/test_Stl_Multimap.cpp +46 -0
- data/test/test_Stl_Set.cpp +34 -0
- data/test/test_Stl_SharedPtr.cpp +160 -45
- data/test/test_Stl_UniquePtr.cpp +48 -3
- data/test/test_Stl_Unordered_Map.cpp +46 -0
- data/test/test_Stl_Variant.cpp +10 -14
- data/test/test_Stl_Vector.cpp +140 -13
- data/test/test_Tracking.cpp +3 -0
- metadata +3 -1
data/test/test_Stl_Vector.cpp
CHANGED
|
@@ -16,6 +16,7 @@ SETUP(Vector)
|
|
|
16
16
|
|
|
17
17
|
TEARDOWN(Vector)
|
|
18
18
|
{
|
|
19
|
+
Rice::detail::Registries::instance.natives.reset(rb_mKernel);
|
|
19
20
|
rb_gc_start();
|
|
20
21
|
}
|
|
21
22
|
|
|
@@ -40,7 +41,7 @@ Class makeVectorClass()
|
|
|
40
41
|
|
|
41
42
|
return c;
|
|
42
43
|
}
|
|
43
|
-
|
|
44
|
+
/*
|
|
44
45
|
TESTCASE(StringVector)
|
|
45
46
|
{
|
|
46
47
|
Module m = define_module("Testing");
|
|
@@ -215,7 +216,7 @@ TESTCASE(Indexing)
|
|
|
215
216
|
vec.call("push", 0);
|
|
216
217
|
vec.call("push", 1);
|
|
217
218
|
vec.call("push", 2);
|
|
218
|
-
|
|
219
|
+
|
|
219
220
|
Object result = vec.call("size");
|
|
220
221
|
ASSERT_EQUAL(3, detail::From_Ruby<int32_t>().convert(result));
|
|
221
222
|
|
|
@@ -520,7 +521,7 @@ TESTCASE(NotDefaultConstructable)
|
|
|
520
521
|
{
|
|
521
522
|
define_class<NotComparable>("NotComparable").
|
|
522
523
|
define_constructor(Constructor<NotComparable, uint32_t>());
|
|
523
|
-
|
|
524
|
+
|
|
524
525
|
Class c = define_vector<NotComparable>("NotComparableVector");
|
|
525
526
|
Object vec = c.call("new");
|
|
526
527
|
|
|
@@ -579,7 +580,7 @@ TESTCASE(Comparable)
|
|
|
579
580
|
Class c = define_vector<Comparable>("ComparableVector");
|
|
580
581
|
|
|
581
582
|
Object vec = c.call("new");
|
|
582
|
-
|
|
583
|
+
|
|
583
584
|
Comparable comparable1(1);
|
|
584
585
|
vec.call("push", comparable1);
|
|
585
586
|
|
|
@@ -818,7 +819,7 @@ TESTCASE(DefaultValue)
|
|
|
818
819
|
TESTCASE(ToArray)
|
|
819
820
|
{
|
|
820
821
|
Module m = define_module("Testing");
|
|
821
|
-
|
|
822
|
+
|
|
822
823
|
Class c = define_vector<std::string>("StringVector").
|
|
823
824
|
define_constructor(Constructor<std::vector<std::string>>());
|
|
824
825
|
|
|
@@ -992,13 +993,7 @@ namespace
|
|
|
992
993
|
public:
|
|
993
994
|
static inline std::vector<std::string> instance_{ "one", "two", "three" };
|
|
994
995
|
};
|
|
995
|
-
|
|
996
|
-
/* std::ostream& operator<<(std::ostream& stream, const std::vector<std::string>& vector)
|
|
997
|
-
{
|
|
998
|
-
stream << vector;
|
|
999
|
-
return stream;
|
|
1000
|
-
}*/
|
|
1001
|
-
|
|
996
|
+
|
|
1002
997
|
void createFactoryClass()
|
|
1003
998
|
{
|
|
1004
999
|
define_class<Factory>("Factory").
|
|
@@ -1149,7 +1144,7 @@ TESTCASE(StringPointerVector)
|
|
|
1149
1144
|
ASSERT_EQUAL(1, array.size());
|
|
1150
1145
|
ASSERT_EQUAL("World", detail::From_Ruby<std::string>().convert(array[0].value()).c_str());
|
|
1151
1146
|
}
|
|
1152
|
-
|
|
1147
|
+
*/
|
|
1153
1148
|
namespace
|
|
1154
1149
|
{
|
|
1155
1150
|
class MyClass2
|
|
@@ -1186,6 +1181,81 @@ TESTCASE(MyClass2PointerVector)
|
|
|
1186
1181
|
ASSERT_EQUAL("Hello MyClass2", pMyClass->name);
|
|
1187
1182
|
}
|
|
1188
1183
|
|
|
1184
|
+
TESTCASE(KeepAliveArrayConstructor)
|
|
1185
|
+
{
|
|
1186
|
+
Class c = define_class<MyClass2>("MyClass2").
|
|
1187
|
+
define_constructor(Constructor<MyClass2, std::string>()).
|
|
1188
|
+
define_attr("name", &MyClass2::name, AttrAccess::Read);
|
|
1189
|
+
|
|
1190
|
+
define_vector<MyClass2*>("MyClass2PointerVector");
|
|
1191
|
+
|
|
1192
|
+
Module m = define_module("Testing");
|
|
1193
|
+
|
|
1194
|
+
std::string code = R"(
|
|
1195
|
+
array = []
|
|
1196
|
+
3.times do |i|
|
|
1197
|
+
array << MyClass2.new("instance#{i + 1}")
|
|
1198
|
+
end
|
|
1199
|
+
|
|
1200
|
+
vector = Std::MyClass2PointerVector.new(array)
|
|
1201
|
+
array = nil
|
|
1202
|
+
GC.start
|
|
1203
|
+
|
|
1204
|
+
names = []
|
|
1205
|
+
vector.each do |instance|
|
|
1206
|
+
names << instance.name
|
|
1207
|
+
end
|
|
1208
|
+
names
|
|
1209
|
+
)";
|
|
1210
|
+
|
|
1211
|
+
Array result = m.module_eval(code);
|
|
1212
|
+
ASSERT_EQUAL(3, result.size());
|
|
1213
|
+
ASSERT_EQUAL("instance1", detail::From_Ruby<std::string>().convert(result[0].value()));
|
|
1214
|
+
ASSERT_EQUAL("instance2", detail::From_Ruby<std::string>().convert(result[1].value()));
|
|
1215
|
+
ASSERT_EQUAL("instance3", detail::From_Ruby<std::string>().convert(result[2].value()));
|
|
1216
|
+
}
|
|
1217
|
+
|
|
1218
|
+
TESTCASE(KeepAlive)
|
|
1219
|
+
{
|
|
1220
|
+
Class c = define_class<MyClass2>("MyClass2").
|
|
1221
|
+
define_constructor(Constructor<MyClass2, std::string>()).
|
|
1222
|
+
define_attr("name", &MyClass2::name, AttrAccess::Read);
|
|
1223
|
+
|
|
1224
|
+
define_vector<MyClass2*>("MyClass2PointerVector");
|
|
1225
|
+
|
|
1226
|
+
Module m = define_module("Testing");
|
|
1227
|
+
|
|
1228
|
+
std::string code = R"(
|
|
1229
|
+
vector = Std::MyClass2PointerVector.new
|
|
1230
|
+
|
|
1231
|
+
# Test push_back
|
|
1232
|
+
3.times do |i|
|
|
1233
|
+
vector.push(MyClass2.new("instance#{i + 1}"))
|
|
1234
|
+
end
|
|
1235
|
+
|
|
1236
|
+
# Test insert
|
|
1237
|
+
vector.insert(1, MyClass2.new("inserted"))
|
|
1238
|
+
|
|
1239
|
+
# Test []=
|
|
1240
|
+
vector[0] = MyClass2.new("replaced")
|
|
1241
|
+
|
|
1242
|
+
GC.start
|
|
1243
|
+
|
|
1244
|
+
names = []
|
|
1245
|
+
vector.each do |instance|
|
|
1246
|
+
names << instance.name
|
|
1247
|
+
end
|
|
1248
|
+
names
|
|
1249
|
+
)";
|
|
1250
|
+
|
|
1251
|
+
Array result = m.module_eval(code);
|
|
1252
|
+
ASSERT_EQUAL(4, result.size());
|
|
1253
|
+
ASSERT_EQUAL("replaced", detail::From_Ruby<std::string>().convert(result[0].value()));
|
|
1254
|
+
ASSERT_EQUAL("inserted", detail::From_Ruby<std::string>().convert(result[1].value()));
|
|
1255
|
+
ASSERT_EQUAL("instance2", detail::From_Ruby<std::string>().convert(result[2].value()));
|
|
1256
|
+
ASSERT_EQUAL("instance3", detail::From_Ruby<std::string>().convert(result[3].value()));
|
|
1257
|
+
}
|
|
1258
|
+
|
|
1189
1259
|
namespace
|
|
1190
1260
|
{
|
|
1191
1261
|
bool typeCheckValue(std::vector<std::string>)
|
|
@@ -1253,3 +1323,60 @@ TESTCASE(TypeCheck)
|
|
|
1253
1323
|
result = m.module_eval(code),
|
|
1254
1324
|
ASSERT_EQUAL("wrong argument type Std::Vector≺int≻ (expected Std::Vector≺string≻)", ex.what()));
|
|
1255
1325
|
}
|
|
1326
|
+
|
|
1327
|
+
namespace
|
|
1328
|
+
{
|
|
1329
|
+
class ClassA
|
|
1330
|
+
{
|
|
1331
|
+
public:
|
|
1332
|
+
ClassA() = default;
|
|
1333
|
+
};
|
|
1334
|
+
|
|
1335
|
+
class ClassB
|
|
1336
|
+
{
|
|
1337
|
+
public:
|
|
1338
|
+
ClassB() = default;
|
|
1339
|
+
};
|
|
1340
|
+
|
|
1341
|
+
std::string vectorOverload(std::vector<ClassA>&)
|
|
1342
|
+
{
|
|
1343
|
+
return "ClassA";
|
|
1344
|
+
}
|
|
1345
|
+
|
|
1346
|
+
std::string vectorOverload(std::vector<ClassB>&)
|
|
1347
|
+
{
|
|
1348
|
+
return "ClassB";
|
|
1349
|
+
}
|
|
1350
|
+
}
|
|
1351
|
+
|
|
1352
|
+
TESTCASE(VectorOverloadResolution)
|
|
1353
|
+
{
|
|
1354
|
+
define_class<ClassA>("ClassA").
|
|
1355
|
+
define_constructor(Constructor<ClassA>());
|
|
1356
|
+
|
|
1357
|
+
define_class<ClassB>("ClassB").
|
|
1358
|
+
define_constructor(Constructor<ClassB>());
|
|
1359
|
+
|
|
1360
|
+
define_global_function<std::string(*)(std::vector<ClassA>&)>("vector_overload", &vectorOverload);
|
|
1361
|
+
define_global_function<std::string(*)(std::vector<ClassB>&)>("vector_overload", &vectorOverload);
|
|
1362
|
+
|
|
1363
|
+
Module m = define_module("Testing");
|
|
1364
|
+
|
|
1365
|
+
// When passing array with ClassA instance, should call ClassA overload
|
|
1366
|
+
std::string code = R"(
|
|
1367
|
+
a = ClassA.new
|
|
1368
|
+
vector_overload([a])
|
|
1369
|
+
)";
|
|
1370
|
+
|
|
1371
|
+
Object result = m.module_eval(code);
|
|
1372
|
+
ASSERT_EQUAL("ClassA", detail::From_Ruby<std::string>().convert(result));
|
|
1373
|
+
|
|
1374
|
+
// When passing array with ClassB instance, should call ClassB overload
|
|
1375
|
+
code = R"(
|
|
1376
|
+
b = ClassB.new
|
|
1377
|
+
vector_overload([b])
|
|
1378
|
+
)";
|
|
1379
|
+
|
|
1380
|
+
result = m.module_eval(code);
|
|
1381
|
+
ASSERT_EQUAL("ClassB", detail::From_Ruby<std::string>().convert(result));
|
|
1382
|
+
}
|
data/test/test_Tracking.cpp
CHANGED
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.9.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Paul Brannan
|
|
@@ -157,6 +157,8 @@ files:
|
|
|
157
157
|
- rice/cpp_api/shared_methods.hpp
|
|
158
158
|
- rice/detail/DefaultHandler.hpp
|
|
159
159
|
- rice/detail/DefaultHandler.ipp
|
|
160
|
+
- rice/detail/Forwards.hpp
|
|
161
|
+
- rice/detail/Forwards.ipp
|
|
160
162
|
- rice/detail/HandlerRegistry.hpp
|
|
161
163
|
- rice/detail/HandlerRegistry.ipp
|
|
162
164
|
- rice/detail/InstanceRegistry.hpp
|