rice 4.6.1 → 4.7.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 (185) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +31 -0
  3. data/CMakeLists.txt +0 -4
  4. data/Rakefile +2 -8
  5. data/bin/rice-doc.rb +212 -0
  6. data/bin/rice-rbs.rb +93 -0
  7. data/include/rice/rice.hpp +4972 -4015
  8. data/include/rice/stl.hpp +822 -294
  9. data/lib/rice/doc/cpp_reference.rb +166 -0
  10. data/lib/rice/doc/doxygen.rb +294 -0
  11. data/lib/rice/doc/mkdocs.rb +298 -0
  12. data/lib/rice/doc/rice.rb +29 -0
  13. data/lib/rice/doc/ruby.rb +37 -0
  14. data/lib/rice/doc.rb +5 -0
  15. data/lib/{make_rice_headers.rb → rice/make_rice_headers.rb} +3 -0
  16. data/lib/rice/native.rb +18 -0
  17. data/lib/rice/native_registry.rb +21 -0
  18. data/lib/rice/parameter.rb +7 -0
  19. data/lib/rice/rbs.rb +104 -0
  20. data/lib/rice/version.rb +1 -1
  21. data/lib/rice.rb +4 -0
  22. data/lib/rubygems/cmake_builder.rb +24 -27
  23. data/rice/Arg.hpp +4 -4
  24. data/rice/Arg.ipp +4 -4
  25. data/rice/Buffer.hpp +32 -28
  26. data/rice/Buffer.ipp +306 -178
  27. data/rice/Data_Object.ipp +101 -82
  28. data/rice/Data_Type.hpp +5 -7
  29. data/rice/Data_Type.ipp +48 -29
  30. data/rice/Enum.ipp +15 -21
  31. data/rice/Function.hpp +17 -0
  32. data/rice/Function.ipp +13 -0
  33. data/rice/Pointer.hpp +15 -0
  34. data/rice/Pointer.ipp +49 -0
  35. data/rice/Return.hpp +1 -1
  36. data/rice/Return.ipp +2 -2
  37. data/rice/api.hpp +30 -0
  38. data/rice/cpp_api/Array.hpp +2 -2
  39. data/rice/cpp_api/Array.ipp +50 -5
  40. data/rice/cpp_api/Class.hpp +0 -5
  41. data/rice/cpp_api/Class.ipp +19 -0
  42. data/rice/cpp_api/Hash.ipp +20 -0
  43. data/rice/cpp_api/Module.hpp +6 -3
  44. data/rice/cpp_api/Module.ipp +49 -11
  45. data/rice/cpp_api/Object.ipp +31 -2
  46. data/rice/cpp_api/String.hpp +1 -2
  47. data/rice/cpp_api/String.ipp +21 -1
  48. data/rice/cpp_api/Struct.ipp +5 -0
  49. data/rice/cpp_api/Symbol.ipp +34 -0
  50. data/rice/cpp_api/shared_methods.hpp +12 -12
  51. data/rice/detail/MethodInfo.hpp +4 -2
  52. data/rice/detail/MethodInfo.ipp +19 -3
  53. data/rice/detail/ModuleRegistry.hpp +18 -0
  54. data/rice/detail/ModuleRegistry.ipp +25 -0
  55. data/rice/detail/Native.hpp +45 -2
  56. data/rice/detail/Native.ipp +196 -2
  57. data/rice/detail/NativeAttributeGet.hpp +9 -4
  58. data/rice/detail/NativeAttributeGet.ipp +65 -11
  59. data/rice/detail/NativeAttributeSet.hpp +4 -0
  60. data/rice/detail/NativeAttributeSet.ipp +30 -2
  61. data/rice/detail/NativeCallbackFFI.ipp +2 -2
  62. data/rice/detail/NativeCallbackSimple.ipp +1 -1
  63. data/rice/detail/NativeFunction.hpp +11 -49
  64. data/rice/detail/NativeFunction.ipp +82 -379
  65. data/rice/detail/NativeInvoker.hpp +74 -0
  66. data/rice/detail/NativeInvoker.ipp +197 -0
  67. data/rice/detail/NativeIterator.hpp +4 -0
  68. data/rice/detail/NativeIterator.ipp +19 -0
  69. data/rice/detail/NativeMethod.hpp +97 -0
  70. data/rice/detail/NativeMethod.ipp +332 -0
  71. data/rice/detail/NativeProc.hpp +51 -0
  72. data/rice/detail/NativeProc.ipp +133 -0
  73. data/rice/detail/NativeRegistry.hpp +8 -0
  74. data/rice/detail/NativeRegistry.ipp +27 -0
  75. data/rice/detail/Parameter.hpp +47 -0
  76. data/rice/detail/Parameter.ipp +105 -0
  77. data/rice/detail/Proc.ipp +14 -13
  78. data/rice/detail/Registries.hpp +1 -0
  79. data/rice/detail/RubyType.hpp +0 -2
  80. data/rice/detail/RubyType.ipp +15 -33
  81. data/rice/detail/Type.hpp +44 -8
  82. data/rice/detail/Type.ipp +151 -49
  83. data/rice/detail/TypeRegistry.hpp +3 -0
  84. data/rice/detail/TypeRegistry.ipp +17 -27
  85. data/rice/detail/Types.ipp +430 -0
  86. data/rice/detail/Wrapper.hpp +12 -0
  87. data/rice/detail/Wrapper.ipp +45 -2
  88. data/rice/detail/from_ruby.ipp +567 -1073
  89. data/rice/detail/ruby.hpp +1 -0
  90. data/rice/detail/to_ruby.ipp +4 -635
  91. data/rice/libc/file.ipp +3 -6
  92. data/rice/rice.hpp +22 -12
  93. data/rice/rice_api/Arg.hpp +7 -0
  94. data/rice/rice_api/Arg.ipp +9 -0
  95. data/rice/rice_api/ModuleRegistry.hpp +7 -0
  96. data/rice/rice_api/ModuleRegistry.ipp +10 -0
  97. data/rice/rice_api/Native.hpp +7 -0
  98. data/rice/rice_api/Native.ipp +52 -0
  99. data/rice/rice_api/NativeRegistry.hpp +7 -0
  100. data/rice/rice_api/NativeRegistry.ipp +21 -0
  101. data/rice/rice_api/Parameter.hpp +7 -0
  102. data/rice/rice_api/Parameter.ipp +11 -0
  103. data/rice/rice_api/Registries.hpp +6 -0
  104. data/rice/rice_api/Registries.ipp +12 -0
  105. data/rice/rice_api/TypeRegistry.hpp +7 -0
  106. data/rice/rice_api/TypeRegistry.ipp +10 -0
  107. data/rice/stl/complex.ipp +35 -0
  108. data/rice/stl/exception.ipp +20 -7
  109. data/rice/stl/filesystem.hpp +6 -0
  110. data/rice/stl/filesystem.ipp +34 -0
  111. data/rice/stl/map.ipp +13 -21
  112. data/rice/stl/monostate.ipp +37 -1
  113. data/rice/stl/multimap.ipp +17 -24
  114. data/rice/stl/optional.ipp +47 -2
  115. data/rice/stl/pair.ipp +23 -58
  116. data/rice/stl/reference_wrapper.ipp +22 -1
  117. data/rice/stl/set.ipp +17 -9
  118. data/rice/stl/shared_ptr.ipp +44 -17
  119. data/rice/stl/string.ipp +175 -7
  120. data/rice/stl/string_view.ipp +5 -0
  121. data/rice/stl/tuple.ipp +38 -9
  122. data/rice/stl/unique_ptr.ipp +46 -2
  123. data/rice/stl/unordered_map.ipp +13 -21
  124. data/rice/stl/variant.ipp +47 -11
  125. data/rice/stl/vector.ipp +183 -104
  126. data/rice/stl.hpp +1 -0
  127. data/rice/traits/function_traits.hpp +2 -2
  128. data/rice/traits/method_traits.hpp +5 -16
  129. data/rice/traits/rice_traits.hpp +24 -4
  130. data/rice.gemspec +11 -22
  131. data/test/embed_ruby.cpp +0 -3
  132. data/test/test_Array.cpp +38 -38
  133. data/test/test_Attribute.cpp +187 -2
  134. data/test/test_Buffer.cpp +302 -26
  135. data/test/test_Callback.cpp +2 -3
  136. data/test/test_Class.cpp +5 -5
  137. data/test/test_Data_Object.cpp +0 -55
  138. data/test/test_Data_Type.cpp +19 -30
  139. data/test/test_Enum.cpp +4 -46
  140. data/test/test_From_Ruby.cpp +88 -81
  141. data/test/test_GVL.cpp +109 -0
  142. data/test/test_Iterator.cpp +1 -1
  143. data/test/test_Keep_Alive_No_Wrapper.cpp +5 -3
  144. data/test/test_Module.cpp +8 -9
  145. data/test/test_Object.cpp +1 -1
  146. data/test/test_Overloads.cpp +3 -3
  147. data/test/test_Stl_Map.cpp +8 -8
  148. data/test/test_Stl_Multimap.cpp +4 -4
  149. data/test/test_Stl_Pair.cpp +5 -3
  150. data/test/test_Stl_SharedPtr.cpp +24 -12
  151. data/test/test_Stl_Tuple.cpp +1 -1
  152. data/test/test_Stl_UniquePtr.cpp +8 -0
  153. data/test/test_Stl_Unordered_Map.cpp +9 -9
  154. data/test/test_Stl_Variant.cpp +9 -3
  155. data/test/test_Stl_Vector.cpp +118 -13
  156. data/test/test_To_Ruby.cpp +35 -28
  157. data/test/test_Type.cpp +256 -53
  158. data/test/unittest.hpp +35 -0
  159. metadata +66 -34
  160. data/rice/Init.hpp +0 -8
  161. data/rice/Init.ipp +0 -8
  162. data/rice/detail/RubyFunction.hpp +0 -31
  163. data/rice/detail/RubyFunction.ipp +0 -77
  164. data/sample/callbacks/extconf.rb +0 -5
  165. data/sample/callbacks/sample_callbacks.cpp +0 -35
  166. data/sample/callbacks/test.rb +0 -28
  167. data/sample/enum/extconf.rb +0 -5
  168. data/sample/enum/sample_enum.cpp +0 -40
  169. data/sample/enum/test.rb +0 -8
  170. data/sample/inheritance/animals.cpp +0 -82
  171. data/sample/inheritance/extconf.rb +0 -5
  172. data/sample/inheritance/test.rb +0 -7
  173. data/sample/map/extconf.rb +0 -5
  174. data/sample/map/map.cpp +0 -73
  175. data/sample/map/test.rb +0 -7
  176. data/test/ext/t1/Foo.hpp +0 -10
  177. data/test/ext/t1/extconf.rb +0 -4
  178. data/test/ext/t1/t1.cpp +0 -13
  179. data/test/ext/t2/extconf.rb +0 -4
  180. data/test/ext/t2/t2.cpp +0 -11
  181. data/test/ruby/test_callbacks_sample.rb +0 -28
  182. data/test/ruby/test_multiple_extensions.rb +0 -18
  183. data/test/ruby/test_multiple_extensions_same_class.rb +0 -14
  184. data/test/ruby/test_multiple_extensions_with_inheritance.rb +0 -20
  185. /data/test/{test_Stl_Type.cpp → test_Stl_Type_Info.cpp} +0 -0
data/rice/Arg.ipp CHANGED
@@ -70,14 +70,14 @@ namespace Rice
70
70
  return this->isOwner_;
71
71
  }
72
72
 
73
- inline Arg& Arg::setArray()
73
+ inline Arg& Arg::setBuffer()
74
74
  {
75
- this->isArray_ = true;
75
+ this->isBuffer_ = true;
76
76
  return *this;
77
77
  }
78
78
 
79
- inline bool Arg::isArray()
79
+ inline bool Arg::isBuffer()
80
80
  {
81
- return this->isArray_;
81
+ return this->isBuffer_;
82
82
  }
83
83
  } // Rice
data/rice/Buffer.hpp CHANGED
@@ -7,14 +7,13 @@ namespace Rice
7
7
  class Buffer;
8
8
 
9
9
  template<typename T>
10
- class Buffer<T, std::enable_if_t<!std::is_pointer_v<T>>>
10
+ class Buffer<T, std::enable_if_t<!std::is_pointer_v<T> && !std::is_void_v<T>>>
11
11
  {
12
12
  public:
13
- using Element_T = T;
14
-
15
13
  Buffer(T* pointer);
16
14
  Buffer(T* pointer, size_t size);
17
15
  Buffer(VALUE value);
16
+ Buffer(VALUE value, size_t size);
18
17
 
19
18
  ~Buffer();
20
19
 
@@ -27,10 +26,9 @@ namespace Rice
27
26
 
28
27
  T* ptr();
29
28
  T& reference();
30
- void release();
29
+ T* release();
31
30
 
32
31
  size_t size() const;
33
- void setSize(size_t value);
34
32
 
35
33
  // Ruby API
36
34
  VALUE toString() const;
@@ -45,24 +43,24 @@ namespace Rice
45
43
  void setOwner(bool value);
46
44
 
47
45
  private:
48
- void fromBuiltinType(VALUE value);
49
- void fromWrappedType(VALUE value);
46
+ void fromBuiltinType(VALUE value, size_t size);
47
+ void fromWrappedType(VALUE value, size_t size);
50
48
 
51
49
  bool m_owner = false;
52
50
  size_t m_size = 0;
53
- // std::unique_ptr would be greate but std::unique_ptr<void> isn't allowed
54
- T* m_buffer = nullptr;
51
+ // std::unique_ptr would be great but std::unique_ptr<void> isn't allowed. Mutable is needed to
52
+ // support const T* buffers
53
+ mutable T* m_buffer = nullptr;
55
54
  };
56
55
 
57
56
  template<typename T>
58
57
  class Buffer<T*, std::enable_if_t<!detail::is_wrapped_v<T>>>
59
58
  {
60
59
  public:
61
- using Element_T = Buffer<T>;
62
-
63
60
  Buffer(T** pointer);
64
61
  Buffer(T** pointer, size_t size);
65
62
  Buffer(VALUE value);
63
+ Buffer(VALUE value, size_t size);
66
64
 
67
65
  ~Buffer();
68
66
 
@@ -72,13 +70,12 @@ namespace Rice
72
70
  Buffer& operator=(const Buffer& other) = delete;
73
71
  Buffer& operator=(Buffer&& other);
74
72
 
75
- Element_T& operator[](size_t index);
73
+ T* operator[](size_t index);
76
74
 
77
75
  T** ptr();
78
- void release();
76
+ T** release();
79
77
 
80
78
  size_t size() const;
81
- void setSize(size_t value);
82
79
 
83
80
  // Ruby API
84
81
  VALUE toString() const;
@@ -95,19 +92,17 @@ namespace Rice
95
92
  private:
96
93
  bool m_owner = false;
97
94
  size_t m_size = 0;
98
- T** m_outer = nullptr;
99
- std::vector<Buffer<T>> m_inner;
95
+ T** m_buffer = nullptr;
100
96
  };
101
97
 
102
98
  template<typename T>
103
99
  class Buffer<T*, std::enable_if_t<detail::is_wrapped_v<T>>>
104
100
  {
105
101
  public:
106
- using Element_T = T*;
107
-
108
102
  Buffer(T** pointer);
109
103
  Buffer(T** pointer, size_t size);
110
104
  Buffer(VALUE value);
105
+ Buffer(VALUE value, size_t size);
111
106
 
112
107
  ~Buffer();
113
108
 
@@ -117,13 +112,12 @@ namespace Rice
117
112
  Buffer& operator=(const Buffer& other) = delete;
118
113
  Buffer& operator=(Buffer&& other);
119
114
 
120
- Element_T& operator[](size_t index);
115
+ T* operator[](size_t index);
121
116
 
122
117
  T** ptr();
123
- void release();
118
+ T** release();
124
119
 
125
120
  size_t size() const;
126
- void setSize(size_t value);
127
121
 
128
122
  // Ruby API
129
123
  VALUE toString() const;
@@ -143,26 +137,36 @@ namespace Rice
143
137
  T** m_buffer = nullptr;
144
138
  };
145
139
 
146
- template<>
147
- class Buffer<void>
140
+ template<typename T>
141
+ class Buffer<T, std::enable_if_t<std::is_void_v<T>>>
148
142
  {
149
143
  public:
150
- Buffer(void* pointer);
144
+ Buffer(T* pointer);
145
+ Buffer(VALUE value);
146
+ Buffer(VALUE value, size_t size);
147
+
151
148
  Buffer(const Buffer& other) = delete;
152
149
  Buffer(Buffer&& other);
153
150
 
154
151
  Buffer& operator=(const Buffer& other) = delete;
155
152
  Buffer& operator=(Buffer&& other);
156
153
 
157
- void* ptr();
154
+ size_t size() const;
155
+
156
+ VALUE bytes(size_t count) const;
157
+ VALUE bytes() const;
158
+
159
+ T* ptr();
160
+ T* release();
158
161
 
159
162
  private:
160
- void* m_buffer = nullptr;
163
+ bool m_owner = false;
164
+ size_t m_size = 0;
165
+ T* m_buffer = nullptr;
161
166
  };
162
167
 
163
168
  template<typename T>
164
169
  Data_Type<Buffer<T>> define_buffer(std::string klassName = "");
165
-
166
- void define_fundamental_buffer_types();
167
170
  }
171
+
168
172
  #endif // Rice__Buffer__hpp_