rice 3.0.0 → 4.0.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 +121 -0
  3. data/CONTRIBUTORS.md +19 -0
  4. data/Gemfile +3 -0
  5. data/README.md +44 -1025
  6. data/Rakefile +95 -12
  7. data/include/rice/rice.hpp +7766 -0
  8. data/lib/mkmf-rice.rb +127 -0
  9. data/lib/version.rb +3 -0
  10. data/rice/Address_Registration_Guard.ipp +75 -32
  11. data/rice/Address_Registration_Guard_defn.hpp +60 -56
  12. data/rice/Arg.hpp +80 -4
  13. data/rice/Arg.ipp +51 -0
  14. data/rice/Constructor.hpp +12 -14
  15. data/rice/Data_Object.ipp +234 -107
  16. data/rice/Data_Object_defn.hpp +77 -117
  17. data/rice/Data_Type.hpp +1 -2
  18. data/rice/Data_Type.ipp +251 -295
  19. data/rice/Data_Type_defn.hpp +175 -243
  20. data/rice/Director.hpp +11 -6
  21. data/rice/Enum.hpp +54 -104
  22. data/rice/Enum.ipp +104 -230
  23. data/rice/Exception.hpp +2 -8
  24. data/rice/Exception.ipp +65 -0
  25. data/rice/Exception_defn.hpp +46 -47
  26. data/rice/Identifier.hpp +28 -28
  27. data/rice/Identifier.ipp +23 -27
  28. data/rice/Return.hpp +39 -0
  29. data/rice/Return.ipp +33 -0
  30. data/rice/detail/Exception_Handler.ipp +22 -62
  31. data/rice/detail/Exception_Handler_defn.hpp +76 -91
  32. data/rice/detail/Iterator.hpp +18 -88
  33. data/rice/detail/Iterator.ipp +47 -0
  34. data/rice/detail/Jump_Tag.hpp +21 -0
  35. data/rice/detail/MethodInfo.hpp +44 -0
  36. data/rice/detail/MethodInfo.ipp +78 -0
  37. data/rice/detail/NativeAttribute.hpp +53 -0
  38. data/rice/detail/NativeAttribute.ipp +83 -0
  39. data/rice/detail/NativeFunction.hpp +69 -0
  40. data/rice/detail/NativeFunction.ipp +248 -0
  41. data/rice/detail/RubyFunction.hpp +39 -0
  42. data/rice/detail/RubyFunction.ipp +92 -0
  43. data/rice/detail/Type.hpp +29 -0
  44. data/rice/detail/Type.ipp +138 -0
  45. data/rice/detail/TypeRegistry.hpp +50 -0
  46. data/rice/detail/TypeRegistry.ipp +106 -0
  47. data/rice/detail/Wrapper.hpp +51 -0
  48. data/rice/detail/Wrapper.ipp +151 -0
  49. data/rice/detail/default_allocation_func.hpp +8 -19
  50. data/rice/detail/default_allocation_func.ipp +9 -8
  51. data/rice/detail/from_ruby.hpp +2 -37
  52. data/rice/detail/from_ruby.ipp +1020 -46
  53. data/rice/detail/from_ruby_defn.hpp +38 -0
  54. data/rice/detail/function_traits.hpp +124 -0
  55. data/rice/detail/method_data.hpp +23 -15
  56. data/rice/detail/method_data.ipp +53 -0
  57. data/rice/detail/rice_traits.hpp +116 -0
  58. data/rice/detail/ruby.hpp +9 -46
  59. data/rice/detail/to_ruby.hpp +3 -17
  60. data/rice/detail/to_ruby.ipp +409 -31
  61. data/rice/detail/to_ruby_defn.hpp +48 -0
  62. data/rice/forward_declares.ipp +82 -0
  63. data/rice/global_function.hpp +16 -20
  64. data/rice/global_function.ipp +8 -17
  65. data/rice/rice.hpp +59 -0
  66. data/rice/ruby_mark.hpp +5 -3
  67. data/rice/ruby_try_catch.hpp +4 -4
  68. data/rice/stl.hpp +11 -0
  69. data/sample/callbacks/extconf.rb +3 -0
  70. data/sample/callbacks/sample_callbacks.cpp +10 -13
  71. data/sample/enum/extconf.rb +3 -0
  72. data/sample/enum/sample_enum.cpp +3 -17
  73. data/sample/enum/test.rb +2 -2
  74. data/sample/inheritance/animals.cpp +8 -24
  75. data/sample/inheritance/extconf.rb +3 -0
  76. data/sample/inheritance/test.rb +1 -1
  77. data/sample/map/extconf.rb +3 -0
  78. data/sample/map/map.cpp +10 -18
  79. data/sample/map/test.rb +1 -1
  80. data/test/embed_ruby.cpp +18 -5
  81. data/test/ext/t1/extconf.rb +3 -0
  82. data/test/ext/t1/t1.cpp +1 -3
  83. data/test/ext/t2/extconf.rb +3 -0
  84. data/test/ext/t2/t2.cpp +1 -1
  85. data/test/extconf.rb +23 -0
  86. data/test/ruby/test_callbacks_sample.rb +28 -0
  87. data/test/ruby/test_multiple_extensions.rb +18 -0
  88. data/test/ruby/test_multiple_extensions_same_class.rb +14 -0
  89. data/test/ruby/test_multiple_extensions_with_inheritance.rb +20 -0
  90. data/test/test_Address_Registration_Guard.cpp +23 -10
  91. data/test/test_Array.cpp +129 -73
  92. data/test/test_Attribute.cpp +147 -0
  93. data/test/test_Builtin_Object.cpp +34 -14
  94. data/test/test_Class.cpp +149 -275
  95. data/test/test_Constructor.cpp +10 -9
  96. data/test/test_Data_Object.cpp +133 -192
  97. data/test/test_Data_Type.cpp +322 -252
  98. data/test/test_Director.cpp +54 -41
  99. data/test/test_Enum.cpp +228 -103
  100. data/test/test_Exception.cpp +5 -6
  101. data/test/test_Hash.cpp +31 -30
  102. data/test/test_Identifier.cpp +4 -5
  103. data/test/test_Inheritance.cpp +221 -0
  104. data/test/test_Iterator.cpp +161 -0
  105. data/test/test_Jump_Tag.cpp +1 -1
  106. data/test/test_Keep_Alive.cpp +161 -0
  107. data/test/test_Memory_Management.cpp +2 -4
  108. data/test/test_Module.cpp +167 -110
  109. data/test/test_Object.cpp +41 -21
  110. data/test/test_Ownership.cpp +275 -0
  111. data/test/test_Self.cpp +205 -0
  112. data/test/test_Stl_Optional.cpp +90 -0
  113. data/test/test_Stl_Pair.cpp +144 -0
  114. data/test/test_Stl_SmartPointer.cpp +200 -0
  115. data/test/test_Stl_String.cpp +74 -0
  116. data/test/test_Stl_Vector.cpp +652 -0
  117. data/test/test_String.cpp +1 -2
  118. data/test/test_Struct.cpp +29 -39
  119. data/test/test_Symbol.cpp +1 -2
  120. data/test/test_To_From_Ruby.cpp +249 -285
  121. data/test/test_global_functions.cpp +39 -19
  122. data/test/unittest.hpp +0 -4
  123. metadata +63 -139
  124. data/Doxyfile +0 -2268
  125. data/Makefile.am +0 -26
  126. data/Makefile.in +0 -931
  127. data/README.mingw +0 -8
  128. data/aclocal.m4 +0 -1085
  129. data/ax_cxx_compile_stdcxx.m4 +0 -951
  130. data/bootstrap +0 -8
  131. data/config.guess +0 -1421
  132. data/config.sub +0 -1807
  133. data/configure +0 -7792
  134. data/configure.ac +0 -55
  135. data/depcomp +0 -791
  136. data/doxygen.ac +0 -314
  137. data/doxygen.am +0 -186
  138. data/extconf.rb +0 -70
  139. data/install-sh +0 -501
  140. data/missing +0 -215
  141. data/post-autoconf.rb +0 -22
  142. data/post-automake.rb +0 -28
  143. data/rice/Address_Registration_Guard.cpp +0 -22
  144. data/rice/Arg_impl.hpp +0 -129
  145. data/rice/Arg_operators.cpp +0 -21
  146. data/rice/Arg_operators.hpp +0 -19
  147. data/rice/Array.hpp +0 -214
  148. data/rice/Array.ipp +0 -256
  149. data/rice/Builtin_Object.hpp +0 -8
  150. data/rice/Builtin_Object.ipp +0 -50
  151. data/rice/Builtin_Object_defn.hpp +0 -50
  152. data/rice/Class.cpp +0 -57
  153. data/rice/Class.hpp +0 -8
  154. data/rice/Class.ipp +0 -6
  155. data/rice/Class_defn.hpp +0 -84
  156. data/rice/Data_Type.cpp +0 -54
  157. data/rice/Data_Type_fwd.hpp +0 -12
  158. data/rice/Director.cpp +0 -13
  159. data/rice/Exception.cpp +0 -54
  160. data/rice/Exception_Base.hpp +0 -8
  161. data/rice/Exception_Base.ipp +0 -13
  162. data/rice/Exception_Base_defn.hpp +0 -27
  163. data/rice/Hash.hpp +0 -230
  164. data/rice/Hash.ipp +0 -329
  165. data/rice/Identifier.cpp +0 -8
  166. data/rice/Jump_Tag.hpp +0 -24
  167. data/rice/Makefile.am +0 -121
  168. data/rice/Makefile.in +0 -884
  169. data/rice/Module.cpp +0 -84
  170. data/rice/Module.hpp +0 -8
  171. data/rice/Module.ipp +0 -6
  172. data/rice/Module_defn.hpp +0 -88
  173. data/rice/Module_impl.hpp +0 -281
  174. data/rice/Module_impl.ipp +0 -345
  175. data/rice/Object.cpp +0 -169
  176. data/rice/Object.hpp +0 -8
  177. data/rice/Object.ipp +0 -33
  178. data/rice/Object_defn.hpp +0 -214
  179. data/rice/Require_Guard.hpp +0 -21
  180. data/rice/String.cpp +0 -89
  181. data/rice/String.hpp +0 -91
  182. data/rice/Struct.cpp +0 -117
  183. data/rice/Struct.hpp +0 -162
  184. data/rice/Struct.ipp +0 -26
  185. data/rice/Symbol.cpp +0 -25
  186. data/rice/Symbol.hpp +0 -66
  187. data/rice/Symbol.ipp +0 -44
  188. data/rice/config.hpp +0 -47
  189. data/rice/config.hpp.in +0 -46
  190. data/rice/detail/Arguments.hpp +0 -118
  191. data/rice/detail/Auto_Function_Wrapper.hpp +0 -898
  192. data/rice/detail/Auto_Function_Wrapper.ipp +0 -3181
  193. data/rice/detail/Auto_Member_Function_Wrapper.hpp +0 -897
  194. data/rice/detail/Auto_Member_Function_Wrapper.ipp +0 -2501
  195. data/rice/detail/Caster.hpp +0 -103
  196. data/rice/detail/Not_Copyable.hpp +0 -25
  197. data/rice/detail/Wrapped_Function.hpp +0 -33
  198. data/rice/detail/cfp.hpp +0 -24
  199. data/rice/detail/cfp.ipp +0 -51
  200. data/rice/detail/check_ruby_type.cpp +0 -27
  201. data/rice/detail/check_ruby_type.hpp +0 -23
  202. data/rice/detail/creation_funcs.hpp +0 -37
  203. data/rice/detail/creation_funcs.ipp +0 -36
  204. data/rice/detail/define_method_and_auto_wrap.hpp +0 -31
  205. data/rice/detail/define_method_and_auto_wrap.ipp +0 -30
  206. data/rice/detail/demangle.cpp +0 -56
  207. data/rice/detail/demangle.hpp +0 -19
  208. data/rice/detail/env.hpp +0 -11
  209. data/rice/detail/method_data.cpp +0 -92
  210. data/rice/detail/node.hpp +0 -13
  211. data/rice/detail/protect.cpp +0 -29
  212. data/rice/detail/protect.hpp +0 -34
  213. data/rice/detail/ruby_version_code.hpp +0 -6
  214. data/rice/detail/ruby_version_code.hpp.in +0 -6
  215. data/rice/detail/st.hpp +0 -22
  216. data/rice/detail/win32.hpp +0 -16
  217. data/rice/detail/wrap_function.hpp +0 -66
  218. data/rice/protect.hpp +0 -38
  219. data/rice/protect.ipp +0 -1134
  220. data/rice/rubypp.rb +0 -97
  221. data/rice/to_from_ruby.hpp +0 -8
  222. data/rice/to_from_ruby.ipp +0 -418
  223. data/rice/to_from_ruby_defn.hpp +0 -70
  224. data/ruby.ac +0 -135
  225. data/ruby/Makefile.am +0 -1
  226. data/ruby/Makefile.in +0 -628
  227. data/ruby/lib/Makefile.am +0 -3
  228. data/ruby/lib/Makefile.in +0 -506
  229. data/ruby/lib/mkmf-rice.rb.in +0 -217
  230. data/ruby/lib/version.rb +0 -3
  231. data/sample/Makefile.am +0 -53
  232. data/sample/Makefile.in +0 -495
  233. data/test/Makefile.am +0 -73
  234. data/test/Makefile.in +0 -1219
  235. data/test/ext/Makefile.am +0 -41
  236. data/test/ext/Makefile.in +0 -483
  237. data/test/test_rice.rb +0 -45
data/rice/Exception.hpp CHANGED
@@ -1,13 +1,7 @@
1
1
  #ifndef Rice__Exception__hpp_
2
2
  #define Rice__Exception__hpp_
3
3
 
4
- namespace Rice {
5
- class Exception;
6
- }
7
-
8
4
  #include "Exception_defn.hpp"
9
- #include "Exception_Base.hpp"
10
- #include "Address_Registration_Guard.hpp"
11
-
12
- #endif // Rice__Exception__hpp_
5
+ #include "Exception.ipp"
13
6
 
7
+ #endif // Rice__Exception__hpp_
@@ -0,0 +1,65 @@
1
+ #ifndef Rice__Exception__ipp_
2
+ #define Rice__Exception__ipp_
3
+
4
+ #include "detail/from_ruby.hpp"
5
+
6
+ namespace Rice
7
+ {
8
+ inline Exception::Exception(VALUE exception) : exception_(exception)
9
+ {
10
+ }
11
+
12
+ template <typename... Arg_Ts>
13
+ inline Exception::Exception(const Exception& other, char const* fmt, Arg_Ts&&...args)
14
+ : Exception(other.class_of(), fmt, std::forward<Arg_Ts>(args)...)
15
+ {
16
+ }
17
+
18
+ template <typename... Arg_Ts>
19
+ inline Exception::Exception(const VALUE exceptionClass, char const* fmt, Arg_Ts&&...args)
20
+ {
21
+ #ifdef __GNUC__
22
+ #pragma GCC diagnostic push
23
+ #pragma GCC diagnostic ignored "-Wformat-security"
24
+ #endif
25
+
26
+ size_t size = std::snprintf(nullptr, 0, fmt, std::forward<Arg_Ts>(args)...);
27
+ this->message_ = std::string(size, '\0');
28
+
29
+ // size+1 avoids truncating the string. Otherwise snprintf writes n - 1 characters
30
+ // to allow space for null character but we don't need that since std::string
31
+ // will add a null character internally at n + 1
32
+ std::snprintf(&this->message_[0], size + 1, fmt, std::forward<Arg_Ts>(args)...);
33
+
34
+ #ifdef __GNUC__
35
+ #pragma GCC diagnostic pop
36
+ #endif
37
+
38
+ // Now create the Ruby exception
39
+ this->exception_ = detail::protect(rb_exc_new2, exceptionClass, this->message_.c_str());
40
+ }
41
+
42
+ inline char const* Exception::what() const noexcept
43
+ {
44
+ if (this->message_.empty())
45
+ {
46
+ // Cache the message - this allows the returned pointer to be valid for the
47
+ // lifetime of this exception instance.
48
+ VALUE rubyMessage = rb_funcall(this->exception_, rb_intern("message"), 0);
49
+ //this->message_ = detail::From_Ruby<std::string>::convert(rubyMessage);
50
+ this->message_ = std::string(RSTRING_PTR(rubyMessage), RSTRING_LEN(rubyMessage));
51
+ }
52
+ return this->message_.c_str();
53
+ }
54
+
55
+ inline VALUE Exception::class_of() const
56
+ {
57
+ return detail::protect(rb_class_of, this->exception_);
58
+ }
59
+
60
+ inline VALUE Exception::value() const
61
+ {
62
+ return this->exception_;
63
+ }
64
+ }
65
+ #endif // Rice__Exception__ipp_
@@ -1,69 +1,68 @@
1
1
  #ifndef Rice__Exception_defn__hpp_
2
2
  #define Rice__Exception_defn__hpp_
3
3
 
4
- #include "Exception_Base_defn.hpp"
5
- #include "String.hpp"
6
- #include "Address_Registration_Guard_defn.hpp"
7
-
8
4
  #include <stdexcept>
9
5
  #include "detail/ruby.hpp"
10
6
 
11
7
  namespace Rice
12
8
  {
9
+ //! A placeholder for Ruby exceptions.
10
+ /*! You can use this to safely throw a Ruby exception using C++ syntax:
11
+ * \code
12
+ * VALUE foo(VALUE self) {
13
+ * RUBY_TRY {
14
+ * throw Rice::Exception(rb_eMyException, "uh oh!");
15
+ * RUBY_CATCH
16
+ * }
17
+ * \endcode
18
+ */
19
+ class Exception
20
+ : public std::exception
21
+ {
22
+ public:
23
+ //! Construct a Exception with a Ruby exception instance
24
+ explicit Exception(VALUE exception);
13
25
 
14
- //! A placeholder for Ruby exceptions.
15
- /*! You can use this to safely throw a Ruby exception using C++ syntax:
16
- * \code
17
- * VALUE foo(VALUE self) {
18
- * RUBY_TRY {
19
- * throw Rice::Exception(rb_eMyException, "uh oh!");
20
- * RUBY_CATCH
21
- * }
22
- * \endcode
23
- */
24
- class Exception
25
- : public Exception_Base
26
- {
27
- public:
28
- //! Construct a Exception with the exception e.
29
- explicit Exception(VALUE e);
30
-
31
- //! Copy constructor.
32
- Exception(Exception const & other);
26
+ //! Construct a Exception with printf-style formatting.
27
+ /*! \param exc either an exception object or a class that inherits
28
+ * from Exception.
29
+ * \param fmt a printf-style format string
30
+ * \param ... the arguments to the format string.
31
+ */
32
+ template <typename... Arg_Ts>
33
+ Exception(const Exception& other, char const* fmt, Arg_Ts&&...args);
33
34
 
34
- //! Construct a Exception with printf-style formatting.
35
+ //! Construct a Exception with printf-style formatting.
35
36
  /*! \param exc either an exception object or a class that inherits
36
37
  * from Exception.
37
38
  * \param fmt a printf-style format string
38
39
  * \param ... the arguments to the format string.
39
40
  */
40
- Exception(Object exc, char const * fmt, ...);
41
+ template <typename... Arg_Ts>
42
+ Exception(const VALUE exceptionType, char const* fmt, Arg_Ts&&...args);
41
43
 
42
- //! Destructor
43
- virtual ~Exception() throw() { }
44
+ //! Destructor
45
+ virtual ~Exception() noexcept = default;
44
46
 
45
- //! Get the message the exception holds
46
- /*! \return the result of calling message() on the underlying
47
- * exception object.
48
- */
49
- String message() const;
47
+ //! Get message as a char const *.
48
+ /*! If message is a non-string object, then this function will attempt
49
+ * to throw an exception (which it can't do because of the no-throw
50
+ * specification).
51
+ * \return the underlying C pointer of the underlying message object.
52
+ */
53
+ virtual char const* what() const noexcept override;
50
54
 
51
- //! Get message as a char const *.
52
- /*! If message is a non-string object, then this function will attempt
53
- * to throw an exception (which it can't do because of the no-throw
54
- * specification).
55
- * \return the underlying C pointer of the underlying message object.
56
- */
57
- virtual char const * what() const throw();
55
+ //! Returns the Ruby exception class
56
+ VALUE class_of() const;
58
57
 
59
- private:
60
- // Keep message around in case someone calls what() and then the GC
61
- // gets invoked.
62
- mutable VALUE message_;
63
- Address_Registration_Guard message_guard_;
64
- };
58
+ //! Returns an instance of a Ruby exception
59
+ VALUE value() const;
65
60
 
61
+ private:
62
+ // TODO: Do we need to tell the Ruby gc about an exception instance?
63
+ mutable VALUE exception_ = Qnil;
64
+ mutable std::string message_;
65
+ };
66
66
  } // namespace Rice
67
67
 
68
- #endif // Rice__Exception_defn__hpp_
69
-
68
+ #endif // Rice__Exception_defn__hpp_
data/rice/Identifier.hpp CHANGED
@@ -1,48 +1,48 @@
1
1
  #ifndef Rice__Identifier__hpp_
2
2
  #define Rice__Identifier__hpp_
3
3
 
4
- #include "detail/ruby.hpp"
5
4
  #include <string>
6
5
 
7
6
  namespace Rice
8
7
  {
8
+ class Symbol;
9
9
 
10
- class Symbol;
10
+ //! A wrapper for the ID type
11
+ /*! An ID is ruby's internal representation of a Symbol object.
12
+ */
13
+ class Identifier
14
+ {
15
+ public:
16
+ //! Construct a new Identifier from an ID.
17
+ Identifier(ID id);
11
18
 
12
- //! A wrapper for the ID type
13
- /*! An ID is ruby's internal representation of a Symbol object.
14
- */
15
- class Identifier
16
- {
17
- public:
18
- //! Construct a new Identifier from an ID.
19
- Identifier(ID id);
20
-
21
- //! Construct a new Identifier from a Symbol.
22
- Identifier(Symbol const & symbol);
19
+ //! Construct a new Identifier from a Symbol.
20
+ Identifier(Symbol const& symbol);
23
21
 
24
- //! Construct a new Identifier from a string.
25
- Identifier(char const * s = "");
22
+ //! Construct a new Identifier from a c string.
23
+ Identifier(char const* s);
26
24
 
27
- //! Return a string representation of the Identifier.
28
- char const * c_str() const;
25
+ //! Construct a new Identifier from a string.
26
+ Identifier(std::string const string);
29
27
 
30
- //! Return a string representation of the Identifier.
31
- std::string str() const;
28
+ //! Return a string representation of the Identifier.
29
+ char const* c_str() const;
32
30
 
33
- //! Return the underlying ID
34
- ID id() const { return id_; }
31
+ //! Return a string representation of the Identifier.
32
+ std::string str() const;
35
33
 
36
- //! Return the underlying ID
37
- operator ID() const { return id_; }
34
+ //! Return the underlying ID
35
+ ID id() const { return id_; }
38
36
 
39
- //! Return the ID as a Symbol
40
- VALUE to_sym() const;
37
+ //! Return the underlying ID
38
+ operator ID() const { return id_; }
41
39
 
42
- private:
43
- ID id_;
44
- };
40
+ //! Return the ID as a Symbol
41
+ VALUE to_sym() const;
45
42
 
43
+ private:
44
+ ID id_;
45
+ };
46
46
  } // namespace Rice
47
47
 
48
48
  #include "Identifier.ipp"
data/rice/Identifier.ipp CHANGED
@@ -1,33 +1,29 @@
1
- inline Rice::Identifier::
2
- Identifier(ID id)
3
- : id_(id)
1
+ namespace Rice
4
2
  {
5
- }
3
+ inline Identifier::Identifier(ID id) : id_(id)
4
+ {
5
+ }
6
6
 
7
- inline Rice::Identifier::
8
- Identifier(char const * s)
9
- : id_(rb_intern(s))
10
- {
11
- }
7
+ inline Identifier::Identifier(char const* s) : id_(rb_intern(s))
8
+ {
9
+ }
12
10
 
13
- inline char const *
14
- Rice::Identifier::
15
- c_str() const
16
- {
17
- return rb_id2name(id_);
18
- }
11
+ inline Identifier::Identifier(std::string const s) : id_(rb_intern(s.c_str()))
12
+ {
13
+ }
19
14
 
20
- inline std::string
21
- Rice::Identifier::
22
- str() const
23
- {
24
- return c_str();
25
- }
15
+ inline char const* Identifier::c_str() const
16
+ {
17
+ return detail::protect(rb_id2name, id_);
18
+ }
26
19
 
27
- inline VALUE
28
- Rice::Identifier::
29
- to_sym() const
30
- {
31
- return ID2SYM(id_);
32
- }
20
+ inline std::string Identifier::str() const
21
+ {
22
+ return c_str();
23
+ }
33
24
 
25
+ inline VALUE Identifier::to_sym() const
26
+ {
27
+ return ID2SYM(id_);
28
+ }
29
+ }
data/rice/Return.hpp ADDED
@@ -0,0 +1,39 @@
1
+ #ifndef Rice__Return__hpp_
2
+ #define Rice__Return__hpp_
3
+
4
+ #include <any>
5
+
6
+ namespace Rice
7
+ {
8
+ //! Helper for defining Return argument of a method
9
+
10
+ class Return
11
+ {
12
+ public:
13
+ //! Specifies Ruby should take ownership of the returned value
14
+ Return& takeOwnership();
15
+
16
+ //! Does Ruby own the returned value?
17
+ bool isOwner();
18
+
19
+ //! Specifies the returned value is a Ruby value
20
+ Return& isValue();
21
+
22
+ //! Is the returned value a Ruby value?
23
+ bool getIsValue();
24
+
25
+ //! Tell the returned object to keep alive the receving object
26
+ Return& keepAlive();
27
+
28
+ public:
29
+ bool isKeepAlive = false;
30
+
31
+ private:
32
+ bool isOwner_ = false;
33
+ bool isValue_ = false;
34
+ };
35
+ } // Rice
36
+
37
+ #include "Return.ipp"
38
+
39
+ #endif // Rice__Return__hpp_
data/rice/Return.ipp ADDED
@@ -0,0 +1,33 @@
1
+ #include <any>
2
+ #include <string>
3
+
4
+ namespace Rice
5
+ {
6
+ inline Return& Return::takeOwnership()
7
+ {
8
+ this->isOwner_ = true;
9
+ return *this;
10
+ }
11
+
12
+ inline bool Return::isOwner()
13
+ {
14
+ return this->isOwner_;
15
+ }
16
+
17
+ inline Return& Return::isValue()
18
+ {
19
+ this->isValue_ = true;
20
+ return *this;
21
+ }
22
+
23
+ inline bool Return::getIsValue()
24
+ {
25
+ return this->isValue_;
26
+ }
27
+
28
+ inline Return& Return::keepAlive()
29
+ {
30
+ this->isKeepAlive = true;
31
+ return *this;
32
+ }
33
+ } // Rice
@@ -1,68 +1,28 @@
1
- #include "../Data_Type_defn.hpp"
2
-
3
- inline
4
- Rice::detail::Exception_Handler::
5
- Exception_Handler(
6
- Data_Object<Exception_Handler> next_exception_handler)
7
- : next_exception_handler_(next_exception_handler)
8
- , next_exception_handler_guard_(&next_exception_handler_)
9
- {
10
- }
11
-
12
- inline
13
- Rice::detail::Exception_Handler::
14
- ~Exception_Handler()
15
- {
16
- }
17
-
18
- inline
19
- VALUE
20
- Rice::detail::Exception_Handler::
21
- call_next_exception_handler() const
22
- {
23
- return next_exception_handler_->handle_exception();
24
- }
25
-
26
- inline Rice::detail::Default_Exception_Handler::
27
- Default_Exception_Handler()
28
- : Exception_Handler(
29
- Data_Object<Exception_Handler>(0, rb_cObject))
30
- {
31
- }
32
-
33
- inline
34
- VALUE
35
- Rice::detail::Default_Exception_Handler::
36
- handle_exception() const
1
+ namespace Rice::detail
37
2
  {
38
- throw;
39
- }
40
-
41
- template <typename Exception_T, typename Functor_T>
42
- inline
43
- Rice::detail::Functor_Exception_Handler<Exception_T, Functor_T>::
44
- Functor_Exception_Handler(
45
- Functor_T handler,
46
- Data_Object<Exception_Handler> next_exception_handler)
47
- : Exception_Handler(next_exception_handler)
48
- , handler_(handler)
49
- {
50
- }
51
-
52
- template <typename Exception_T, typename Functor_T>
53
- inline
54
- VALUE
55
- Rice::detail::Functor_Exception_Handler<Exception_T, Functor_T>::
56
- handle_exception() const
57
- {
58
- try
3
+ inline VALUE Rice::detail::Default_Exception_Handler::handle_exception() const
59
4
  {
60
- return call_next_exception_handler();
5
+ throw;
61
6
  }
62
- catch(Exception_T const & ex)
7
+
8
+ template <typename Exception_T, typename Functor_T>
9
+ inline Rice::detail::Functor_Exception_Handler<Exception_T, Functor_T>::
10
+ Functor_Exception_Handler(Functor_T handler, std::shared_ptr<Exception_Handler> next_exception_handler)
11
+ : handler_(handler), next_exception_handler_(next_exception_handler)
63
12
  {
64
- handler_(ex);
65
- throw;
66
13
  }
67
- }
68
14
 
15
+ template <typename Exception_T, typename Functor_T>
16
+ inline VALUE Rice::detail::Functor_Exception_Handler<Exception_T, Functor_T>::handle_exception() const
17
+ {
18
+ try
19
+ {
20
+ return this->next_exception_handler_->handle_exception();
21
+ }
22
+ catch (Exception_T const& ex)
23
+ {
24
+ handler_(ex);
25
+ throw;
26
+ }
27
+ }
28
+ }