rice 4.0.3 → 4.1.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 +30 -0
- data/Rakefile +1 -1
- data/include/rice/rice.hpp +2597 -1771
- data/include/rice/stl.hpp +1580 -271
- data/lib/mkmf-rice.rb +5 -2
- data/lib/version.rb +1 -1
- data/rice/Arg.hpp +6 -6
- data/rice/Arg.ipp +8 -9
- data/rice/Constructor.hpp +2 -2
- data/rice/Data_Object.ipp +69 -15
- data/rice/Data_Object_defn.hpp +1 -15
- data/rice/Data_Type.ipp +56 -86
- data/rice/Data_Type_defn.hpp +14 -17
- data/rice/Director.hpp +0 -1
- data/rice/Enum.ipp +31 -22
- data/rice/Exception.ipp +2 -3
- data/rice/Exception_defn.hpp +5 -5
- data/rice/HandlerRegistration.hpp +15 -0
- data/rice/Return.hpp +5 -4
- data/rice/Return.ipp +8 -3
- data/rice/detail/ExceptionHandler.hpp +8 -0
- data/rice/detail/ExceptionHandler.ipp +28 -0
- data/rice/detail/{Exception_Handler_defn.hpp → ExceptionHandler_defn.hpp} +17 -21
- data/rice/detail/HandlerRegistry.hpp +51 -0
- data/rice/detail/HandlerRegistry.ipp +20 -0
- data/rice/detail/InstanceRegistry.hpp +34 -0
- data/rice/detail/InstanceRegistry.ipp +50 -0
- data/rice/detail/MethodInfo.ipp +1 -1
- data/rice/detail/NativeAttribute.hpp +26 -15
- data/rice/detail/NativeAttribute.ipp +76 -47
- data/rice/detail/NativeFunction.hpp +60 -13
- data/rice/detail/NativeFunction.ipp +103 -85
- data/rice/detail/NativeIterator.hpp +49 -0
- data/rice/detail/NativeIterator.ipp +102 -0
- data/rice/detail/NativeRegistry.hpp +31 -0
- data/rice/detail/{method_data.ipp → NativeRegistry.ipp} +20 -16
- data/rice/detail/Registries.hpp +26 -0
- data/rice/detail/Registries.ipp +23 -0
- data/rice/detail/RubyFunction.hpp +6 -11
- data/rice/detail/RubyFunction.ipp +10 -22
- data/rice/detail/Type.hpp +1 -1
- data/rice/detail/Type.ipp +3 -2
- data/rice/detail/TypeRegistry.hpp +8 -11
- data/rice/detail/TypeRegistry.ipp +3 -28
- data/rice/detail/Wrapper.hpp +0 -2
- data/rice/detail/Wrapper.ipp +73 -23
- data/rice/detail/cpp_protect.hpp +93 -0
- data/rice/detail/default_allocation_func.ipp +1 -1
- data/rice/detail/from_ruby.ipp +206 -2
- data/rice/detail/to_ruby.ipp +39 -5
- data/rice/detail/to_ruby_defn.hpp +1 -1
- data/rice/forward_declares.ipp +6 -0
- data/rice/global_function.hpp +0 -4
- data/rice/global_function.ipp +0 -6
- data/rice/rice.hpp +29 -24
- data/rice/stl.hpp +6 -1
- data/test/embed_ruby.cpp +0 -14
- data/test/test_Array.cpp +20 -24
- data/test/test_Class.cpp +8 -47
- data/test/test_Constructor.cpp +0 -2
- data/test/test_Data_Object.cpp +25 -11
- data/test/test_Data_Type.cpp +124 -28
- data/test/test_Director.cpp +12 -13
- data/test/test_Enum.cpp +65 -26
- data/test/test_Inheritance.cpp +9 -9
- data/test/test_Iterator.cpp +134 -5
- data/test/test_Keep_Alive.cpp +7 -7
- data/test/test_Memory_Management.cpp +1 -1
- data/test/test_Module.cpp +25 -62
- data/test/test_Object.cpp +66 -3
- data/test/test_Ownership.cpp +12 -13
- data/test/test_Self.cpp +12 -13
- data/test/test_Stl_Map.cpp +696 -0
- data/test/test_Stl_Optional.cpp +3 -3
- data/test/test_Stl_Pair.cpp +38 -2
- data/test/test_Stl_Reference_Wrapper.cpp +102 -0
- data/test/test_Stl_SmartPointer.cpp +5 -5
- data/test/test_Stl_Unordered_Map.cpp +697 -0
- data/test/test_Stl_Variant.cpp +301 -0
- data/test/test_Stl_Vector.cpp +200 -41
- data/test/test_Struct.cpp +3 -3
- data/test/test_To_From_Ruby.cpp +6 -0
- data/test/test_Tracking.cpp +239 -0
- data/test/unittest.hpp +13 -4
- metadata +23 -13
- data/rice/detail/Exception_Handler.hpp +0 -8
- data/rice/detail/Exception_Handler.ipp +0 -28
- data/rice/detail/Iterator.hpp +0 -23
- data/rice/detail/Iterator.ipp +0 -47
- data/rice/detail/function_traits.hpp +0 -124
- data/rice/detail/method_data.hpp +0 -29
- data/rice/detail/rice_traits.hpp +0 -116
- data/rice/ruby_try_catch.hpp +0 -86
data/rice/detail/rice_traits.hpp
DELETED
@@ -1,116 +0,0 @@
|
|
1
|
-
#ifndef Rice__detail__traits__hpp_
|
2
|
-
#define Rice__detail__traits__hpp_
|
3
|
-
|
4
|
-
#include <ostream>
|
5
|
-
#include <string>
|
6
|
-
#include <type_traits>
|
7
|
-
#include <vector>
|
8
|
-
|
9
|
-
namespace Rice
|
10
|
-
{
|
11
|
-
namespace detail
|
12
|
-
{
|
13
|
-
// Get the base_type of T - without pointer, reference, const or volatile
|
14
|
-
template<typename T>
|
15
|
-
using intrinsic_type = typename std::remove_cv_t<std::remove_reference_t<std::remove_pointer_t<T>>>;
|
16
|
-
|
17
|
-
// Recursively remove const/volatilr
|
18
|
-
template<typename T>
|
19
|
-
struct remove_cv_recursive
|
20
|
-
{
|
21
|
-
using type = T;
|
22
|
-
};
|
23
|
-
|
24
|
-
template<typename T>
|
25
|
-
struct remove_cv_recursive<T const volatile>
|
26
|
-
{
|
27
|
-
using type = typename remove_cv_recursive<T>::type;
|
28
|
-
};
|
29
|
-
|
30
|
-
template<typename T>
|
31
|
-
struct remove_cv_recursive<T volatile>
|
32
|
-
{
|
33
|
-
using type = typename remove_cv_recursive<T>::type;
|
34
|
-
};
|
35
|
-
|
36
|
-
template<typename T>
|
37
|
-
struct remove_cv_recursive<T const>
|
38
|
-
{
|
39
|
-
using type = typename remove_cv_recursive<T>::type;
|
40
|
-
};
|
41
|
-
|
42
|
-
template<typename T>
|
43
|
-
struct remove_cv_recursive<T&>
|
44
|
-
{
|
45
|
-
using type = typename remove_cv_recursive<T>::type&;
|
46
|
-
};
|
47
|
-
|
48
|
-
/* template<typename T>
|
49
|
-
struct remove_cv_recursive<T&&>
|
50
|
-
{
|
51
|
-
using type = typename remove_cv_recursive<T>::type&&;
|
52
|
-
};*/
|
53
|
-
|
54
|
-
template<typename T>
|
55
|
-
struct remove_cv_recursive<T*>
|
56
|
-
{
|
57
|
-
using type = typename remove_cv_recursive<T>::type*;
|
58
|
-
};
|
59
|
-
|
60
|
-
template<typename T>
|
61
|
-
using remove_cv_recursive_t = typename remove_cv_recursive<T>::type;
|
62
|
-
|
63
|
-
// Does the Type work with ostreams? This is used to implement #to_s
|
64
|
-
template<typename T, typename = void>
|
65
|
-
struct is_ostreamable : std::false_type {};
|
66
|
-
|
67
|
-
template<typename T>
|
68
|
-
struct is_ostreamable<T, std::void_t<decltype(std::declval<std::ostream&>() << std::declval<T>())>> : std::true_type {};
|
69
|
-
|
70
|
-
template<typename T>
|
71
|
-
constexpr bool is_ostreamable_v = is_ostreamable<T>::value;
|
72
|
-
|
73
|
-
// Is the type comparable?
|
74
|
-
template<typename T, typename SFINAE = void>
|
75
|
-
struct is_comparable : std::false_type {};
|
76
|
-
|
77
|
-
template<typename T>
|
78
|
-
struct is_comparable<T, std::void_t<decltype(std::declval<T>() == std::declval<T>())>> : std::true_type {};
|
79
|
-
|
80
|
-
template<typename T>
|
81
|
-
constexpr bool is_comparable_v = is_comparable<T>::value;
|
82
|
-
|
83
|
-
template <typename U, typename V>
|
84
|
-
struct is_comparable<std::pair<U, V>>
|
85
|
-
{
|
86
|
-
static const bool value = is_comparable_v<U> && is_comparable_v<V>;
|
87
|
-
};
|
88
|
-
|
89
|
-
template <typename T>
|
90
|
-
struct is_comparable<std::vector<T>>
|
91
|
-
{
|
92
|
-
static const bool value = is_comparable_v<T>;
|
93
|
-
};
|
94
|
-
|
95
|
-
// -- Tuple Helpers ---
|
96
|
-
template<typename T>
|
97
|
-
struct tuple_shift;
|
98
|
-
|
99
|
-
template<typename T, typename...Arg_Ts>
|
100
|
-
struct tuple_shift<std::tuple<T, Arg_Ts...>>
|
101
|
-
{
|
102
|
-
using type = std::tuple<Arg_Ts...>;
|
103
|
-
};
|
104
|
-
|
105
|
-
template<template<typename, typename...> typename T, typename...Arg_Ts>
|
106
|
-
struct tuple_map;
|
107
|
-
|
108
|
-
template<template<typename, typename...> typename T, typename...Arg_Ts>
|
109
|
-
struct tuple_map<T, std::tuple<Arg_Ts...>>
|
110
|
-
{
|
111
|
-
using type = std::tuple<T<remove_cv_recursive_t<Arg_Ts>>...>;
|
112
|
-
};
|
113
|
-
} // detail
|
114
|
-
} // Rice
|
115
|
-
|
116
|
-
#endif // Rice__detail__traits__hpp_
|
data/rice/ruby_try_catch.hpp
DELETED
@@ -1,86 +0,0 @@
|
|
1
|
-
#ifndef Rice__ruby_try_catch__hpp_
|
2
|
-
#define Rice__ruby_try_catch__hpp_
|
3
|
-
|
4
|
-
#include <stdexcept>
|
5
|
-
|
6
|
-
#include "detail/Jump_Tag.hpp"
|
7
|
-
#include "Exception_defn.hpp"
|
8
|
-
|
9
|
-
/*! \def RUBY_TRY
|
10
|
-
* \brief Start a block to catch Ruby exceptions and rethrow them.
|
11
|
-
*/
|
12
|
-
// Goto is used here to avoid having to use a second try/catch block (we
|
13
|
-
// can't rb_exc_raise directly out of the catch blocks below, since the
|
14
|
-
// exceptions will not get properly cleaned up).
|
15
|
-
// The labels are located before the try and not after it so the function can't
|
16
|
-
// "fall through" into the exception-handling code accidentally.
|
17
|
-
#define RUBY_TRY \
|
18
|
-
VALUE Rice__ruby_exc = Qnil; \
|
19
|
-
int Rice__ruby_jump_tag = 0; \
|
20
|
-
\
|
21
|
-
goto start_of_RUBY_TRY; \
|
22
|
-
\
|
23
|
-
Rice__ruby_exception: \
|
24
|
-
rb_exc_raise(Rice__ruby_exc); \
|
25
|
-
Rice__ruby_jump_tag: \
|
26
|
-
rb_jump_tag(Rice__ruby_jump_tag); \
|
27
|
-
\
|
28
|
-
start_of_RUBY_TRY: \
|
29
|
-
try
|
30
|
-
|
31
|
-
/*! \def RUBY_RETHROW(ex)
|
32
|
-
* \brief Given a Ruby exception as a VALUE, safely raise the exception as a
|
33
|
-
* Ruby exception. This should be used inside a RUBY_TRY/RUBY_CATCH
|
34
|
-
* block.
|
35
|
-
*/
|
36
|
-
#define RUBY_RETHROW(ex) \
|
37
|
-
Rice__ruby_exc = ex; \
|
38
|
-
goto Rice__ruby_exception;
|
39
|
-
|
40
|
-
/*! \def RUBY_CATCH
|
41
|
-
* \brief End a RUBY_TRY block.
|
42
|
-
*/
|
43
|
-
#define RUBY_CATCH \
|
44
|
-
catch(::Rice::Exception const & ex) \
|
45
|
-
{ \
|
46
|
-
RUBY_RETHROW(ex.value()); \
|
47
|
-
} \
|
48
|
-
catch(::Rice::Jump_Tag const & ex) \
|
49
|
-
{ \
|
50
|
-
Rice__ruby_jump_tag = ex.tag; \
|
51
|
-
goto Rice__ruby_jump_tag; \
|
52
|
-
} \
|
53
|
-
catch(std::bad_alloc const & ex) \
|
54
|
-
{ \
|
55
|
-
/* This won't work quite right if the rb_exc_new2 fails; not */ \
|
56
|
-
/* much we can do about that, since Ruby doesn't give us access */ \
|
57
|
-
/* to a pre-allocated NoMemoryError object */ \
|
58
|
-
RUBY_RETHROW(rb_exc_new2(rb_eNoMemError, ex.what())); \
|
59
|
-
} \
|
60
|
-
catch(std::invalid_argument const & ex) \
|
61
|
-
{ \
|
62
|
-
/* This can raise a NoMemoryError in VERY rare circumstances */ \
|
63
|
-
RUBY_RETHROW(rb_exc_new2(rb_eArgError, ex.what())); \
|
64
|
-
} \
|
65
|
-
catch(std::domain_error const & ex) \
|
66
|
-
{ \
|
67
|
-
/* This can raise a NoMemoryError in VERY rare circumstances */ \
|
68
|
-
RUBY_RETHROW(rb_exc_new2(rb_eFloatDomainError, ex.what())); \
|
69
|
-
} \
|
70
|
-
catch(std::out_of_range const & ex) \
|
71
|
-
{ \
|
72
|
-
/* This can raise a NoMemoryError in VERY rare circumstances */ \
|
73
|
-
RUBY_RETHROW(rb_exc_new2(rb_eRangeError, ex.what())); \
|
74
|
-
} \
|
75
|
-
catch(std::exception const & ex) \
|
76
|
-
{ \
|
77
|
-
/* This can raise a NoMemoryError in VERY rare circumstances */ \
|
78
|
-
RUBY_RETHROW(rb_exc_new2(rb_eRuntimeError, ex.what())); \
|
79
|
-
} \
|
80
|
-
catch(...) \
|
81
|
-
{ \
|
82
|
-
RUBY_RETHROW(rb_exc_new2(rb_eRuntimeError, "unknown C++ exception thrown")); \
|
83
|
-
} \
|
84
|
-
|
85
|
-
#endif // Rice__ruby_try_catch__hpp_
|
86
|
-
|