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
data/rice/global_function.hpp
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
#ifndef Rice__global_function__hpp_
|
2
2
|
#define Rice__global_function__hpp_
|
3
3
|
|
4
|
-
#include "Arg.hpp"
|
5
|
-
|
6
4
|
namespace Rice
|
7
5
|
{
|
8
6
|
//! Define an global function
|
@@ -20,6 +18,4 @@ namespace Rice
|
|
20
18
|
void define_global_function(char const * name, Function_T&& func, Arg_Ts const& ...args);
|
21
19
|
} // Rice
|
22
20
|
|
23
|
-
#include "global_function.ipp"
|
24
|
-
|
25
21
|
#endif // Rice__global_function__hpp_
|
data/rice/global_function.ipp
CHANGED
data/rice/libc/file.hpp
ADDED
data/rice/libc/file.ipp
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
#include <exception>
|
2
|
+
|
3
|
+
// Libraries sometime inherit custom exception objects from std::exception,
|
4
|
+
// so define it for Ruby if necessary
|
5
|
+
namespace Rice::libc
|
6
|
+
{
|
7
|
+
inline Class rb_cLibcFile;
|
8
|
+
|
9
|
+
inline void define_libc_file()
|
10
|
+
{
|
11
|
+
Module rb_mRice = define_module("Rice");
|
12
|
+
Module rb_mLibc = define_module_under(rb_mRice, "libc");
|
13
|
+
rb_cLibcFile = define_class_under<FILE>(rb_mLibc, "File");
|
14
|
+
}
|
15
|
+
}
|
16
|
+
|
17
|
+
namespace Rice::detail
|
18
|
+
{
|
19
|
+
template<>
|
20
|
+
struct Type<FILE>
|
21
|
+
{
|
22
|
+
static bool verify()
|
23
|
+
{
|
24
|
+
if (!Data_Type<FILE>::is_defined())
|
25
|
+
{
|
26
|
+
libc::define_libc_file();
|
27
|
+
}
|
28
|
+
|
29
|
+
return true;
|
30
|
+
}
|
31
|
+
};
|
32
|
+
}
|
data/rice/rice.hpp
CHANGED
@@ -1,64 +1,154 @@
|
|
1
1
|
#ifndef Rice__hpp_
|
2
2
|
#define Rice__hpp_
|
3
3
|
|
4
|
-
//
|
4
|
+
// Ruby
|
5
5
|
#include "detail/ruby.hpp"
|
6
|
+
|
7
|
+
// C++ headers -h has to come after Ruby on MacOS for reasons I do not understand
|
8
|
+
#include <cstdio>
|
9
|
+
#include <string>
|
10
|
+
#include <typeinfo>
|
11
|
+
#include <typeindex>
|
12
|
+
|
13
|
+
#ifdef _MSC_VER
|
14
|
+
// Prevent _strdup deprecated message on MSVC
|
15
|
+
#define strdup _strdup
|
16
|
+
#endif
|
17
|
+
|
18
|
+
// Traits
|
6
19
|
#include "traits/rice_traits.hpp"
|
7
20
|
#include "traits/function_traits.hpp"
|
8
21
|
#include "traits/method_traits.hpp"
|
9
22
|
#include "traits/attribute_traits.hpp"
|
10
23
|
|
11
24
|
// Code for C++ to call Ruby
|
12
|
-
#include "
|
13
|
-
#include "
|
25
|
+
#include "Exception.hpp"
|
26
|
+
#include "JumpException.hpp"
|
27
|
+
#include "JumpException.ipp"
|
14
28
|
#include "detail/RubyFunction.hpp"
|
29
|
+
#include "detail/RubyFunction.ipp"
|
30
|
+
#include "detail/to_ruby.hpp"
|
15
31
|
|
16
32
|
// Code for Ruby to call C++
|
17
|
-
#include "detail/ExceptionHandler.hpp"
|
18
|
-
#include "detail/Type.hpp"
|
19
|
-
#include "detail/TypeRegistry.hpp"
|
20
|
-
#include "detail/InstanceRegistry.hpp"
|
21
|
-
#include "detail/HandlerRegistry.hpp"
|
22
|
-
#include "detail/NativeRegistry.hpp"
|
23
|
-
#include "detail/Registries.hpp"
|
24
|
-
#include "detail/cpp_protect.hpp"
|
25
|
-
#include "detail/Wrapper.hpp"
|
26
|
-
#include "Return.hpp"
|
27
33
|
#include "Arg.hpp"
|
34
|
+
#include "Return.hpp"
|
28
35
|
#include "detail/MethodInfo.hpp"
|
29
36
|
#include "detail/from_ruby.hpp"
|
30
|
-
#include "detail/to_ruby.hpp"
|
31
|
-
#include "Identifier.hpp"
|
32
|
-
#include "Exception.ipp"
|
33
|
-
#include "detail/NativeAttribute.hpp"
|
34
|
-
#include "detail/NativeFunction.hpp"
|
35
|
-
#include "detail/NativeIterator.hpp"
|
36
|
-
#include "HandlerRegistration.hpp"
|
37
37
|
|
38
|
-
// C++
|
38
|
+
// C++ API declarations
|
39
|
+
#include "detail/Type.hpp"
|
40
|
+
#include "cpp_api/Encoding.hpp"
|
41
|
+
#include "cpp_api/Identifier.hpp"
|
42
|
+
#include "cpp_api/Identifier.ipp"
|
39
43
|
#include "cpp_api/Object.hpp"
|
40
44
|
#include "cpp_api/Builtin_Object.hpp"
|
41
45
|
#include "cpp_api/String.hpp"
|
46
|
+
#include "cpp_api/Symbol.hpp"
|
42
47
|
#include "cpp_api/Array.hpp"
|
43
48
|
#include "cpp_api/Hash.hpp"
|
44
|
-
|
49
|
+
|
45
50
|
#include "cpp_api/Module.hpp"
|
46
51
|
#include "cpp_api/Class.hpp"
|
52
|
+
|
53
|
+
#include "detail/Native.hpp"
|
54
|
+
#include "detail/NativeAttributeGet.hpp"
|
55
|
+
#include "detail/NativeAttributeSet.hpp"
|
56
|
+
#include "Data_Type.hpp"
|
57
|
+
#include "Data_Object.hpp"
|
58
|
+
|
59
|
+
// Type Conversion declarations
|
60
|
+
#include "detail/RubyType.hpp"
|
61
|
+
#include "detail/RubyType.ipp"
|
62
|
+
#include "detail/Wrapper.hpp"
|
63
|
+
|
64
|
+
// Registries
|
65
|
+
#include "detail/TypeRegistry.hpp"
|
66
|
+
#include "detail/InstanceRegistry.hpp"
|
67
|
+
#include "detail/DefaultHandler.hpp"
|
68
|
+
#include "detail/HandlerRegistry.hpp"
|
69
|
+
#include "detail/NativeRegistry.hpp"
|
70
|
+
#include "detail/Registries.hpp"
|
71
|
+
|
72
|
+
// To / From Ruby
|
73
|
+
#include "Arg.ipp"
|
74
|
+
#include "Return.ipp"
|
75
|
+
#include "Constructor.hpp"
|
76
|
+
#include "Buffer.hpp"
|
77
|
+
#include "Buffer.ipp"
|
78
|
+
#include "detail/to_ruby.ipp"
|
79
|
+
#include "detail/from_ruby.ipp"
|
80
|
+
#include "detail/Proc.hpp"
|
81
|
+
|
82
|
+
// Registries
|
83
|
+
#include "detail/TypeRegistry.ipp"
|
84
|
+
#include "detail/InstanceRegistry.ipp"
|
85
|
+
#include "detail/DefaultHandler.ipp"
|
86
|
+
#include "detail/HandlerRegistry.ipp"
|
87
|
+
#include "detail/NativeRegistry.ipp"
|
88
|
+
#include "detail/Registries.ipp"
|
89
|
+
|
90
|
+
#include "detail/Type.ipp"
|
91
|
+
|
92
|
+
// Code for Ruby to call C++
|
93
|
+
#include "Exception.ipp"
|
94
|
+
#include "detail/cpp_protect.hpp"
|
95
|
+
#include "detail/Wrapper.ipp"
|
96
|
+
#include "detail/MethodInfo.ipp"
|
97
|
+
#include "detail/Native.ipp"
|
98
|
+
#include "detail/NativeAttributeGet.ipp"
|
99
|
+
#include "detail/NativeAttributeSet.ipp"
|
100
|
+
#include "detail/NativeFunction.hpp"
|
101
|
+
#include "detail/NativeFunction.ipp"
|
102
|
+
#include "detail/NativeIterator.hpp"
|
103
|
+
#include "detail/NativeIterator.ipp"
|
104
|
+
#include "detail/NativeCallbackFFI.hpp"
|
105
|
+
#include "detail/NativeCallbackFFI.ipp"
|
106
|
+
#include "detail/NativeCallbackSimple.hpp"
|
107
|
+
#include "detail/NativeCallbackSimple.ipp"
|
108
|
+
#include "detail/Proc.ipp"
|
109
|
+
|
110
|
+
// C++ API definitions
|
111
|
+
#include "cpp_api/Encoding.ipp"
|
112
|
+
#include "cpp_api/Object.ipp"
|
113
|
+
#include "cpp_api/Builtin_Object.ipp"
|
114
|
+
#include "cpp_api/String.ipp"
|
115
|
+
#include "cpp_api/Array.ipp"
|
116
|
+
#include "cpp_api/Hash.ipp"
|
117
|
+
#include "cpp_api/Symbol.ipp"
|
118
|
+
|
119
|
+
#include "cpp_api/Module.ipp"
|
120
|
+
#include "cpp_api/Class.ipp"
|
47
121
|
#include "cpp_api/Struct.hpp"
|
122
|
+
#include "cpp_api/Struct.ipp"
|
123
|
+
|
48
124
|
#include "Address_Registration_Guard.hpp"
|
125
|
+
#include "Address_Registration_Guard.ipp"
|
49
126
|
#include "global_function.hpp"
|
127
|
+
#include "global_function.ipp"
|
50
128
|
|
51
|
-
// Code
|
129
|
+
// Code involved in creating custom DataTypes (ie, Ruby classes that wrap C++ classes)
|
52
130
|
#include "ruby_mark.hpp"
|
53
131
|
#include "detail/default_allocation_func.hpp"
|
54
132
|
#include "Director.hpp"
|
55
|
-
#include "Data_Type.
|
133
|
+
#include "Data_Type.ipp"
|
56
134
|
#include "detail/default_allocation_func.ipp"
|
57
|
-
#include "Constructor.
|
58
|
-
#include "
|
135
|
+
#include "Constructor.ipp"
|
136
|
+
#include "Callback.hpp"
|
137
|
+
#include "Callback.ipp"
|
138
|
+
#include "Data_Object.ipp"
|
59
139
|
#include "Enum.hpp"
|
140
|
+
#include "Enum.ipp"
|
141
|
+
#include "MemoryView.hpp"
|
142
|
+
#include "MemoryView.ipp"
|
60
143
|
|
61
144
|
// Dependent on Module, Class, Array and String
|
62
145
|
#include "forward_declares.ipp"
|
63
146
|
|
147
|
+
// For now include libc support - maybe should be separate header file someday
|
148
|
+
#include "libc/file.hpp"
|
149
|
+
|
150
|
+
// Initialize Rice
|
151
|
+
#include "Init.hpp"
|
152
|
+
#include "Init.ipp"
|
153
|
+
|
64
154
|
#endif // Rice__hpp_
|
data/rice/ruby_mark.hpp
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
#ifndef
|
2
|
-
#define
|
1
|
+
#ifndef Rice__ruby_mark__hpp_
|
2
|
+
#define Rice__ruby_mark__hpp_
|
3
3
|
|
4
4
|
//! Default function to call to mark a data object.
|
5
5
|
/*! This function can be specialized for a particular type to override
|
@@ -12,4 +12,5 @@ namespace Rice
|
|
12
12
|
{
|
13
13
|
}
|
14
14
|
}
|
15
|
-
#endif //
|
15
|
+
#endif // Rice__ruby_mark__hpp_
|
16
|
+
|
@@ -0,0 +1,93 @@
|
|
1
|
+
#include <complex>
|
2
|
+
|
3
|
+
namespace Rice::detail
|
4
|
+
{
|
5
|
+
template<typename T>
|
6
|
+
struct Type<std::complex<T>>
|
7
|
+
{
|
8
|
+
static bool verify()
|
9
|
+
{
|
10
|
+
return true;
|
11
|
+
}
|
12
|
+
};
|
13
|
+
|
14
|
+
template<typename T>
|
15
|
+
class To_Ruby<std::complex<T>>
|
16
|
+
{
|
17
|
+
public:
|
18
|
+
VALUE convert(const std::complex<T>& data)
|
19
|
+
{
|
20
|
+
std::vector<VALUE> args(2);
|
21
|
+
args[0] = To_Ruby<T>().convert(data.real());
|
22
|
+
args[1] = To_Ruby<T>().convert(data.imag());
|
23
|
+
return protect(rb_funcallv, rb_mKernel, rb_intern("Complex"), (int)args.size(), (const VALUE*)args.data());
|
24
|
+
}
|
25
|
+
};
|
26
|
+
|
27
|
+
template<typename T>
|
28
|
+
class To_Ruby<std::complex<T>&>
|
29
|
+
{
|
30
|
+
public:
|
31
|
+
VALUE convert(const std::complex<T>& data)
|
32
|
+
{
|
33
|
+
std::vector<VALUE> args(2);
|
34
|
+
args[0] = To_Ruby<T>().convert(data.real());
|
35
|
+
args[1] = To_Ruby<T>().convert(data.imag());
|
36
|
+
return protect(rb_funcallv, rb_mKernel, rb_intern("Complex"), (int)args.size(), (const VALUE*)args.data());
|
37
|
+
}
|
38
|
+
};
|
39
|
+
|
40
|
+
template<typename T>
|
41
|
+
class From_Ruby<std::complex<T>>
|
42
|
+
{
|
43
|
+
public:
|
44
|
+
Convertible is_convertible(VALUE value)
|
45
|
+
{
|
46
|
+
switch (rb_type(value))
|
47
|
+
{
|
48
|
+
case RUBY_T_COMPLEX:
|
49
|
+
return Convertible::Exact;
|
50
|
+
break;
|
51
|
+
default:
|
52
|
+
return Convertible::None;
|
53
|
+
}
|
54
|
+
}
|
55
|
+
|
56
|
+
std::complex<T> convert(VALUE value)
|
57
|
+
{
|
58
|
+
VALUE real = protect(rb_funcallv, value, rb_intern("real"), 0, (const VALUE*)nullptr);
|
59
|
+
VALUE imaginary = protect(rb_funcallv, value, rb_intern("imaginary"), 0, (const VALUE*)nullptr);
|
60
|
+
|
61
|
+
return std::complex<T>(From_Ruby<T>().convert(real), From_Ruby<T>().convert(imaginary));
|
62
|
+
}
|
63
|
+
};
|
64
|
+
|
65
|
+
template<typename T>
|
66
|
+
class From_Ruby<std::complex<T>&>
|
67
|
+
{
|
68
|
+
public:
|
69
|
+
Convertible is_convertible(VALUE value)
|
70
|
+
{
|
71
|
+
switch (rb_type(value))
|
72
|
+
{
|
73
|
+
case RUBY_T_COMPLEX:
|
74
|
+
return Convertible::Exact;
|
75
|
+
break;
|
76
|
+
default:
|
77
|
+
return Convertible::None;
|
78
|
+
}
|
79
|
+
}
|
80
|
+
|
81
|
+
std::complex<T>& convert(VALUE value)
|
82
|
+
{
|
83
|
+
VALUE real = protect(rb_funcallv, value, rb_intern("real"), 0, (const VALUE*)nullptr);
|
84
|
+
VALUE imaginary = protect(rb_funcallv, value, rb_intern("imaginary"), 0, (const VALUE*)nullptr);
|
85
|
+
this->converted_ = std::complex<T>(From_Ruby<T>().convert(real), From_Ruby<T>().convert(imaginary));
|
86
|
+
|
87
|
+
return this->converted_;
|
88
|
+
}
|
89
|
+
|
90
|
+
private:
|
91
|
+
std::complex<T> converted_;
|
92
|
+
};
|
93
|
+
}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
#include <exception>
|
2
|
+
|
3
|
+
// Libraries sometime inherit custom exception objects from std::exception,
|
4
|
+
// so define it for Ruby if necessary
|
5
|
+
namespace Rice::stl
|
6
|
+
{
|
7
|
+
inline Class rb_cStlException;
|
8
|
+
|
9
|
+
inline void define_stl_exception()
|
10
|
+
{
|
11
|
+
Module rb_mStd = define_module("Std");
|
12
|
+
rb_cStlException = define_class_under<std::exception>(rb_mStd, "Exception", rb_eStandardError).
|
13
|
+
define_constructor(Constructor<std::exception>()).
|
14
|
+
define_method("message", &std::exception::what);
|
15
|
+
}
|
16
|
+
}
|
17
|
+
|
18
|
+
namespace Rice::detail
|
19
|
+
{
|
20
|
+
template<>
|
21
|
+
struct Type<std::exception>
|
22
|
+
{
|
23
|
+
static bool verify()
|
24
|
+
{
|
25
|
+
Rice::stl::define_stl_exception();
|
26
|
+
return true;
|
27
|
+
}
|
28
|
+
};
|
29
|
+
}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#include <exception>
|
2
|
+
|
3
|
+
namespace Rice::stl
|
4
|
+
{
|
5
|
+
inline Data_Type<std::exception_ptr> define_exception_ptr()
|
6
|
+
{
|
7
|
+
Module rb_mStd = define_module("Std");
|
8
|
+
return define_class_under<std::exception_ptr>(rb_mStd, "ExceptionPtr");
|
9
|
+
}
|
10
|
+
}
|
11
|
+
|
12
|
+
namespace Rice::detail
|
13
|
+
{
|
14
|
+
template<>
|
15
|
+
struct Type<std::exception_ptr>
|
16
|
+
{
|
17
|
+
static bool verify()
|
18
|
+
{
|
19
|
+
if (!Data_Type<std::exception_ptr>::is_defined())
|
20
|
+
{
|
21
|
+
stl::define_exception_ptr();
|
22
|
+
}
|
23
|
+
|
24
|
+
return true;
|
25
|
+
}
|
26
|
+
};
|
27
|
+
}
|
data/rice/stl/map.hpp
ADDED