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.
Files changed (237) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +86 -26
  3. data/CMakeLists.txt +31 -0
  4. data/CMakePresets.json +75 -0
  5. data/COPYING +3 -2
  6. data/FindRuby.cmake +437 -0
  7. data/README.md +7 -2
  8. data/Rakefile +12 -5
  9. data/include/rice/rice.hpp +9522 -4426
  10. data/include/rice/stl.hpp +2831 -1198
  11. data/lib/make_rice_headers.rb +79 -0
  12. data/lib/mkmf-rice.rb +40 -94
  13. data/lib/rice/version.rb +3 -0
  14. data/lib/rice.rb +1 -0
  15. data/lib/rubygems/builder.rb +11 -0
  16. data/lib/rubygems/cmake_builder.rb +113 -0
  17. data/lib/rubygems_plugin.rb +9 -0
  18. data/rice/Address_Registration_Guard.hpp +72 -3
  19. data/rice/Arg.hpp +26 -6
  20. data/rice/Arg.ipp +35 -2
  21. data/rice/Buffer.hpp +123 -0
  22. data/rice/Buffer.ipp +599 -0
  23. data/rice/Callback.hpp +21 -0
  24. data/rice/Callback.ipp +13 -0
  25. data/rice/Constructor.hpp +4 -27
  26. data/rice/Constructor.ipp +79 -0
  27. data/rice/Data_Object.hpp +73 -3
  28. data/rice/Data_Object.ipp +388 -96
  29. data/rice/Data_Type.hpp +214 -3
  30. data/rice/Data_Type.ipp +144 -67
  31. data/rice/Director.hpp +0 -2
  32. data/rice/Enum.hpp +4 -7
  33. data/rice/Enum.ipp +102 -55
  34. data/rice/Exception.hpp +62 -2
  35. data/rice/Exception.ipp +7 -12
  36. data/rice/Init.hpp +8 -0
  37. data/rice/Init.ipp +8 -0
  38. data/rice/JumpException.hpp +44 -0
  39. data/rice/JumpException.ipp +48 -0
  40. data/rice/MemoryView.hpp +11 -0
  41. data/rice/MemoryView.ipp +3 -0
  42. data/rice/Return.hpp +7 -27
  43. data/rice/Return.ipp +13 -13
  44. data/rice/cpp_api/Array.hpp +209 -0
  45. data/rice/cpp_api/Array.ipp +304 -0
  46. data/rice/cpp_api/Builtin_Object.hpp +31 -0
  47. data/rice/cpp_api/Builtin_Object.ipp +37 -0
  48. data/rice/cpp_api/Class.hpp +70 -0
  49. data/rice/cpp_api/Class.ipp +97 -0
  50. data/rice/cpp_api/Encoding.hpp +32 -0
  51. data/rice/cpp_api/Encoding.ipp +59 -0
  52. data/rice/cpp_api/Hash.hpp +194 -0
  53. data/rice/cpp_api/Hash.ipp +257 -0
  54. data/rice/{Identifier.hpp → cpp_api/Identifier.hpp} +2 -6
  55. data/rice/{Identifier.ipp → cpp_api/Identifier.ipp} +4 -2
  56. data/rice/cpp_api/Module.hpp +72 -0
  57. data/rice/cpp_api/Module.ipp +101 -0
  58. data/rice/cpp_api/Object.hpp +272 -0
  59. data/rice/cpp_api/Object.ipp +235 -0
  60. data/rice/cpp_api/String.hpp +74 -0
  61. data/rice/cpp_api/String.ipp +120 -0
  62. data/rice/cpp_api/Struct.hpp +113 -0
  63. data/rice/cpp_api/Struct.ipp +92 -0
  64. data/rice/cpp_api/Symbol.hpp +46 -0
  65. data/rice/cpp_api/Symbol.ipp +93 -0
  66. data/rice/cpp_api/shared_methods.hpp +134 -0
  67. data/rice/detail/DefaultHandler.hpp +12 -0
  68. data/rice/detail/DefaultHandler.ipp +8 -0
  69. data/rice/detail/HandlerRegistry.hpp +5 -35
  70. data/rice/detail/HandlerRegistry.ipp +7 -11
  71. data/rice/detail/InstanceRegistry.hpp +1 -4
  72. data/rice/detail/MethodInfo.hpp +12 -10
  73. data/rice/detail/MethodInfo.ipp +26 -21
  74. data/rice/detail/Native.hpp +33 -0
  75. data/rice/detail/Native.ipp +157 -0
  76. data/rice/detail/NativeAttributeGet.hpp +52 -0
  77. data/rice/detail/NativeAttributeGet.ipp +57 -0
  78. data/rice/detail/NativeAttributeSet.hpp +44 -0
  79. data/rice/detail/NativeAttributeSet.ipp +88 -0
  80. data/rice/detail/NativeCallbackFFI.hpp +55 -0
  81. data/rice/detail/NativeCallbackFFI.ipp +151 -0
  82. data/rice/detail/NativeCallbackSimple.hpp +30 -0
  83. data/rice/detail/NativeCallbackSimple.ipp +29 -0
  84. data/rice/detail/NativeFunction.hpp +33 -23
  85. data/rice/detail/NativeFunction.ipp +309 -70
  86. data/rice/detail/NativeIterator.hpp +9 -11
  87. data/rice/detail/NativeIterator.ipp +33 -31
  88. data/rice/detail/NativeRegistry.hpp +24 -15
  89. data/rice/detail/NativeRegistry.ipp +23 -48
  90. data/rice/detail/Proc.hpp +4 -0
  91. data/rice/detail/Proc.ipp +85 -0
  92. data/rice/detail/Registries.hpp +0 -7
  93. data/rice/detail/Registries.ipp +0 -18
  94. data/rice/detail/RubyFunction.hpp +0 -3
  95. data/rice/detail/RubyFunction.ipp +4 -8
  96. data/rice/detail/RubyType.hpp +16 -0
  97. data/rice/detail/RubyType.ipp +232 -0
  98. data/rice/detail/Type.hpp +7 -6
  99. data/rice/detail/Type.ipp +192 -45
  100. data/rice/detail/TypeRegistry.hpp +15 -7
  101. data/rice/detail/TypeRegistry.ipp +105 -12
  102. data/rice/detail/Wrapper.hpp +68 -32
  103. data/rice/detail/Wrapper.ipp +121 -109
  104. data/rice/detail/cpp_protect.hpp +5 -6
  105. data/rice/detail/default_allocation_func.ipp +0 -2
  106. data/rice/detail/from_ruby.hpp +38 -3
  107. data/rice/detail/from_ruby.ipp +1321 -492
  108. data/rice/detail/ruby.hpp +18 -0
  109. data/rice/detail/to_ruby.hpp +41 -3
  110. data/rice/detail/to_ruby.ipp +1424 -194
  111. data/rice/global_function.hpp +0 -4
  112. data/rice/global_function.ipp +0 -1
  113. data/rice/libc/file.hpp +11 -0
  114. data/rice/libc/file.ipp +32 -0
  115. data/rice/rice.hpp +116 -26
  116. data/rice/ruby_mark.hpp +4 -3
  117. data/rice/stl/complex.hpp +6 -0
  118. data/rice/stl/complex.ipp +93 -0
  119. data/rice/stl/exception.hpp +11 -0
  120. data/rice/stl/exception.ipp +29 -0
  121. data/rice/stl/exception_ptr.hpp +6 -0
  122. data/rice/stl/exception_ptr.ipp +27 -0
  123. data/rice/stl/map.hpp +12 -0
  124. data/rice/stl/map.ipp +469 -0
  125. data/rice/stl/monostate.hpp +6 -0
  126. data/rice/stl/monostate.ipp +80 -0
  127. data/rice/stl/multimap.hpp +14 -0
  128. data/rice/stl/multimap.ipp +448 -0
  129. data/rice/stl/optional.hpp +6 -0
  130. data/rice/stl/optional.ipp +118 -0
  131. data/rice/stl/pair.hpp +13 -0
  132. data/rice/stl/pair.ipp +155 -0
  133. data/rice/stl/reference_wrapper.hpp +6 -0
  134. data/rice/stl/reference_wrapper.ipp +41 -0
  135. data/rice/stl/set.hpp +12 -0
  136. data/rice/stl/set.ipp +495 -0
  137. data/rice/stl/shared_ptr.hpp +28 -0
  138. data/rice/stl/shared_ptr.ipp +224 -0
  139. data/rice/stl/string.hpp +6 -0
  140. data/rice/stl/string.ipp +158 -0
  141. data/rice/stl/string_view.hpp +6 -0
  142. data/rice/stl/string_view.ipp +65 -0
  143. data/rice/stl/tuple.hpp +6 -0
  144. data/rice/stl/tuple.ipp +128 -0
  145. data/rice/stl/type_index.hpp +6 -0
  146. data/rice/stl/type_index.ipp +30 -0
  147. data/rice/stl/type_info.hpp +6 -0
  148. data/rice/stl/type_info.ipp +29 -0
  149. data/rice/stl/unique_ptr.hpp +22 -0
  150. data/rice/stl/unique_ptr.ipp +139 -0
  151. data/rice/stl/unordered_map.hpp +12 -0
  152. data/rice/stl/unordered_map.ipp +469 -0
  153. data/rice/stl/variant.hpp +6 -0
  154. data/rice/stl/variant.ipp +242 -0
  155. data/rice/stl/vector.hpp +12 -0
  156. data/rice/stl/vector.ipp +590 -0
  157. data/rice/stl.hpp +11 -3
  158. data/rice/traits/attribute_traits.hpp +26 -0
  159. data/rice/traits/function_traits.hpp +95 -0
  160. data/rice/traits/method_traits.hpp +47 -0
  161. data/rice/traits/rice_traits.hpp +160 -0
  162. data/rice.gemspec +85 -0
  163. data/test/embed_ruby.cpp +7 -1
  164. data/test/extconf.rb +2 -0
  165. data/test/test_Address_Registration_Guard.cpp +5 -0
  166. data/test/test_Array.cpp +18 -4
  167. data/test/test_Attribute.cpp +136 -21
  168. data/test/test_Buffer.cpp +285 -0
  169. data/test/test_Builtin_Object.cpp +5 -0
  170. data/test/test_Callback.cpp +230 -0
  171. data/test/test_Class.cpp +5 -31
  172. data/test/test_Constructor.cpp +69 -6
  173. data/test/test_Data_Object.cpp +97 -38
  174. data/test/test_Data_Type.cpp +470 -65
  175. data/test/test_Director.cpp +17 -8
  176. data/test/test_Enum.cpp +155 -40
  177. data/test/test_Exception.cpp +235 -0
  178. data/test/test_File.cpp +70 -0
  179. data/test/test_From_Ruby.cpp +609 -0
  180. data/test/test_Hash.cpp +5 -0
  181. data/test/test_Identifier.cpp +5 -0
  182. data/test/test_Inheritance.cpp +6 -1
  183. data/test/test_Iterator.cpp +6 -1
  184. data/test/test_Jump_Exception.cpp +23 -0
  185. data/test/test_Keep_Alive.cpp +13 -19
  186. data/test/test_Keep_Alive_No_Wrapper.cpp +5 -1
  187. data/test/test_Memory_Management.cpp +5 -0
  188. data/test/test_Module.cpp +128 -67
  189. data/test/test_Native_Registry.cpp +2 -34
  190. data/test/test_Object.cpp +5 -0
  191. data/test/test_Overloads.cpp +806 -0
  192. data/test/test_Ownership.cpp +160 -54
  193. data/test/test_Proc.cpp +44 -0
  194. data/test/test_Self.cpp +9 -4
  195. data/test/test_Stl_Exception.cpp +109 -0
  196. data/test/test_Stl_Map.cpp +54 -42
  197. data/test/test_Stl_Multimap.cpp +693 -0
  198. data/test/test_Stl_Optional.cpp +5 -0
  199. data/test/test_Stl_Pair.cpp +14 -9
  200. data/test/test_Stl_Reference_Wrapper.cpp +9 -2
  201. data/test/test_Stl_Set.cpp +790 -0
  202. data/test/test_Stl_SharedPtr.cpp +458 -0
  203. data/test/test_Stl_String.cpp +5 -0
  204. data/test/test_Stl_String_View.cpp +5 -0
  205. data/test/test_Stl_Tuple.cpp +116 -0
  206. data/test/test_Stl_Type.cpp +147 -0
  207. data/test/test_Stl_UniquePtr.cpp +202 -0
  208. data/test/test_Stl_Unordered_Map.cpp +43 -38
  209. data/test/test_Stl_Variant.cpp +217 -84
  210. data/test/test_Stl_Vector.cpp +306 -58
  211. data/test/test_String.cpp +5 -0
  212. data/test/test_Struct.cpp +5 -0
  213. data/test/test_Symbol.cpp +5 -0
  214. data/test/test_Template.cpp +192 -0
  215. data/test/test_To_Ruby.cpp +524 -0
  216. data/test/test_Tracking.cpp +1 -0
  217. data/test/test_Type.cpp +171 -0
  218. data/test/test_global_functions.cpp +67 -7
  219. data/test/unittest.cpp +8 -0
  220. metadata +127 -26
  221. data/lib/version.rb +0 -3
  222. data/rice/Address_Registration_Guard_defn.hpp +0 -79
  223. data/rice/Data_Object_defn.hpp +0 -84
  224. data/rice/Data_Type_defn.hpp +0 -190
  225. data/rice/Exception_defn.hpp +0 -68
  226. data/rice/HandlerRegistration.hpp +0 -15
  227. data/rice/detail/ExceptionHandler.hpp +0 -8
  228. data/rice/detail/ExceptionHandler.ipp +0 -28
  229. data/rice/detail/ExceptionHandler_defn.hpp +0 -77
  230. data/rice/detail/Jump_Tag.hpp +0 -21
  231. data/rice/detail/NativeAttribute.hpp +0 -64
  232. data/rice/detail/NativeAttribute.ipp +0 -112
  233. data/rice/detail/from_ruby_defn.hpp +0 -38
  234. data/rice/detail/to_ruby_defn.hpp +0 -48
  235. data/test/test_Jump_Tag.cpp +0 -17
  236. data/test/test_Stl_SmartPointer.cpp +0 -283
  237. data/test/test_To_From_Ruby.cpp +0 -399
@@ -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_
@@ -1,4 +1,3 @@
1
- #include "cpp_api/Module.hpp"
2
1
 
3
2
  template<typename Function_T, typename...Arg_Ts>
4
3
  void Rice::define_global_function(char const * name, Function_T&& func, Arg_Ts const& ...args)
@@ -0,0 +1,11 @@
1
+ #ifndef Rice__libc__file__hpp_
2
+ #define Rice__libc__file__hpp_
3
+
4
+ namespace Rice::libc
5
+ {
6
+ extern Class rb_cLibcFile;
7
+ }
8
+
9
+ #include "file.ipp"
10
+
11
+ #endif // Rice__libc__file__hpp_
@@ -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
- // Traits
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 "Exception_defn.hpp"
13
- #include "detail/Jump_Tag.hpp"
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++ classes for using the Ruby API
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
- #include "cpp_api/Symbol.hpp"
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 involed in creating custom DataTypes (ie, Ruby classes that wrap C++ classes)
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.hpp"
133
+ #include "Data_Type.ipp"
56
134
  #include "detail/default_allocation_func.ipp"
57
- #include "Constructor.hpp"
58
- #include "Data_Object.hpp"
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 ruby_mark__hpp
2
- #define ruby_mark__hpp
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 // ruby_mark__hpp
15
+ #endif // Rice__ruby_mark__hpp_
16
+
@@ -0,0 +1,6 @@
1
+ #ifndef Rice__stl__complex__hpp_
2
+ #define Rice__stl__complex__hpp_
3
+
4
+ #include "complex.ipp"
5
+
6
+ #endif // Rice__stl__complex__hpp_
@@ -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,11 @@
1
+ #ifndef Rice__stl__exception__hpp_
2
+ #define Rice__stl__exception__hpp_
3
+
4
+ namespace Rice::stl
5
+ {
6
+ extern Class rb_cStlException;
7
+ }
8
+
9
+ #include "exception.ipp"
10
+
11
+ #endif // Rice__stl__exception__hpp_
@@ -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,6 @@
1
+ #ifndef Rice__stl__exception_ptr__hpp_
2
+ #define Rice__stl__exception_ptr__hpp_
3
+
4
+ #include "exception_ptr.ipp"
5
+
6
+ #endif // Rice__stl__exception_ptr__hpp_
@@ -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
@@ -0,0 +1,12 @@
1
+ #ifndef Rice__stl__map__hpp_
2
+ #define Rice__stl__map__hpp_
3
+
4
+ namespace Rice
5
+ {
6
+ template<typename K, typename T>
7
+ Data_Type<std::map<K, T>> define_map(std::string name = "");
8
+ }
9
+
10
+ #include "map.ipp"
11
+
12
+ #endif // Rice__stl__map__hpp_