rice 4.7.0 → 4.8.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +36 -1
- data/CMakeLists.txt +14 -22
- data/CMakePresets.json +203 -75
- data/FindRuby.cmake +358 -123
- data/bin/rice-doc.rb +56 -142
- data/bin/rice-rbs.rb +1 -2
- data/include/rice/api.hpp +248 -0
- data/include/rice/rice.hpp +2281 -1668
- data/include/rice/stl.hpp +364 -443
- data/lib/rice/doc/config.rb +70 -0
- data/lib/rice/doc/cpp_reference.rb +1 -4
- data/lib/rice/doc/mkdocs.rb +58 -20
- data/lib/rice/doc/rice.rb +20 -0
- data/lib/rice/doc.rb +1 -0
- data/lib/rice/make_rice_headers.rb +7 -0
- data/lib/rice/native_registry.rb +2 -2
- data/lib/rice/rbs.rb +4 -4
- data/lib/rice/version.rb +1 -1
- data/lib/rubygems_plugin.rb +12 -9
- data/rice/Arg.hpp +12 -6
- data/rice/Arg.ipp +14 -7
- data/rice/Buffer.ipp +44 -40
- data/rice/Callback.hpp +1 -1
- data/rice/Callback.ipp +2 -7
- data/rice/Constructor.hpp +1 -1
- data/rice/Constructor.ipp +11 -11
- data/rice/Data_Object.ipp +59 -30
- data/rice/Data_Type.hpp +9 -10
- data/rice/Data_Type.ipp +22 -25
- data/rice/Director.hpp +1 -0
- data/rice/Enum.ipp +58 -39
- data/rice/Exception.hpp +4 -4
- data/rice/Exception.ipp +7 -7
- data/rice/NoGVL.hpp +13 -0
- data/rice/Reference.hpp +56 -0
- data/rice/Reference.ipp +96 -0
- data/rice/Return.hpp +4 -1
- data/rice/Return.ipp +0 -6
- data/rice/cpp_api/Array.hpp +44 -7
- data/rice/cpp_api/Array.ipp +105 -9
- data/rice/cpp_api/Class.hpp +2 -2
- data/rice/cpp_api/Class.ipp +4 -4
- data/rice/cpp_api/Hash.ipp +7 -4
- data/rice/cpp_api/Module.hpp +4 -4
- data/rice/cpp_api/Module.ipp +12 -10
- data/rice/cpp_api/Object.hpp +4 -4
- data/rice/cpp_api/Object.ipp +15 -12
- data/rice/cpp_api/String.hpp +2 -2
- data/rice/cpp_api/String.ipp +11 -8
- data/rice/cpp_api/Symbol.ipp +16 -7
- data/rice/cpp_api/shared_methods.hpp +5 -9
- data/rice/detail/InstanceRegistry.hpp +0 -2
- data/rice/detail/Native.hpp +31 -21
- data/rice/detail/Native.ipp +281 -133
- data/rice/detail/NativeAttributeGet.hpp +5 -7
- data/rice/detail/NativeAttributeGet.ipp +26 -26
- data/rice/detail/NativeAttributeSet.hpp +2 -4
- data/rice/detail/NativeAttributeSet.ipp +20 -16
- data/rice/detail/NativeCallback.hpp +77 -0
- data/rice/detail/NativeCallback.ipp +280 -0
- data/rice/detail/NativeFunction.hpp +11 -21
- data/rice/detail/NativeFunction.ipp +58 -119
- data/rice/detail/NativeInvoker.hpp +4 -4
- data/rice/detail/NativeInvoker.ipp +7 -7
- data/rice/detail/NativeIterator.hpp +2 -4
- data/rice/detail/NativeIterator.ipp +18 -14
- data/rice/detail/NativeMethod.hpp +10 -20
- data/rice/detail/NativeMethod.ipp +54 -114
- data/rice/detail/NativeProc.hpp +5 -7
- data/rice/detail/NativeProc.ipp +39 -28
- data/rice/detail/NativeRegistry.hpp +0 -1
- data/rice/detail/NativeRegistry.ipp +0 -1
- data/rice/detail/Parameter.hpp +15 -8
- data/rice/detail/Parameter.ipp +102 -43
- data/rice/detail/Proc.ipp +14 -28
- data/rice/detail/RubyType.ipp +2 -53
- data/rice/detail/Type.hpp +23 -7
- data/rice/detail/Type.ipp +73 -93
- data/rice/detail/TypeRegistry.ipp +5 -4
- data/rice/detail/Wrapper.hpp +1 -1
- data/rice/detail/Wrapper.ipp +18 -10
- data/rice/detail/from_ruby.hpp +8 -6
- data/rice/detail/from_ruby.ipp +306 -173
- data/rice/detail/ruby.hpp +23 -0
- data/rice/libc/file.hpp +4 -4
- data/rice/rice.hpp +6 -8
- data/rice/rice_api/Native.ipp +5 -1
- data/rice/rice_api/Parameter.ipp +1 -1
- data/rice/ruby_mark.hpp +2 -1
- data/rice/stl/complex.ipp +12 -8
- data/rice/stl/map.ipp +27 -22
- data/rice/stl/monostate.ipp +16 -12
- data/rice/stl/multimap.hpp +0 -2
- data/rice/stl/multimap.ipp +27 -22
- data/rice/stl/optional.ipp +27 -11
- data/rice/stl/pair.ipp +5 -5
- data/rice/stl/reference_wrapper.ipp +5 -4
- data/rice/stl/set.ipp +16 -16
- data/rice/stl/shared_ptr.hpp +0 -16
- data/rice/stl/shared_ptr.ipp +34 -190
- data/rice/stl/string.ipp +18 -18
- data/rice/stl/string_view.ipp +19 -1
- data/rice/stl/tuple.ipp +15 -36
- data/rice/stl/unique_ptr.ipp +18 -8
- data/rice/stl/unordered_map.ipp +20 -15
- data/rice/stl/variant.ipp +37 -21
- data/rice/stl/vector.ipp +41 -36
- data/rice/traits/function_traits.hpp +19 -19
- data/rice/traits/method_traits.hpp +4 -4
- data/rice/traits/rice_traits.hpp +162 -39
- data/rice.gemspec +1 -4
- data/test/test_Array.cpp +261 -3
- data/test/test_Attribute.cpp +6 -3
- data/test/test_Buffer.cpp +6 -42
- data/test/test_Callback.cpp +77 -23
- data/test/test_Data_Object.cpp +2 -2
- data/test/test_Data_Type.cpp +23 -23
- data/test/test_Director.cpp +2 -4
- data/test/test_Enum.cpp +34 -5
- data/test/test_File.cpp +9 -5
- data/test/test_From_Ruby.cpp +7 -6
- data/test/test_GVL.cpp +3 -3
- data/test/test_Hash.cpp +1 -1
- data/test/test_Iterator.cpp +54 -22
- data/test/test_Keep_Alive.cpp +1 -1
- data/test/test_Keep_Alive_No_Wrapper.cpp +1 -1
- data/test/test_Module.cpp +5 -5
- data/test/test_Overloads.cpp +395 -50
- data/test/test_Proc.cpp +54 -0
- data/test/test_Reference.cpp +181 -0
- data/test/test_Self.cpp +2 -2
- data/test/test_Stl_Set.cpp +6 -6
- data/test/test_Stl_SharedPtr.cpp +54 -30
- data/test/test_Stl_String_View.cpp +12 -0
- data/test/test_Stl_Tuple.cpp +1 -1
- data/test/test_Stl_Variant.cpp +6 -14
- data/test/test_Stl_Vector.cpp +61 -30
- data/test/test_String.cpp +4 -2
- data/test/test_Struct.cpp +1 -1
- data/test/test_Symbol.cpp +12 -0
- data/test/test_To_Ruby.cpp +1 -0
- data/test/test_Type.cpp +36 -35
- data/test/test_global_functions.cpp +1 -1
- data/test/unittest.cpp +1 -1
- data/test/unittest.hpp +5 -5
- metadata +10 -24
- data/rice/Function.hpp +0 -17
- data/rice/Function.ipp +0 -13
- data/rice/detail/MethodInfo.hpp +0 -48
- data/rice/detail/MethodInfo.ipp +0 -99
- data/rice/detail/NativeCallbackFFI.hpp +0 -55
- data/rice/detail/NativeCallbackFFI.ipp +0 -152
- data/rice/detail/NativeCallbackSimple.hpp +0 -30
- data/rice/detail/NativeCallbackSimple.ipp +0 -29
data/rice/stl/string.ipp
CHANGED
|
@@ -68,7 +68,7 @@ namespace Rice::detail
|
|
|
68
68
|
public:
|
|
69
69
|
To_Ruby() = default;
|
|
70
70
|
|
|
71
|
-
explicit To_Ruby(
|
|
71
|
+
explicit To_Ruby(Arg* arg) : arg_(arg)
|
|
72
72
|
{
|
|
73
73
|
}
|
|
74
74
|
|
|
@@ -78,7 +78,7 @@ namespace Rice::detail
|
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
private:
|
|
81
|
-
|
|
81
|
+
Arg* arg_ = nullptr;
|
|
82
82
|
};
|
|
83
83
|
|
|
84
84
|
template<>
|
|
@@ -87,7 +87,7 @@ namespace Rice::detail
|
|
|
87
87
|
public:
|
|
88
88
|
To_Ruby() = default;
|
|
89
89
|
|
|
90
|
-
explicit To_Ruby(
|
|
90
|
+
explicit To_Ruby(Arg* arg) : arg_(arg)
|
|
91
91
|
{
|
|
92
92
|
}
|
|
93
93
|
|
|
@@ -97,7 +97,7 @@ namespace Rice::detail
|
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
private:
|
|
100
|
-
|
|
100
|
+
Arg* arg_ = nullptr;
|
|
101
101
|
};
|
|
102
102
|
|
|
103
103
|
template<int N>
|
|
@@ -106,7 +106,7 @@ namespace Rice::detail
|
|
|
106
106
|
public:
|
|
107
107
|
To_Ruby() = default;
|
|
108
108
|
|
|
109
|
-
explicit To_Ruby(
|
|
109
|
+
explicit To_Ruby(Arg* arg) : arg_(arg)
|
|
110
110
|
{
|
|
111
111
|
}
|
|
112
112
|
|
|
@@ -117,7 +117,7 @@ namespace Rice::detail
|
|
|
117
117
|
return dataObject.value();
|
|
118
118
|
}
|
|
119
119
|
private:
|
|
120
|
-
|
|
120
|
+
Arg* arg_ = nullptr;
|
|
121
121
|
};
|
|
122
122
|
|
|
123
123
|
template<>
|
|
@@ -126,14 +126,14 @@ namespace Rice::detail
|
|
|
126
126
|
public:
|
|
127
127
|
To_Ruby() = default;
|
|
128
128
|
|
|
129
|
-
explicit To_Ruby(
|
|
129
|
+
explicit To_Ruby(Arg* arg) : arg_(arg)
|
|
130
130
|
{
|
|
131
131
|
}
|
|
132
132
|
|
|
133
133
|
VALUE convert(const std::string* value)
|
|
134
134
|
{
|
|
135
|
-
bool isOwner = this->
|
|
136
|
-
bool isBuffer = this->
|
|
135
|
+
bool isOwner = this->arg_ && this->arg_->isOwner();
|
|
136
|
+
bool isBuffer = dynamic_cast<ReturnBuffer*>(this->arg_) ? true : false;
|
|
137
137
|
|
|
138
138
|
if (isBuffer)
|
|
139
139
|
{
|
|
@@ -147,7 +147,7 @@ namespace Rice::detail
|
|
|
147
147
|
}
|
|
148
148
|
|
|
149
149
|
private:
|
|
150
|
-
|
|
150
|
+
Arg* arg_ = nullptr;
|
|
151
151
|
};
|
|
152
152
|
|
|
153
153
|
template<>
|
|
@@ -156,7 +156,7 @@ namespace Rice::detail
|
|
|
156
156
|
public:
|
|
157
157
|
To_Ruby() = default;
|
|
158
158
|
|
|
159
|
-
explicit To_Ruby(
|
|
159
|
+
explicit To_Ruby(Arg* arg) : arg_(arg)
|
|
160
160
|
{
|
|
161
161
|
}
|
|
162
162
|
|
|
@@ -166,7 +166,7 @@ namespace Rice::detail
|
|
|
166
166
|
}
|
|
167
167
|
|
|
168
168
|
private:
|
|
169
|
-
|
|
169
|
+
Arg* arg_ = nullptr;
|
|
170
170
|
};
|
|
171
171
|
|
|
172
172
|
/*template<>
|
|
@@ -175,7 +175,7 @@ namespace Rice::detail
|
|
|
175
175
|
public:
|
|
176
176
|
To_Ruby() = default;
|
|
177
177
|
|
|
178
|
-
explicit To_Ruby(
|
|
178
|
+
explicit To_Ruby(Arg* arg) : arg_(arg)
|
|
179
179
|
{
|
|
180
180
|
}
|
|
181
181
|
|
|
@@ -187,7 +187,7 @@ namespace Rice::detail
|
|
|
187
187
|
}
|
|
188
188
|
|
|
189
189
|
private:
|
|
190
|
-
|
|
190
|
+
Arg* arg_ = nullptr;
|
|
191
191
|
};*/
|
|
192
192
|
|
|
193
193
|
template<>
|
|
@@ -200,7 +200,7 @@ namespace Rice::detail
|
|
|
200
200
|
{
|
|
201
201
|
}
|
|
202
202
|
|
|
203
|
-
|
|
203
|
+
double is_convertible(VALUE value)
|
|
204
204
|
{
|
|
205
205
|
switch (rb_type(value))
|
|
206
206
|
{
|
|
@@ -232,7 +232,7 @@ namespace Rice::detail
|
|
|
232
232
|
{
|
|
233
233
|
}
|
|
234
234
|
|
|
235
|
-
|
|
235
|
+
double is_convertible(VALUE value)
|
|
236
236
|
{
|
|
237
237
|
switch (rb_type(value))
|
|
238
238
|
{
|
|
@@ -266,7 +266,7 @@ namespace Rice::detail
|
|
|
266
266
|
{
|
|
267
267
|
}
|
|
268
268
|
|
|
269
|
-
|
|
269
|
+
double is_convertible(VALUE value)
|
|
270
270
|
{
|
|
271
271
|
switch (rb_type(value))
|
|
272
272
|
{
|
|
@@ -300,7 +300,7 @@ namespace Rice::detail
|
|
|
300
300
|
{
|
|
301
301
|
}
|
|
302
302
|
|
|
303
|
-
|
|
303
|
+
double is_convertible(VALUE value)
|
|
304
304
|
{
|
|
305
305
|
switch (rb_type(value))
|
|
306
306
|
{
|
data/rice/stl/string_view.ipp
CHANGED
|
@@ -20,20 +20,38 @@ namespace Rice::detail
|
|
|
20
20
|
class To_Ruby<std::string_view>
|
|
21
21
|
{
|
|
22
22
|
public:
|
|
23
|
+
To_Ruby() = default;
|
|
24
|
+
|
|
25
|
+
explicit To_Ruby(Arg* arg) : arg_(arg)
|
|
26
|
+
{
|
|
27
|
+
}
|
|
28
|
+
|
|
23
29
|
VALUE convert(std::string_view const& x)
|
|
24
30
|
{
|
|
25
31
|
return detail::protect(rb_external_str_new, x.data(), (long)x.size());
|
|
26
32
|
}
|
|
33
|
+
|
|
34
|
+
private:
|
|
35
|
+
Arg* arg_ = nullptr;
|
|
27
36
|
};
|
|
28
37
|
|
|
29
38
|
template<>
|
|
30
39
|
class To_Ruby<std::string_view&>
|
|
31
40
|
{
|
|
32
41
|
public:
|
|
42
|
+
To_Ruby() = default;
|
|
43
|
+
|
|
44
|
+
explicit To_Ruby(Arg* arg) : arg_(arg)
|
|
45
|
+
{
|
|
46
|
+
}
|
|
47
|
+
|
|
33
48
|
VALUE convert(std::string_view const& x)
|
|
34
49
|
{
|
|
35
50
|
return detail::protect(rb_external_str_new, x.data(), (long)x.size());
|
|
36
51
|
}
|
|
52
|
+
|
|
53
|
+
private:
|
|
54
|
+
Arg* arg_ = nullptr;
|
|
37
55
|
};
|
|
38
56
|
|
|
39
57
|
template<>
|
|
@@ -46,7 +64,7 @@ namespace Rice::detail
|
|
|
46
64
|
{
|
|
47
65
|
}
|
|
48
66
|
|
|
49
|
-
|
|
67
|
+
double is_convertible(VALUE value)
|
|
50
68
|
{
|
|
51
69
|
switch (rb_type(value))
|
|
52
70
|
{
|
data/rice/stl/tuple.ipp
CHANGED
|
@@ -8,7 +8,7 @@ namespace Rice::detail
|
|
|
8
8
|
using Tuple_T = std::tuple<Types...>;
|
|
9
9
|
|
|
10
10
|
template<std::size_t... I>
|
|
11
|
-
constexpr static bool verifyTypes(std::index_sequence<I...>&
|
|
11
|
+
constexpr static bool verifyTypes(std::index_sequence<I...>&)
|
|
12
12
|
{
|
|
13
13
|
return (Type<std::tuple_element_t<I, Tuple_T>>::verify() && ...);
|
|
14
14
|
}
|
|
@@ -32,7 +32,7 @@ namespace Rice::detail
|
|
|
32
32
|
public:
|
|
33
33
|
To_Ruby() = default;
|
|
34
34
|
|
|
35
|
-
explicit To_Ruby(
|
|
35
|
+
explicit To_Ruby(Arg* arg) : arg_(arg)
|
|
36
36
|
{
|
|
37
37
|
}
|
|
38
38
|
|
|
@@ -49,7 +49,7 @@ namespace Rice::detail
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
private:
|
|
52
|
-
|
|
52
|
+
Arg* arg_ = nullptr;
|
|
53
53
|
};
|
|
54
54
|
|
|
55
55
|
template<typename...Types>
|
|
@@ -58,7 +58,7 @@ namespace Rice::detail
|
|
|
58
58
|
public:
|
|
59
59
|
To_Ruby() = default;
|
|
60
60
|
|
|
61
|
-
explicit To_Ruby(
|
|
61
|
+
explicit To_Ruby(Arg* arg) : arg_(arg)
|
|
62
62
|
{
|
|
63
63
|
}
|
|
64
64
|
|
|
@@ -66,7 +66,7 @@ namespace Rice::detail
|
|
|
66
66
|
{
|
|
67
67
|
Array result;
|
|
68
68
|
|
|
69
|
-
bool isOwner = (this->
|
|
69
|
+
bool isOwner = (this->arg_ && this->arg_->isOwner());
|
|
70
70
|
|
|
71
71
|
for_each_tuple(data, [&](auto& element)
|
|
72
72
|
{
|
|
@@ -77,7 +77,7 @@ namespace Rice::detail
|
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
private:
|
|
80
|
-
|
|
80
|
+
Arg* arg_ = nullptr;
|
|
81
81
|
};
|
|
82
82
|
|
|
83
83
|
template<typename...Types>
|
|
@@ -86,35 +86,28 @@ namespace Rice::detail
|
|
|
86
86
|
public:
|
|
87
87
|
using Tuple_T = std::tuple<Types...>;
|
|
88
88
|
|
|
89
|
-
template<std::size_t... I>
|
|
90
|
-
constexpr static bool verifyTypes(Array& array, std::index_sequence<I...>& indices)
|
|
91
|
-
{
|
|
92
|
-
return (Type<std::tuple_element_t<I, Tuple_T>>::verify() && ...);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
89
|
From_Ruby() = default;
|
|
96
90
|
|
|
97
|
-
explicit From_Ruby(Arg* arg)
|
|
91
|
+
explicit From_Ruby(Arg* arg) : arg_(arg)
|
|
98
92
|
{
|
|
99
93
|
}
|
|
100
94
|
|
|
101
|
-
|
|
95
|
+
double is_convertible(VALUE value)
|
|
102
96
|
{
|
|
103
|
-
Convertible result = Convertible::None;
|
|
104
|
-
|
|
105
97
|
// The ruby value must be an array of the correct size
|
|
106
98
|
if (rb_type(value) != RUBY_T_ARRAY || Array(value).size() != std::tuple_size_v<Tuple_T>)
|
|
107
99
|
{
|
|
108
|
-
return
|
|
100
|
+
return Convertible::None;
|
|
109
101
|
}
|
|
110
|
-
|
|
111
|
-
// Now check that each tuple type is convertible
|
|
102
|
+
|
|
103
|
+
// Now check that each tuple type is convertible - use minimum score
|
|
104
|
+
double result = Convertible::Exact;
|
|
112
105
|
Array array(value);
|
|
113
106
|
int i = 0;
|
|
114
107
|
for_each_tuple(this->fromRubys_,
|
|
115
108
|
[&](auto& fromRuby)
|
|
116
109
|
{
|
|
117
|
-
result = result
|
|
110
|
+
result = (std::min)(result, fromRuby.is_convertible(array[i].value()));
|
|
118
111
|
i++;
|
|
119
112
|
});
|
|
120
113
|
|
|
@@ -122,7 +115,7 @@ namespace Rice::detail
|
|
|
122
115
|
}
|
|
123
116
|
|
|
124
117
|
template <std::size_t... I>
|
|
125
|
-
std::tuple<Types...> convertInternal(Array array, std::index_sequence<I...>&
|
|
118
|
+
std::tuple<Types...> convertInternal(Array array, std::index_sequence<I...>&)
|
|
126
119
|
{
|
|
127
120
|
return std::forward_as_tuple(std::get<I>(this->fromRubys_).convert(array[I].value())...);
|
|
128
121
|
}
|
|
@@ -135,23 +128,9 @@ namespace Rice::detail
|
|
|
135
128
|
}
|
|
136
129
|
|
|
137
130
|
private:
|
|
131
|
+
Arg* arg_ = nullptr;
|
|
138
132
|
// Possible converters we could use for this variant
|
|
139
133
|
using From_Ruby_Ts = std::tuple<From_Ruby<Types>...>;
|
|
140
134
|
From_Ruby_Ts fromRubys_;
|
|
141
135
|
};
|
|
142
|
-
|
|
143
|
-
/* template<typename...Types>
|
|
144
|
-
class From_Ruby<std::tuple<Types...>&> : public From_Ruby<std::tuple<Types...>>
|
|
145
|
-
{
|
|
146
|
-
public:
|
|
147
|
-
std::tuple<Types...>& convert(VALUE value)
|
|
148
|
-
{
|
|
149
|
-
int index = this->figureIndex(value);
|
|
150
|
-
this->converted_ = this->convertInternal(value, index);
|
|
151
|
-
return this->converted_;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
private:
|
|
155
|
-
std::tuple<Types...> converted_;
|
|
156
|
-
};*/
|
|
157
136
|
}
|
data/rice/stl/unique_ptr.ipp
CHANGED
|
@@ -32,7 +32,7 @@ namespace Rice::detail
|
|
|
32
32
|
public:
|
|
33
33
|
To_Ruby() = default;
|
|
34
34
|
|
|
35
|
-
explicit To_Ruby(
|
|
35
|
+
explicit To_Ruby(Arg* arg) : arg_(arg)
|
|
36
36
|
{
|
|
37
37
|
}
|
|
38
38
|
|
|
@@ -49,7 +49,7 @@ namespace Rice::detail
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
private:
|
|
52
|
-
|
|
52
|
+
Arg* arg_ = nullptr;
|
|
53
53
|
};
|
|
54
54
|
|
|
55
55
|
template <typename T>
|
|
@@ -58,7 +58,7 @@ namespace Rice::detail
|
|
|
58
58
|
public:
|
|
59
59
|
To_Ruby() = default;
|
|
60
60
|
|
|
61
|
-
explicit To_Ruby(
|
|
61
|
+
explicit To_Ruby(Arg* arg) : arg_(arg)
|
|
62
62
|
{
|
|
63
63
|
}
|
|
64
64
|
|
|
@@ -69,7 +69,7 @@ namespace Rice::detail
|
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
private:
|
|
72
|
-
|
|
72
|
+
Arg* arg_ = nullptr;
|
|
73
73
|
};
|
|
74
74
|
|
|
75
75
|
template <typename T>
|
|
@@ -84,14 +84,16 @@ namespace Rice::detail
|
|
|
84
84
|
|
|
85
85
|
From_Ruby() = default;
|
|
86
86
|
|
|
87
|
-
explicit From_Ruby(Arg* arg)
|
|
87
|
+
explicit From_Ruby(Arg* arg) : arg_(arg)
|
|
88
88
|
{
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
-
|
|
91
|
+
double is_convertible(VALUE value)
|
|
92
92
|
{
|
|
93
93
|
if (!is_same_smart_ptr(value))
|
|
94
|
+
{
|
|
94
95
|
return Convertible::None;
|
|
96
|
+
}
|
|
95
97
|
|
|
96
98
|
switch (rb_type(value))
|
|
97
99
|
{
|
|
@@ -113,6 +115,9 @@ namespace Rice::detail
|
|
|
113
115
|
}
|
|
114
116
|
return std::move(wrapper->data());
|
|
115
117
|
}
|
|
118
|
+
|
|
119
|
+
private:
|
|
120
|
+
Arg* arg_ = nullptr;
|
|
116
121
|
};
|
|
117
122
|
|
|
118
123
|
template <typename T>
|
|
@@ -127,14 +132,16 @@ namespace Rice::detail
|
|
|
127
132
|
|
|
128
133
|
From_Ruby() = default;
|
|
129
134
|
|
|
130
|
-
explicit From_Ruby(Arg* arg)
|
|
135
|
+
explicit From_Ruby(Arg* arg) : arg_(arg)
|
|
131
136
|
{
|
|
132
137
|
}
|
|
133
138
|
|
|
134
|
-
|
|
139
|
+
double is_convertible(VALUE value)
|
|
135
140
|
{
|
|
136
141
|
if (!is_same_smart_ptr(value))
|
|
142
|
+
{
|
|
137
143
|
return Convertible::None;
|
|
144
|
+
}
|
|
138
145
|
|
|
139
146
|
switch (rb_type(value))
|
|
140
147
|
{
|
|
@@ -156,6 +163,9 @@ namespace Rice::detail
|
|
|
156
163
|
}
|
|
157
164
|
return wrapper->data();
|
|
158
165
|
}
|
|
166
|
+
|
|
167
|
+
private:
|
|
168
|
+
Arg* arg_ = nullptr;
|
|
159
169
|
};
|
|
160
170
|
|
|
161
171
|
template<typename T>
|
data/rice/stl/unordered_map.ipp
CHANGED
|
@@ -107,7 +107,11 @@ namespace Rice
|
|
|
107
107
|
{
|
|
108
108
|
if constexpr (detail::is_comparable_v<Mapped_T>)
|
|
109
109
|
{
|
|
110
|
-
klass_.define_method("
|
|
110
|
+
klass_.define_method("==", [](T& unordered_map, T& other)->bool
|
|
111
|
+
{
|
|
112
|
+
return unordered_map == other;
|
|
113
|
+
})
|
|
114
|
+
.define_method("value?", [](T& unordered_map, Mapped_T& value) -> bool
|
|
111
115
|
{
|
|
112
116
|
auto it = std::find_if(unordered_map.begin(), unordered_map.end(),
|
|
113
117
|
[&value](auto& pair)
|
|
@@ -117,10 +121,11 @@ namespace Rice
|
|
|
117
121
|
|
|
118
122
|
return it != unordered_map.end();
|
|
119
123
|
});
|
|
124
|
+
rb_define_alias(klass_, "eql?", "==");
|
|
120
125
|
}
|
|
121
126
|
else
|
|
122
127
|
{
|
|
123
|
-
klass_.define_method("value?", [](T
|
|
128
|
+
klass_.define_method("value?", [](T&, Mapped_T&) -> bool
|
|
124
129
|
{
|
|
125
130
|
return false;
|
|
126
131
|
});
|
|
@@ -205,10 +210,10 @@ namespace Rice
|
|
|
205
210
|
}
|
|
206
211
|
else
|
|
207
212
|
{
|
|
208
|
-
klass_.define_method("to_s", [](const T&
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
213
|
+
klass_.define_method("to_s", [](const T&)
|
|
214
|
+
{
|
|
215
|
+
return "[Not printable]";
|
|
216
|
+
});
|
|
212
217
|
}
|
|
213
218
|
}
|
|
214
219
|
|
|
@@ -299,7 +304,7 @@ namespace Rice
|
|
|
299
304
|
{
|
|
300
305
|
}
|
|
301
306
|
|
|
302
|
-
|
|
307
|
+
double is_convertible(VALUE value)
|
|
303
308
|
{
|
|
304
309
|
switch (rb_type(value))
|
|
305
310
|
{
|
|
@@ -307,7 +312,7 @@ namespace Rice
|
|
|
307
312
|
return Data_Type<std::unordered_map<T, U>>::is_descendant(value) ? Convertible::Exact : Convertible::None;
|
|
308
313
|
break;
|
|
309
314
|
case RUBY_T_HASH:
|
|
310
|
-
return Convertible::
|
|
315
|
+
return Convertible::Exact;
|
|
311
316
|
break;
|
|
312
317
|
default:
|
|
313
318
|
return Convertible::None;
|
|
@@ -333,7 +338,7 @@ namespace Rice
|
|
|
333
338
|
}
|
|
334
339
|
default:
|
|
335
340
|
{
|
|
336
|
-
throw Exception(rb_eTypeError, "wrong argument type %s (expected %
|
|
341
|
+
throw Exception(rb_eTypeError, "wrong argument type %s (expected %s)",
|
|
337
342
|
detail::protect(rb_obj_classname, value), "std::unordered_map");
|
|
338
343
|
}
|
|
339
344
|
}
|
|
@@ -353,7 +358,7 @@ namespace Rice
|
|
|
353
358
|
{
|
|
354
359
|
}
|
|
355
360
|
|
|
356
|
-
|
|
361
|
+
double is_convertible(VALUE value)
|
|
357
362
|
{
|
|
358
363
|
switch (rb_type(value))
|
|
359
364
|
{
|
|
@@ -361,7 +366,7 @@ namespace Rice
|
|
|
361
366
|
return Data_Type<std::unordered_map<T, U>>::is_descendant(value) ? Convertible::Exact : Convertible::None;
|
|
362
367
|
break;
|
|
363
368
|
case RUBY_T_HASH:
|
|
364
|
-
return Convertible::
|
|
369
|
+
return Convertible::Exact;
|
|
365
370
|
break;
|
|
366
371
|
default:
|
|
367
372
|
return Convertible::None;
|
|
@@ -388,7 +393,7 @@ namespace Rice
|
|
|
388
393
|
}
|
|
389
394
|
default:
|
|
390
395
|
{
|
|
391
|
-
throw Exception(rb_eTypeError, "wrong argument type %s (expected %
|
|
396
|
+
throw Exception(rb_eTypeError, "wrong argument type %s (expected %s)",
|
|
392
397
|
detail::protect(rb_obj_classname, value), "std::unordered_map");
|
|
393
398
|
}
|
|
394
399
|
}
|
|
@@ -409,7 +414,7 @@ namespace Rice
|
|
|
409
414
|
{
|
|
410
415
|
}
|
|
411
416
|
|
|
412
|
-
|
|
417
|
+
double is_convertible(VALUE value)
|
|
413
418
|
{
|
|
414
419
|
switch (rb_type(value))
|
|
415
420
|
{
|
|
@@ -420,7 +425,7 @@ namespace Rice
|
|
|
420
425
|
return Convertible::Exact;
|
|
421
426
|
break;
|
|
422
427
|
case RUBY_T_HASH:
|
|
423
|
-
return Convertible::
|
|
428
|
+
return Convertible::Exact;
|
|
424
429
|
break;
|
|
425
430
|
default:
|
|
426
431
|
return Convertible::None;
|
|
@@ -447,7 +452,7 @@ namespace Rice
|
|
|
447
452
|
}
|
|
448
453
|
default:
|
|
449
454
|
{
|
|
450
|
-
throw Exception(rb_eTypeError, "wrong argument type %s (expected %
|
|
455
|
+
throw Exception(rb_eTypeError, "wrong argument type %s (expected %s)",
|
|
451
456
|
detail::protect(rb_obj_classname, value), "std::unordered_map");
|
|
452
457
|
}
|
|
453
458
|
}
|