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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +121 -0
- data/CONTRIBUTORS.md +19 -0
- data/Gemfile +3 -0
- data/README.md +44 -1025
- data/Rakefile +95 -12
- data/include/rice/rice.hpp +7766 -0
- data/lib/mkmf-rice.rb +127 -0
- data/lib/version.rb +3 -0
- data/rice/Address_Registration_Guard.ipp +75 -32
- data/rice/Address_Registration_Guard_defn.hpp +60 -56
- data/rice/Arg.hpp +80 -4
- data/rice/Arg.ipp +51 -0
- data/rice/Constructor.hpp +12 -14
- data/rice/Data_Object.ipp +234 -107
- data/rice/Data_Object_defn.hpp +77 -117
- data/rice/Data_Type.hpp +1 -2
- data/rice/Data_Type.ipp +251 -295
- data/rice/Data_Type_defn.hpp +175 -243
- data/rice/Director.hpp +11 -6
- data/rice/Enum.hpp +54 -104
- data/rice/Enum.ipp +104 -230
- data/rice/Exception.hpp +2 -8
- data/rice/Exception.ipp +65 -0
- data/rice/Exception_defn.hpp +46 -47
- data/rice/Identifier.hpp +28 -28
- data/rice/Identifier.ipp +23 -27
- data/rice/Return.hpp +39 -0
- data/rice/Return.ipp +33 -0
- data/rice/detail/Exception_Handler.ipp +22 -62
- data/rice/detail/Exception_Handler_defn.hpp +76 -91
- data/rice/detail/Iterator.hpp +18 -88
- data/rice/detail/Iterator.ipp +47 -0
- data/rice/detail/Jump_Tag.hpp +21 -0
- data/rice/detail/MethodInfo.hpp +44 -0
- data/rice/detail/MethodInfo.ipp +78 -0
- data/rice/detail/NativeAttribute.hpp +53 -0
- data/rice/detail/NativeAttribute.ipp +83 -0
- data/rice/detail/NativeFunction.hpp +69 -0
- data/rice/detail/NativeFunction.ipp +248 -0
- data/rice/detail/RubyFunction.hpp +39 -0
- data/rice/detail/RubyFunction.ipp +92 -0
- data/rice/detail/Type.hpp +29 -0
- data/rice/detail/Type.ipp +138 -0
- data/rice/detail/TypeRegistry.hpp +50 -0
- data/rice/detail/TypeRegistry.ipp +106 -0
- data/rice/detail/Wrapper.hpp +51 -0
- data/rice/detail/Wrapper.ipp +151 -0
- data/rice/detail/default_allocation_func.hpp +8 -19
- data/rice/detail/default_allocation_func.ipp +9 -8
- data/rice/detail/from_ruby.hpp +2 -37
- data/rice/detail/from_ruby.ipp +1020 -46
- data/rice/detail/from_ruby_defn.hpp +38 -0
- data/rice/detail/function_traits.hpp +124 -0
- data/rice/detail/method_data.hpp +23 -15
- data/rice/detail/method_data.ipp +53 -0
- data/rice/detail/rice_traits.hpp +116 -0
- data/rice/detail/ruby.hpp +9 -46
- data/rice/detail/to_ruby.hpp +3 -17
- data/rice/detail/to_ruby.ipp +409 -31
- data/rice/detail/to_ruby_defn.hpp +48 -0
- data/rice/forward_declares.ipp +82 -0
- data/rice/global_function.hpp +16 -20
- data/rice/global_function.ipp +8 -17
- data/rice/rice.hpp +59 -0
- data/rice/ruby_mark.hpp +5 -3
- data/rice/ruby_try_catch.hpp +4 -4
- data/rice/stl.hpp +11 -0
- data/sample/callbacks/extconf.rb +3 -0
- data/sample/callbacks/sample_callbacks.cpp +10 -13
- data/sample/enum/extconf.rb +3 -0
- data/sample/enum/sample_enum.cpp +3 -17
- data/sample/enum/test.rb +2 -2
- data/sample/inheritance/animals.cpp +8 -24
- data/sample/inheritance/extconf.rb +3 -0
- data/sample/inheritance/test.rb +1 -1
- data/sample/map/extconf.rb +3 -0
- data/sample/map/map.cpp +10 -18
- data/sample/map/test.rb +1 -1
- data/test/embed_ruby.cpp +18 -5
- data/test/ext/t1/extconf.rb +3 -0
- data/test/ext/t1/t1.cpp +1 -3
- data/test/ext/t2/extconf.rb +3 -0
- data/test/ext/t2/t2.cpp +1 -1
- data/test/extconf.rb +23 -0
- data/test/ruby/test_callbacks_sample.rb +28 -0
- data/test/ruby/test_multiple_extensions.rb +18 -0
- data/test/ruby/test_multiple_extensions_same_class.rb +14 -0
- data/test/ruby/test_multiple_extensions_with_inheritance.rb +20 -0
- data/test/test_Address_Registration_Guard.cpp +23 -10
- data/test/test_Array.cpp +129 -73
- data/test/test_Attribute.cpp +147 -0
- data/test/test_Builtin_Object.cpp +34 -14
- data/test/test_Class.cpp +149 -275
- data/test/test_Constructor.cpp +10 -9
- data/test/test_Data_Object.cpp +133 -192
- data/test/test_Data_Type.cpp +322 -252
- data/test/test_Director.cpp +54 -41
- data/test/test_Enum.cpp +228 -103
- data/test/test_Exception.cpp +5 -6
- data/test/test_Hash.cpp +31 -30
- data/test/test_Identifier.cpp +4 -5
- data/test/test_Inheritance.cpp +221 -0
- data/test/test_Iterator.cpp +161 -0
- data/test/test_Jump_Tag.cpp +1 -1
- data/test/test_Keep_Alive.cpp +161 -0
- data/test/test_Memory_Management.cpp +2 -4
- data/test/test_Module.cpp +167 -110
- data/test/test_Object.cpp +41 -21
- data/test/test_Ownership.cpp +275 -0
- data/test/test_Self.cpp +205 -0
- data/test/test_Stl_Optional.cpp +90 -0
- data/test/test_Stl_Pair.cpp +144 -0
- data/test/test_Stl_SmartPointer.cpp +200 -0
- data/test/test_Stl_String.cpp +74 -0
- data/test/test_Stl_Vector.cpp +652 -0
- data/test/test_String.cpp +1 -2
- data/test/test_Struct.cpp +29 -39
- data/test/test_Symbol.cpp +1 -2
- data/test/test_To_From_Ruby.cpp +249 -285
- data/test/test_global_functions.cpp +39 -19
- data/test/unittest.hpp +0 -4
- metadata +63 -139
- data/Doxyfile +0 -2268
- data/Makefile.am +0 -26
- data/Makefile.in +0 -931
- data/README.mingw +0 -8
- data/aclocal.m4 +0 -1085
- data/ax_cxx_compile_stdcxx.m4 +0 -951
- data/bootstrap +0 -8
- data/config.guess +0 -1421
- data/config.sub +0 -1807
- data/configure +0 -7792
- data/configure.ac +0 -55
- data/depcomp +0 -791
- data/doxygen.ac +0 -314
- data/doxygen.am +0 -186
- data/extconf.rb +0 -70
- data/install-sh +0 -501
- data/missing +0 -215
- data/post-autoconf.rb +0 -22
- data/post-automake.rb +0 -28
- data/rice/Address_Registration_Guard.cpp +0 -22
- data/rice/Arg_impl.hpp +0 -129
- data/rice/Arg_operators.cpp +0 -21
- data/rice/Arg_operators.hpp +0 -19
- data/rice/Array.hpp +0 -214
- data/rice/Array.ipp +0 -256
- data/rice/Builtin_Object.hpp +0 -8
- data/rice/Builtin_Object.ipp +0 -50
- data/rice/Builtin_Object_defn.hpp +0 -50
- data/rice/Class.cpp +0 -57
- data/rice/Class.hpp +0 -8
- data/rice/Class.ipp +0 -6
- data/rice/Class_defn.hpp +0 -84
- data/rice/Data_Type.cpp +0 -54
- data/rice/Data_Type_fwd.hpp +0 -12
- data/rice/Director.cpp +0 -13
- data/rice/Exception.cpp +0 -54
- data/rice/Exception_Base.hpp +0 -8
- data/rice/Exception_Base.ipp +0 -13
- data/rice/Exception_Base_defn.hpp +0 -27
- data/rice/Hash.hpp +0 -230
- data/rice/Hash.ipp +0 -329
- data/rice/Identifier.cpp +0 -8
- data/rice/Jump_Tag.hpp +0 -24
- data/rice/Makefile.am +0 -121
- data/rice/Makefile.in +0 -884
- data/rice/Module.cpp +0 -84
- data/rice/Module.hpp +0 -8
- data/rice/Module.ipp +0 -6
- data/rice/Module_defn.hpp +0 -88
- data/rice/Module_impl.hpp +0 -281
- data/rice/Module_impl.ipp +0 -345
- data/rice/Object.cpp +0 -169
- data/rice/Object.hpp +0 -8
- data/rice/Object.ipp +0 -33
- data/rice/Object_defn.hpp +0 -214
- data/rice/Require_Guard.hpp +0 -21
- data/rice/String.cpp +0 -89
- data/rice/String.hpp +0 -91
- data/rice/Struct.cpp +0 -117
- data/rice/Struct.hpp +0 -162
- data/rice/Struct.ipp +0 -26
- data/rice/Symbol.cpp +0 -25
- data/rice/Symbol.hpp +0 -66
- data/rice/Symbol.ipp +0 -44
- data/rice/config.hpp +0 -47
- data/rice/config.hpp.in +0 -46
- data/rice/detail/Arguments.hpp +0 -118
- data/rice/detail/Auto_Function_Wrapper.hpp +0 -898
- data/rice/detail/Auto_Function_Wrapper.ipp +0 -3181
- data/rice/detail/Auto_Member_Function_Wrapper.hpp +0 -897
- data/rice/detail/Auto_Member_Function_Wrapper.ipp +0 -2501
- data/rice/detail/Caster.hpp +0 -103
- data/rice/detail/Not_Copyable.hpp +0 -25
- data/rice/detail/Wrapped_Function.hpp +0 -33
- data/rice/detail/cfp.hpp +0 -24
- data/rice/detail/cfp.ipp +0 -51
- data/rice/detail/check_ruby_type.cpp +0 -27
- data/rice/detail/check_ruby_type.hpp +0 -23
- data/rice/detail/creation_funcs.hpp +0 -37
- data/rice/detail/creation_funcs.ipp +0 -36
- data/rice/detail/define_method_and_auto_wrap.hpp +0 -31
- data/rice/detail/define_method_and_auto_wrap.ipp +0 -30
- data/rice/detail/demangle.cpp +0 -56
- data/rice/detail/demangle.hpp +0 -19
- data/rice/detail/env.hpp +0 -11
- data/rice/detail/method_data.cpp +0 -92
- data/rice/detail/node.hpp +0 -13
- data/rice/detail/protect.cpp +0 -29
- data/rice/detail/protect.hpp +0 -34
- data/rice/detail/ruby_version_code.hpp +0 -6
- data/rice/detail/ruby_version_code.hpp.in +0 -6
- data/rice/detail/st.hpp +0 -22
- data/rice/detail/win32.hpp +0 -16
- data/rice/detail/wrap_function.hpp +0 -66
- data/rice/protect.hpp +0 -38
- data/rice/protect.ipp +0 -1134
- data/rice/rubypp.rb +0 -97
- data/rice/to_from_ruby.hpp +0 -8
- data/rice/to_from_ruby.ipp +0 -418
- data/rice/to_from_ruby_defn.hpp +0 -70
- data/ruby.ac +0 -135
- data/ruby/Makefile.am +0 -1
- data/ruby/Makefile.in +0 -628
- data/ruby/lib/Makefile.am +0 -3
- data/ruby/lib/Makefile.in +0 -506
- data/ruby/lib/mkmf-rice.rb.in +0 -217
- data/ruby/lib/version.rb +0 -3
- data/sample/Makefile.am +0 -53
- data/sample/Makefile.in +0 -495
- data/test/Makefile.am +0 -73
- data/test/Makefile.in +0 -1219
- data/test/ext/Makefile.am +0 -41
- data/test/ext/Makefile.in +0 -483
- 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 "
|
10
|
-
#include "Address_Registration_Guard.hpp"
|
11
|
-
|
12
|
-
#endif // Rice__Exception__hpp_
|
5
|
+
#include "Exception.ipp"
|
13
6
|
|
7
|
+
#endif // Rice__Exception__hpp_
|
data/rice/Exception.ipp
ADDED
@@ -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_
|
data/rice/Exception_defn.hpp
CHANGED
@@ -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
|
-
//!
|
15
|
-
/*!
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
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
|
-
|
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
|
-
|
41
|
+
template <typename... Arg_Ts>
|
42
|
+
Exception(const VALUE exceptionType, char const* fmt, Arg_Ts&&...args);
|
41
43
|
|
42
|
-
|
43
|
-
|
44
|
+
//! Destructor
|
45
|
+
virtual ~Exception() noexcept = default;
|
44
46
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
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
|
-
|
52
|
-
|
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
|
-
|
60
|
-
|
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
|
-
|
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
|
-
//!
|
13
|
-
|
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
|
-
|
25
|
-
|
22
|
+
//! Construct a new Identifier from a c string.
|
23
|
+
Identifier(char const* s);
|
26
24
|
|
27
|
-
|
28
|
-
|
25
|
+
//! Construct a new Identifier from a string.
|
26
|
+
Identifier(std::string const string);
|
29
27
|
|
30
|
-
|
31
|
-
|
28
|
+
//! Return a string representation of the Identifier.
|
29
|
+
char const* c_str() const;
|
32
30
|
|
33
|
-
|
34
|
-
|
31
|
+
//! Return a string representation of the Identifier.
|
32
|
+
std::string str() const;
|
35
33
|
|
36
|
-
|
37
|
-
|
34
|
+
//! Return the underlying ID
|
35
|
+
ID id() const { return id_; }
|
38
36
|
|
39
|
-
|
40
|
-
|
37
|
+
//! Return the underlying ID
|
38
|
+
operator ID() const { return id_; }
|
41
39
|
|
42
|
-
|
43
|
-
|
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
|
-
|
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
|
8
|
-
|
9
|
-
|
10
|
-
{
|
11
|
-
}
|
7
|
+
inline Identifier::Identifier(char const* s) : id_(rb_intern(s))
|
8
|
+
{
|
9
|
+
}
|
12
10
|
|
13
|
-
inline
|
14
|
-
|
15
|
-
|
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
|
21
|
-
|
22
|
-
|
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
|
28
|
-
|
29
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
5
|
+
throw;
|
61
6
|
}
|
62
|
-
|
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
|
+
}
|