rice 4.3.3 → 4.6.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 +86 -26
- data/CMakeLists.txt +31 -0
- data/CMakePresets.json +75 -0
- data/COPYING +3 -2
- data/FindRuby.cmake +437 -0
- data/README.md +7 -2
- data/Rakefile +12 -5
- data/include/rice/rice.hpp +9522 -4426
- data/include/rice/stl.hpp +2831 -1198
- data/lib/make_rice_headers.rb +79 -0
- data/lib/mkmf-rice.rb +40 -94
- data/lib/rice/version.rb +3 -0
- data/lib/rice.rb +1 -0
- data/lib/rubygems/builder.rb +11 -0
- data/lib/rubygems/cmake_builder.rb +113 -0
- data/lib/rubygems_plugin.rb +9 -0
- data/rice/Address_Registration_Guard.hpp +72 -3
- data/rice/Arg.hpp +26 -6
- data/rice/Arg.ipp +35 -2
- data/rice/Buffer.hpp +123 -0
- data/rice/Buffer.ipp +599 -0
- data/rice/Callback.hpp +21 -0
- data/rice/Callback.ipp +13 -0
- data/rice/Constructor.hpp +4 -27
- data/rice/Constructor.ipp +79 -0
- data/rice/Data_Object.hpp +73 -3
- data/rice/Data_Object.ipp +388 -96
- data/rice/Data_Type.hpp +214 -3
- data/rice/Data_Type.ipp +144 -67
- data/rice/Director.hpp +0 -2
- data/rice/Enum.hpp +4 -7
- data/rice/Enum.ipp +102 -55
- data/rice/Exception.hpp +62 -2
- data/rice/Exception.ipp +7 -12
- data/rice/Init.hpp +8 -0
- data/rice/Init.ipp +8 -0
- data/rice/JumpException.hpp +44 -0
- data/rice/JumpException.ipp +48 -0
- data/rice/MemoryView.hpp +11 -0
- data/rice/MemoryView.ipp +3 -0
- data/rice/Return.hpp +7 -27
- data/rice/Return.ipp +13 -13
- data/rice/cpp_api/Array.hpp +209 -0
- data/rice/cpp_api/Array.ipp +304 -0
- data/rice/cpp_api/Builtin_Object.hpp +31 -0
- data/rice/cpp_api/Builtin_Object.ipp +37 -0
- data/rice/cpp_api/Class.hpp +70 -0
- data/rice/cpp_api/Class.ipp +97 -0
- data/rice/cpp_api/Encoding.hpp +32 -0
- data/rice/cpp_api/Encoding.ipp +59 -0
- data/rice/cpp_api/Hash.hpp +194 -0
- data/rice/cpp_api/Hash.ipp +257 -0
- data/rice/{Identifier.hpp → cpp_api/Identifier.hpp} +2 -6
- data/rice/{Identifier.ipp → cpp_api/Identifier.ipp} +4 -2
- data/rice/cpp_api/Module.hpp +72 -0
- data/rice/cpp_api/Module.ipp +101 -0
- data/rice/cpp_api/Object.hpp +272 -0
- data/rice/cpp_api/Object.ipp +235 -0
- data/rice/cpp_api/String.hpp +74 -0
- data/rice/cpp_api/String.ipp +120 -0
- data/rice/cpp_api/Struct.hpp +113 -0
- data/rice/cpp_api/Struct.ipp +92 -0
- data/rice/cpp_api/Symbol.hpp +46 -0
- data/rice/cpp_api/Symbol.ipp +93 -0
- data/rice/cpp_api/shared_methods.hpp +134 -0
- data/rice/detail/DefaultHandler.hpp +12 -0
- data/rice/detail/DefaultHandler.ipp +8 -0
- data/rice/detail/HandlerRegistry.hpp +5 -35
- data/rice/detail/HandlerRegistry.ipp +7 -11
- data/rice/detail/InstanceRegistry.hpp +1 -4
- data/rice/detail/MethodInfo.hpp +12 -10
- data/rice/detail/MethodInfo.ipp +26 -21
- data/rice/detail/Native.hpp +33 -0
- data/rice/detail/Native.ipp +157 -0
- data/rice/detail/NativeAttributeGet.hpp +52 -0
- data/rice/detail/NativeAttributeGet.ipp +57 -0
- data/rice/detail/NativeAttributeSet.hpp +44 -0
- data/rice/detail/NativeAttributeSet.ipp +88 -0
- data/rice/detail/NativeCallbackFFI.hpp +55 -0
- data/rice/detail/NativeCallbackFFI.ipp +151 -0
- data/rice/detail/NativeCallbackSimple.hpp +30 -0
- data/rice/detail/NativeCallbackSimple.ipp +29 -0
- data/rice/detail/NativeFunction.hpp +33 -23
- data/rice/detail/NativeFunction.ipp +309 -70
- data/rice/detail/NativeIterator.hpp +9 -11
- data/rice/detail/NativeIterator.ipp +33 -31
- data/rice/detail/NativeRegistry.hpp +24 -15
- data/rice/detail/NativeRegistry.ipp +23 -48
- data/rice/detail/Proc.hpp +4 -0
- data/rice/detail/Proc.ipp +85 -0
- data/rice/detail/Registries.hpp +0 -7
- data/rice/detail/Registries.ipp +0 -18
- data/rice/detail/RubyFunction.hpp +0 -3
- data/rice/detail/RubyFunction.ipp +4 -8
- data/rice/detail/RubyType.hpp +16 -0
- data/rice/detail/RubyType.ipp +232 -0
- data/rice/detail/Type.hpp +7 -6
- data/rice/detail/Type.ipp +192 -45
- data/rice/detail/TypeRegistry.hpp +15 -7
- data/rice/detail/TypeRegistry.ipp +105 -12
- data/rice/detail/Wrapper.hpp +68 -32
- data/rice/detail/Wrapper.ipp +121 -109
- data/rice/detail/cpp_protect.hpp +5 -6
- data/rice/detail/default_allocation_func.ipp +0 -2
- data/rice/detail/from_ruby.hpp +38 -3
- data/rice/detail/from_ruby.ipp +1321 -492
- data/rice/detail/ruby.hpp +18 -0
- data/rice/detail/to_ruby.hpp +41 -3
- data/rice/detail/to_ruby.ipp +1424 -194
- data/rice/global_function.hpp +0 -4
- data/rice/global_function.ipp +0 -1
- data/rice/libc/file.hpp +11 -0
- data/rice/libc/file.ipp +32 -0
- data/rice/rice.hpp +116 -26
- data/rice/ruby_mark.hpp +4 -3
- data/rice/stl/complex.hpp +6 -0
- data/rice/stl/complex.ipp +93 -0
- data/rice/stl/exception.hpp +11 -0
- data/rice/stl/exception.ipp +29 -0
- data/rice/stl/exception_ptr.hpp +6 -0
- data/rice/stl/exception_ptr.ipp +27 -0
- data/rice/stl/map.hpp +12 -0
- data/rice/stl/map.ipp +469 -0
- data/rice/stl/monostate.hpp +6 -0
- data/rice/stl/monostate.ipp +80 -0
- data/rice/stl/multimap.hpp +14 -0
- data/rice/stl/multimap.ipp +448 -0
- data/rice/stl/optional.hpp +6 -0
- data/rice/stl/optional.ipp +118 -0
- data/rice/stl/pair.hpp +13 -0
- data/rice/stl/pair.ipp +155 -0
- data/rice/stl/reference_wrapper.hpp +6 -0
- data/rice/stl/reference_wrapper.ipp +41 -0
- data/rice/stl/set.hpp +12 -0
- data/rice/stl/set.ipp +495 -0
- data/rice/stl/shared_ptr.hpp +28 -0
- data/rice/stl/shared_ptr.ipp +224 -0
- data/rice/stl/string.hpp +6 -0
- data/rice/stl/string.ipp +158 -0
- data/rice/stl/string_view.hpp +6 -0
- data/rice/stl/string_view.ipp +65 -0
- data/rice/stl/tuple.hpp +6 -0
- data/rice/stl/tuple.ipp +128 -0
- data/rice/stl/type_index.hpp +6 -0
- data/rice/stl/type_index.ipp +30 -0
- data/rice/stl/type_info.hpp +6 -0
- data/rice/stl/type_info.ipp +29 -0
- data/rice/stl/unique_ptr.hpp +22 -0
- data/rice/stl/unique_ptr.ipp +139 -0
- data/rice/stl/unordered_map.hpp +12 -0
- data/rice/stl/unordered_map.ipp +469 -0
- data/rice/stl/variant.hpp +6 -0
- data/rice/stl/variant.ipp +242 -0
- data/rice/stl/vector.hpp +12 -0
- data/rice/stl/vector.ipp +590 -0
- data/rice/stl.hpp +11 -3
- data/rice/traits/attribute_traits.hpp +26 -0
- data/rice/traits/function_traits.hpp +95 -0
- data/rice/traits/method_traits.hpp +47 -0
- data/rice/traits/rice_traits.hpp +160 -0
- data/rice.gemspec +85 -0
- data/test/embed_ruby.cpp +7 -1
- data/test/extconf.rb +2 -0
- data/test/test_Address_Registration_Guard.cpp +5 -0
- data/test/test_Array.cpp +18 -4
- data/test/test_Attribute.cpp +136 -21
- data/test/test_Buffer.cpp +285 -0
- data/test/test_Builtin_Object.cpp +5 -0
- data/test/test_Callback.cpp +230 -0
- data/test/test_Class.cpp +5 -31
- data/test/test_Constructor.cpp +69 -6
- data/test/test_Data_Object.cpp +97 -38
- data/test/test_Data_Type.cpp +470 -65
- data/test/test_Director.cpp +17 -8
- data/test/test_Enum.cpp +155 -40
- data/test/test_Exception.cpp +235 -0
- data/test/test_File.cpp +70 -0
- data/test/test_From_Ruby.cpp +609 -0
- data/test/test_Hash.cpp +5 -0
- data/test/test_Identifier.cpp +5 -0
- data/test/test_Inheritance.cpp +6 -1
- data/test/test_Iterator.cpp +6 -1
- data/test/test_Jump_Exception.cpp +23 -0
- data/test/test_Keep_Alive.cpp +13 -19
- data/test/test_Keep_Alive_No_Wrapper.cpp +5 -1
- data/test/test_Memory_Management.cpp +5 -0
- data/test/test_Module.cpp +128 -67
- data/test/test_Native_Registry.cpp +2 -34
- data/test/test_Object.cpp +5 -0
- data/test/test_Overloads.cpp +806 -0
- data/test/test_Ownership.cpp +160 -54
- data/test/test_Proc.cpp +44 -0
- data/test/test_Self.cpp +9 -4
- data/test/test_Stl_Exception.cpp +109 -0
- data/test/test_Stl_Map.cpp +54 -42
- data/test/test_Stl_Multimap.cpp +693 -0
- data/test/test_Stl_Optional.cpp +5 -0
- data/test/test_Stl_Pair.cpp +14 -9
- data/test/test_Stl_Reference_Wrapper.cpp +9 -2
- data/test/test_Stl_Set.cpp +790 -0
- data/test/test_Stl_SharedPtr.cpp +458 -0
- data/test/test_Stl_String.cpp +5 -0
- data/test/test_Stl_String_View.cpp +5 -0
- data/test/test_Stl_Tuple.cpp +116 -0
- data/test/test_Stl_Type.cpp +147 -0
- data/test/test_Stl_UniquePtr.cpp +202 -0
- data/test/test_Stl_Unordered_Map.cpp +43 -38
- data/test/test_Stl_Variant.cpp +217 -84
- data/test/test_Stl_Vector.cpp +306 -58
- data/test/test_String.cpp +5 -0
- data/test/test_Struct.cpp +5 -0
- data/test/test_Symbol.cpp +5 -0
- data/test/test_Template.cpp +192 -0
- data/test/test_To_Ruby.cpp +524 -0
- data/test/test_Tracking.cpp +1 -0
- data/test/test_Type.cpp +171 -0
- data/test/test_global_functions.cpp +67 -7
- data/test/unittest.cpp +8 -0
- metadata +127 -26
- data/lib/version.rb +0 -3
- data/rice/Address_Registration_Guard_defn.hpp +0 -79
- data/rice/Data_Object_defn.hpp +0 -84
- data/rice/Data_Type_defn.hpp +0 -190
- data/rice/Exception_defn.hpp +0 -68
- data/rice/HandlerRegistration.hpp +0 -15
- data/rice/detail/ExceptionHandler.hpp +0 -8
- data/rice/detail/ExceptionHandler.ipp +0 -28
- data/rice/detail/ExceptionHandler_defn.hpp +0 -77
- data/rice/detail/Jump_Tag.hpp +0 -21
- data/rice/detail/NativeAttribute.hpp +0 -64
- data/rice/detail/NativeAttribute.ipp +0 -112
- data/rice/detail/from_ruby_defn.hpp +0 -38
- data/rice/detail/to_ruby_defn.hpp +0 -48
- data/test/test_Jump_Tag.cpp +0 -17
- data/test/test_Stl_SmartPointer.cpp +0 -283
- data/test/test_To_From_Ruby.cpp +0 -399
@@ -0,0 +1,79 @@
|
|
1
|
+
namespace Rice
|
2
|
+
{
|
3
|
+
template<typename T, typename...Arg_Ts>
|
4
|
+
class Constructor
|
5
|
+
{
|
6
|
+
public:
|
7
|
+
static constexpr std::size_t arity = sizeof...(Arg_Ts);
|
8
|
+
|
9
|
+
static constexpr bool isCopyConstructor()
|
10
|
+
{
|
11
|
+
if constexpr (arity == 1)
|
12
|
+
{
|
13
|
+
using Arg_Types = std::tuple<Arg_Ts...>;
|
14
|
+
using First_Arg_T = std::tuple_element_t<0, Arg_Types>;
|
15
|
+
return (arity == 1 &&
|
16
|
+
std::is_lvalue_reference_v<First_Arg_T> &&
|
17
|
+
std::is_same_v<T, detail::intrinsic_type<First_Arg_T>>);
|
18
|
+
}
|
19
|
+
else
|
20
|
+
{
|
21
|
+
return false;
|
22
|
+
}
|
23
|
+
}
|
24
|
+
|
25
|
+
static constexpr bool isMoveConstructor()
|
26
|
+
{
|
27
|
+
if constexpr (arity == 1)
|
28
|
+
{
|
29
|
+
using Arg_Types = std::tuple<Arg_Ts...>;
|
30
|
+
using First_Arg_T = std::tuple_element_t<0, Arg_Types>;
|
31
|
+
return (arity == 1 &&
|
32
|
+
std::is_rvalue_reference_v<First_Arg_T> &&
|
33
|
+
std::is_same_v<T, detail::intrinsic_type<First_Arg_T>>);
|
34
|
+
}
|
35
|
+
else
|
36
|
+
{
|
37
|
+
return false;
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
static void initialize(VALUE self, Arg_Ts...args)
|
42
|
+
{
|
43
|
+
// Call C++ constructor
|
44
|
+
T* data = new T(args...);
|
45
|
+
detail::wrapConstructed<T>(self, Data_Type<T>::ruby_data_type(), data, true);
|
46
|
+
}
|
47
|
+
|
48
|
+
static void initialize_copy(VALUE self, const T& other)
|
49
|
+
{
|
50
|
+
// Call C++ copy constructor
|
51
|
+
T* data = new T(other);
|
52
|
+
detail::wrapConstructed<T>(self, Data_Type<T>::ruby_data_type(), data, true);
|
53
|
+
}
|
54
|
+
|
55
|
+
};
|
56
|
+
|
57
|
+
//! Special-case Constructor used when defining Directors.
|
58
|
+
template<typename T, typename...Arg_Ts>
|
59
|
+
class Constructor<T, Object, Arg_Ts...>
|
60
|
+
{
|
61
|
+
public:
|
62
|
+
static constexpr bool isCopyConstructor()
|
63
|
+
{
|
64
|
+
return false;
|
65
|
+
}
|
66
|
+
|
67
|
+
static constexpr bool isMoveConstructor()
|
68
|
+
{
|
69
|
+
return false;
|
70
|
+
}
|
71
|
+
|
72
|
+
static void initialize(Object self, Arg_Ts...args)
|
73
|
+
{
|
74
|
+
// Call C++ constructor
|
75
|
+
T* data = new T(self, args...);
|
76
|
+
detail::wrapConstructed<T>(self.value(), Data_Type<T>::ruby_data_type(), data, true);
|
77
|
+
}
|
78
|
+
};
|
79
|
+
}
|
data/rice/Data_Object.hpp
CHANGED
@@ -1,8 +1,78 @@
|
|
1
1
|
#ifndef Rice__Data_Object__hpp_
|
2
2
|
#define Rice__Data_Object__hpp_
|
3
3
|
|
4
|
-
|
5
|
-
|
4
|
+
/*! \file
|
5
|
+
* \brief Provides a helper class for wrapping and unwrapping C++
|
6
|
+
* objects as Ruby objects.
|
7
|
+
*/
|
6
8
|
|
7
|
-
|
9
|
+
namespace Rice
|
10
|
+
{
|
11
|
+
//! A smartpointer-like wrapper for Ruby data objects.
|
12
|
+
/*! A data object is a ruby object of type T_DATA, which is usually
|
13
|
+
* created by using the Data_Wrap_Struct or Data_Make_Struct macro.
|
14
|
+
* This class wraps creation of the data structure, providing a
|
15
|
+
* type-safe object-oriented interface to the underlying C interface.
|
16
|
+
* This class works in conjunction with the Data_Type class to ensure
|
17
|
+
* type safety.
|
18
|
+
*
|
19
|
+
* Example:
|
20
|
+
* \code
|
21
|
+
* class Foo { };
|
22
|
+
* ...
|
23
|
+
* Data_Type<Foo> rb_cFoo = define_class("Foo");
|
24
|
+
* ...
|
25
|
+
* // Wrap:
|
26
|
+
* Data_Object<Foo> foo1(new Foo);
|
27
|
+
*
|
28
|
+
* // Get value to return:
|
29
|
+
* VALUE v = foo1.value()
|
30
|
+
*
|
31
|
+
* // Unwrap:
|
32
|
+
* Data_Object<Foo> foo2(v, rb_cFoo);
|
33
|
+
* \endcode
|
34
|
+
*/
|
35
|
+
template<typename T>
|
36
|
+
class Data_Object : public Object
|
37
|
+
{
|
38
|
+
static_assert(!std::is_pointer_v<T>);
|
39
|
+
static_assert(!std::is_reference_v<T>);
|
40
|
+
static_assert(!std::is_const_v<T>);
|
41
|
+
static_assert(!std::is_volatile_v<T>);
|
42
|
+
static_assert(!std::is_void_v<T>);
|
43
|
+
|
44
|
+
public:
|
45
|
+
//! Wrap a C++ object.
|
46
|
+
/*! This constructor is analogous to calling Data_Wrap_Struct. Be
|
47
|
+
* careful not to call this function more than once for the same
|
48
|
+
* pointer (in general, it should only be called for newly
|
49
|
+
* constructed objects that need to be managed by Ruby's garbage
|
50
|
+
* collector).
|
51
|
+
* \param obj the object to wrap.
|
52
|
+
* \param isOwner Should the Data_Object take ownership of the object?
|
53
|
+
* \param klass the Ruby class to use for the newly created Ruby
|
54
|
+
* object.
|
55
|
+
*/
|
56
|
+
Data_Object(T* obj, bool isOwner = false, Class klass = Data_Type<T>::klass());
|
57
|
+
Data_Object(T& obj, bool isOwner = false, Class klass = Data_Type<T>::klass());
|
58
|
+
Data_Object(T&& obj, Class klass = Data_Type<T>::klass());
|
59
|
+
Data_Object(const T& obj, bool isOwner = false, Class klass = Data_Type<T>::klass());
|
60
|
+
|
61
|
+
//! Unwrap a Ruby object.
|
62
|
+
/*! This constructor is analogous to calling Data_Get_Struct. Uses
|
63
|
+
* Data_Type<T>::klass as the class of the object.
|
64
|
+
* \param value the Ruby object to unwrap.
|
65
|
+
*/
|
66
|
+
Data_Object(Object value);
|
67
|
+
Data_Object(VALUE value);
|
8
68
|
|
69
|
+
T& operator*() const; //!< Return a reference to obj_
|
70
|
+
T* operator->() const; //!< Return a pointer to obj_
|
71
|
+
T* get() const; //!< Return a pointer to obj_
|
72
|
+
|
73
|
+
private:
|
74
|
+
static void check_ruby_type(VALUE value);
|
75
|
+
};
|
76
|
+
} // namespace Rice
|
77
|
+
|
78
|
+
#endif // Rice__Data_Object__hpp_
|