rice 4.2.1 → 4.3.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 +169 -162
- data/include/rice/rice.hpp +8762 -8672
- data/include/rice/stl.hpp +128 -10
- data/lib/version.rb +3 -3
- data/rice/Data_Object.ipp +386 -313
- data/rice/Data_Type.ipp +1 -0
- data/rice/Identifier.hpp +50 -50
- data/rice/Identifier.ipp +28 -28
- data/rice/detail/NativeFunction.hpp +119 -119
- data/rice/detail/NativeFunction.ipp +300 -300
- data/rice/detail/NativeIterator.hpp +1 -1
- data/rice/detail/NativeIterator.ipp +101 -101
- data/rice/detail/Wrapper.ipp +11 -1
- data/rice/stl.hpp +1 -0
- data/test/embed_ruby.cpp +2 -2
- data/test/test_Array.cpp +301 -301
- data/test/test_Iterator.cpp +356 -290
- data/test/test_Stl_SmartPointer.cpp +45 -2
- data/test/test_Stl_String_View.cpp +88 -0
- data/test/test_Stl_Unordered_Map.cpp +38 -34
- data/test/test_Stl_Vector.cpp +871 -811
- data/test/test_String.cpp +15 -0
- metadata +4 -3
data/include/rice/stl.hpp
CHANGED
@@ -71,6 +71,40 @@ namespace Rice::detail
|
|
71
71
|
Arg* arg_ = nullptr;
|
72
72
|
};
|
73
73
|
|
74
|
+
template<>
|
75
|
+
class From_Ruby<std::string&>
|
76
|
+
{
|
77
|
+
public:
|
78
|
+
From_Ruby() = default;
|
79
|
+
|
80
|
+
explicit From_Ruby(Arg* arg) : arg_(arg)
|
81
|
+
{
|
82
|
+
}
|
83
|
+
|
84
|
+
bool is_convertible(VALUE value)
|
85
|
+
{
|
86
|
+
return rb_type(value) == RUBY_T_STRING;
|
87
|
+
}
|
88
|
+
|
89
|
+
std::string& convert(VALUE value)
|
90
|
+
{
|
91
|
+
if (value == Qnil && this->arg_ && this->arg_->hasDefaultValue())
|
92
|
+
{
|
93
|
+
return this->arg_->defaultValue<std::string>();
|
94
|
+
}
|
95
|
+
else
|
96
|
+
{
|
97
|
+
detail::protect(rb_check_type, value, (int)T_STRING);
|
98
|
+
this->converted_ = std::string(RSTRING_PTR(value), RSTRING_LEN(value));
|
99
|
+
return this->converted_;
|
100
|
+
}
|
101
|
+
}
|
102
|
+
|
103
|
+
private:
|
104
|
+
Arg* arg_ = nullptr;
|
105
|
+
std::string converted_;
|
106
|
+
};
|
107
|
+
|
74
108
|
template<>
|
75
109
|
class From_Ruby<std::string*>
|
76
110
|
{
|
@@ -92,7 +126,65 @@ namespace Rice::detail
|
|
92
126
|
};
|
93
127
|
|
94
128
|
template<>
|
95
|
-
class From_Ruby<std::string
|
129
|
+
class From_Ruby<std::string*&>
|
130
|
+
{
|
131
|
+
public:
|
132
|
+
bool is_convertible(VALUE value)
|
133
|
+
{
|
134
|
+
return rb_type(value) == RUBY_T_STRING;
|
135
|
+
}
|
136
|
+
|
137
|
+
std::string* convert(VALUE value)
|
138
|
+
{
|
139
|
+
detail::protect(rb_check_type, value, (int)T_STRING);
|
140
|
+
this->converted_ = std::string(RSTRING_PTR(value), RSTRING_LEN(value));
|
141
|
+
return &this->converted_;
|
142
|
+
}
|
143
|
+
|
144
|
+
private:
|
145
|
+
std::string converted_;
|
146
|
+
};
|
147
|
+
}
|
148
|
+
|
149
|
+
// ========= string_view.hpp =========
|
150
|
+
|
151
|
+
|
152
|
+
// --------- string_view.ipp ---------
|
153
|
+
#include <string_view>
|
154
|
+
|
155
|
+
namespace Rice::detail
|
156
|
+
{
|
157
|
+
template<>
|
158
|
+
struct Type<std::string_view>
|
159
|
+
{
|
160
|
+
static bool verify()
|
161
|
+
{
|
162
|
+
return true;
|
163
|
+
}
|
164
|
+
};
|
165
|
+
|
166
|
+
template<>
|
167
|
+
class To_Ruby<std::string_view>
|
168
|
+
{
|
169
|
+
public:
|
170
|
+
VALUE convert(std::string_view const& x)
|
171
|
+
{
|
172
|
+
return detail::protect(rb_external_str_new, x.data(), (long)x.size());
|
173
|
+
}
|
174
|
+
};
|
175
|
+
|
176
|
+
template<>
|
177
|
+
class To_Ruby<std::string_view&>
|
178
|
+
{
|
179
|
+
public:
|
180
|
+
VALUE convert(std::string_view const& x)
|
181
|
+
{
|
182
|
+
return detail::protect(rb_external_str_new, x.data(), (long)x.size());
|
183
|
+
}
|
184
|
+
};
|
185
|
+
|
186
|
+
template<>
|
187
|
+
class From_Ruby<std::string_view>
|
96
188
|
{
|
97
189
|
public:
|
98
190
|
From_Ruby() = default;
|
@@ -106,23 +198,21 @@ namespace Rice::detail
|
|
106
198
|
return rb_type(value) == RUBY_T_STRING;
|
107
199
|
}
|
108
200
|
|
109
|
-
std::
|
201
|
+
std::string_view convert(VALUE value)
|
110
202
|
{
|
111
203
|
if (value == Qnil && this->arg_ && this->arg_->hasDefaultValue())
|
112
204
|
{
|
113
|
-
return this->arg_->defaultValue<std::
|
205
|
+
return this->arg_->defaultValue<std::string_view>();
|
114
206
|
}
|
115
207
|
else
|
116
208
|
{
|
117
209
|
detail::protect(rb_check_type, value, (int)T_STRING);
|
118
|
-
|
119
|
-
return this->converted_;
|
210
|
+
return std::string_view(RSTRING_PTR(value), RSTRING_LEN(value));
|
120
211
|
}
|
121
212
|
}
|
122
213
|
|
123
214
|
private:
|
124
215
|
Arg* arg_ = nullptr;
|
125
|
-
std::string converted_;
|
126
216
|
};
|
127
217
|
}
|
128
218
|
|
@@ -212,7 +302,7 @@ namespace Rice::detail
|
|
212
302
|
{
|
213
303
|
constexpr static bool verify()
|
214
304
|
{
|
215
|
-
return Type<T
|
305
|
+
return Type<intrinsic_type<T>>::verify();
|
216
306
|
}
|
217
307
|
};
|
218
308
|
|
@@ -356,7 +446,7 @@ namespace Rice::detail
|
|
356
446
|
class WrapperSmartPointer : public Wrapper
|
357
447
|
{
|
358
448
|
public:
|
359
|
-
WrapperSmartPointer(SmartPointer_T<Arg_Ts
|
449
|
+
WrapperSmartPointer(SmartPointer_T<Arg_Ts...> data);
|
360
450
|
~WrapperSmartPointer();
|
361
451
|
void* get() override;
|
362
452
|
SmartPointer_T<Arg_Ts...>& data();
|
@@ -376,7 +466,7 @@ namespace Rice::detail
|
|
376
466
|
{
|
377
467
|
// ---- WrapperSmartPointer ------
|
378
468
|
template <template <typename, typename...> typename SmartPointer_T, typename...Arg_Ts>
|
379
|
-
inline WrapperSmartPointer<SmartPointer_T, Arg_Ts...>::WrapperSmartPointer(SmartPointer_T<Arg_Ts
|
469
|
+
inline WrapperSmartPointer<SmartPointer_T, Arg_Ts...>::WrapperSmartPointer(SmartPointer_T<Arg_Ts...> data)
|
380
470
|
: data_(std::move(data))
|
381
471
|
{
|
382
472
|
}
|
@@ -414,6 +504,20 @@ namespace Rice::detail
|
|
414
504
|
}
|
415
505
|
};
|
416
506
|
|
507
|
+
template <typename T>
|
508
|
+
class To_Ruby<std::unique_ptr<T>&>
|
509
|
+
{
|
510
|
+
public:
|
511
|
+
VALUE convert(std::unique_ptr<T>& data)
|
512
|
+
{
|
513
|
+
std::pair<VALUE, rb_data_type_t*> rubyTypeInfo = detail::Registries::instance.types.figureType<T>(*data);
|
514
|
+
|
515
|
+
// Use custom wrapper type
|
516
|
+
using Wrapper_T = WrapperSmartPointer<std::unique_ptr, T>;
|
517
|
+
return detail::wrap<std::unique_ptr<T>, Wrapper_T>(rubyTypeInfo.first, rubyTypeInfo.second, data, true);
|
518
|
+
}
|
519
|
+
};
|
520
|
+
|
417
521
|
template <typename T>
|
418
522
|
class From_Ruby<std::unique_ptr<T>&>
|
419
523
|
{
|
@@ -489,6 +593,20 @@ namespace Rice::detail
|
|
489
593
|
Arg* arg_ = nullptr;
|
490
594
|
};
|
491
595
|
|
596
|
+
template <typename T>
|
597
|
+
class To_Ruby<std::shared_ptr<T>&>
|
598
|
+
{
|
599
|
+
public:
|
600
|
+
VALUE convert(std::shared_ptr<T>& data)
|
601
|
+
{
|
602
|
+
std::pair<VALUE, rb_data_type_t*> rubyTypeInfo = detail::Registries::instance.types.figureType<T>(*data);
|
603
|
+
|
604
|
+
// Use custom wrapper type
|
605
|
+
using Wrapper_T = WrapperSmartPointer<std::shared_ptr, T>;
|
606
|
+
return detail::wrap<std::shared_ptr<T>, Wrapper_T>(rubyTypeInfo.first, rubyTypeInfo.second, data, true);
|
607
|
+
}
|
608
|
+
};
|
609
|
+
|
492
610
|
template <typename T>
|
493
611
|
class From_Ruby<std::shared_ptr<T>&>
|
494
612
|
{
|
@@ -2305,7 +2423,7 @@ namespace Rice
|
|
2305
2423
|
{
|
2306
2424
|
static bool verify()
|
2307
2425
|
{
|
2308
|
-
Type<T
|
2426
|
+
Type<intrinsic_type<T>>::verify();
|
2309
2427
|
|
2310
2428
|
if (!detail::Registries::instance.types.isDefined<std::vector<T>>())
|
2311
2429
|
{
|
data/lib/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
module Rice
|
2
|
-
VERSION = "4.
|
3
|
-
end
|
1
|
+
module Rice
|
2
|
+
VERSION = "4.3.0"
|
3
|
+
end
|