rice 3.0.0 → 4.0.3
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/include/rice/stl.hpp +1113 -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 +70 -141
- 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/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/ruby.ac +0 -135
- 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/ruby_mark.hpp
CHANGED
|
@@ -5,9 +5,11 @@
|
|
|
5
5
|
/*! This function can be specialized for a particular type to override
|
|
6
6
|
* the default behavior (which is to not mark any additional objects).
|
|
7
7
|
*/
|
|
8
|
-
|
|
9
|
-
void ruby_mark(T * /* obj */)
|
|
8
|
+
namespace Rice
|
|
10
9
|
{
|
|
10
|
+
template<typename T>
|
|
11
|
+
void ruby_mark(T* data)
|
|
12
|
+
{
|
|
13
|
+
}
|
|
11
14
|
}
|
|
12
|
-
|
|
13
15
|
#endif // ruby_mark__hpp
|
data/rice/ruby_try_catch.hpp
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#ifndef Rice__ruby_try_catch__hpp_
|
|
2
2
|
#define Rice__ruby_try_catch__hpp_
|
|
3
3
|
|
|
4
|
-
#include "Exception_Base_defn.hpp"
|
|
5
|
-
#include "Jump_Tag.hpp"
|
|
6
|
-
#include "detail/ruby.hpp"
|
|
7
4
|
#include <stdexcept>
|
|
8
5
|
|
|
6
|
+
#include "detail/Jump_Tag.hpp"
|
|
7
|
+
#include "Exception_defn.hpp"
|
|
8
|
+
|
|
9
9
|
/*! \def RUBY_TRY
|
|
10
10
|
* \brief Start a block to catch Ruby exceptions and rethrow them.
|
|
11
11
|
*/
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
* \brief End a RUBY_TRY block.
|
|
42
42
|
*/
|
|
43
43
|
#define RUBY_CATCH \
|
|
44
|
-
catch(::Rice::
|
|
44
|
+
catch(::Rice::Exception const & ex) \
|
|
45
45
|
{ \
|
|
46
46
|
RUBY_RETHROW(ex.value()); \
|
|
47
47
|
} \
|
data/rice/stl.hpp
ADDED
data/sample/callbacks/extconf.rb
CHANGED
|
@@ -1,24 +1,25 @@
|
|
|
1
|
-
#include
|
|
2
|
-
#include "rice/Constructor.hpp"
|
|
3
|
-
#include "rice/String.hpp"
|
|
1
|
+
#include <rice/rice.hpp>
|
|
4
2
|
|
|
5
3
|
using namespace Rice;
|
|
6
4
|
|
|
7
5
|
namespace
|
|
8
6
|
{
|
|
9
7
|
|
|
10
|
-
class CallbackHolder
|
|
8
|
+
class CallbackHolder
|
|
9
|
+
{
|
|
11
10
|
public:
|
|
12
11
|
|
|
13
|
-
void registerCallback(Rice::Object cb)
|
|
14
|
-
|
|
12
|
+
void registerCallback(Rice::Object cb)
|
|
13
|
+
{
|
|
14
|
+
callback_ = cb;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
Rice::Object fireCallback(Rice::String param)
|
|
18
|
-
|
|
17
|
+
Rice::Object fireCallback(Rice::String param)
|
|
18
|
+
{
|
|
19
|
+
return callback_.call("call", param);
|
|
19
20
|
}
|
|
20
21
|
|
|
21
|
-
Rice::Object
|
|
22
|
+
Rice::Object callback_;
|
|
22
23
|
};
|
|
23
24
|
|
|
24
25
|
} // namespace
|
|
@@ -26,13 +27,9 @@ namespace
|
|
|
26
27
|
extern "C"
|
|
27
28
|
void Init_sample_callbacks()
|
|
28
29
|
{
|
|
29
|
-
RUBY_TRY
|
|
30
|
-
{
|
|
31
30
|
define_class<CallbackHolder>("CallbackHolder")
|
|
32
31
|
.define_constructor(Constructor<CallbackHolder>())
|
|
33
32
|
.define_method("register_callback", &CallbackHolder::registerCallback)
|
|
34
33
|
.define_method("fire_callback", &CallbackHolder::fireCallback);
|
|
35
|
-
}
|
|
36
|
-
RUBY_CATCH
|
|
37
34
|
}
|
|
38
35
|
|
data/sample/enum/extconf.rb
CHANGED
data/sample/enum/sample_enum.cpp
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
#include
|
|
2
|
-
#include "rice/ruby_try_catch.hpp"
|
|
1
|
+
#include <rice/rice.hpp>
|
|
3
2
|
|
|
4
3
|
using namespace Rice;
|
|
5
4
|
|
|
@@ -13,8 +12,6 @@ enum Sample_Enum
|
|
|
13
12
|
SE_BAZ = 100,
|
|
14
13
|
};
|
|
15
14
|
|
|
16
|
-
Rice::Enum<Sample_Enum> sample_enum_type;
|
|
17
|
-
|
|
18
15
|
char const * description(Sample_Enum e)
|
|
19
16
|
{
|
|
20
17
|
switch(e)
|
|
@@ -28,27 +25,16 @@ char const * description(Sample_Enum e)
|
|
|
28
25
|
|
|
29
26
|
} // namespace
|
|
30
27
|
|
|
31
|
-
template<>
|
|
32
|
-
Sample_Enum from_ruby<Sample_Enum>(Object x)
|
|
33
|
-
{
|
|
34
|
-
Data_Object<Sample_Enum> d(x, sample_enum_type);
|
|
35
|
-
return *d;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
28
|
extern "C"
|
|
39
29
|
void Init_sample_enum()
|
|
40
30
|
{
|
|
41
|
-
|
|
42
|
-
{
|
|
43
|
-
sample_enum_type =
|
|
31
|
+
Rice::Enum<Sample_Enum> sample_enum_type =
|
|
44
32
|
define_enum<Sample_Enum>("Sample_Enum")
|
|
45
33
|
.define_value("FOO", SE_FOO)
|
|
46
34
|
.define_value("BAR", SE_BAR)
|
|
47
35
|
.define_value("BAZ", SE_BAZ);
|
|
48
|
-
|
|
36
|
+
|
|
49
37
|
sample_enum_type
|
|
50
38
|
.define_method("description", description);
|
|
51
|
-
}
|
|
52
|
-
RUBY_CATCH
|
|
53
39
|
}
|
|
54
40
|
|
data/sample/enum/test.rb
CHANGED
|
@@ -1,43 +1,31 @@
|
|
|
1
|
-
#include
|
|
2
|
-
#include "rice/Constructor.hpp"
|
|
1
|
+
#include <rice/rice.hpp>
|
|
3
2
|
|
|
4
3
|
using namespace Rice;
|
|
5
4
|
|
|
6
5
|
class Organism
|
|
7
6
|
{
|
|
8
7
|
public:
|
|
9
|
-
virtual ~Organism() =
|
|
8
|
+
virtual ~Organism() = default;
|
|
10
9
|
virtual char const * name() = 0;
|
|
11
10
|
};
|
|
12
11
|
|
|
13
|
-
Organism::
|
|
14
|
-
~Organism()
|
|
15
|
-
{
|
|
16
|
-
}
|
|
17
|
-
|
|
18
12
|
class Animal
|
|
19
13
|
: public Organism
|
|
20
14
|
{
|
|
21
15
|
public:
|
|
22
|
-
virtual ~Animal() = 0;
|
|
23
16
|
virtual char const * speak() = 0;
|
|
24
17
|
};
|
|
25
18
|
|
|
26
|
-
Animal::
|
|
27
|
-
~Animal()
|
|
28
|
-
{
|
|
29
|
-
}
|
|
30
|
-
|
|
31
19
|
class Bear
|
|
32
20
|
: public Animal
|
|
33
21
|
{
|
|
34
22
|
public:
|
|
35
|
-
|
|
23
|
+
char const * name() override
|
|
36
24
|
{
|
|
37
25
|
return "Bear";
|
|
38
26
|
}
|
|
39
27
|
|
|
40
|
-
|
|
28
|
+
char const * speak() override
|
|
41
29
|
{
|
|
42
30
|
return "I'm smarter than the average bear";
|
|
43
31
|
}
|
|
@@ -47,12 +35,12 @@ class Dog
|
|
|
47
35
|
: public Animal
|
|
48
36
|
{
|
|
49
37
|
public:
|
|
50
|
-
|
|
38
|
+
char const * name() override
|
|
51
39
|
{
|
|
52
40
|
return "Dog";
|
|
53
41
|
}
|
|
54
42
|
|
|
55
|
-
|
|
43
|
+
char const * speak() override
|
|
56
44
|
{
|
|
57
45
|
return "Woof woof";
|
|
58
46
|
}
|
|
@@ -62,12 +50,12 @@ class Rabbit
|
|
|
62
50
|
: public Animal
|
|
63
51
|
{
|
|
64
52
|
public:
|
|
65
|
-
|
|
53
|
+
char const * name() override
|
|
66
54
|
{
|
|
67
55
|
return "Rabbit";
|
|
68
56
|
}
|
|
69
57
|
|
|
70
|
-
|
|
58
|
+
char const * speak() override
|
|
71
59
|
{
|
|
72
60
|
return "What's up, doc?";
|
|
73
61
|
}
|
|
@@ -76,8 +64,6 @@ public:
|
|
|
76
64
|
extern "C"
|
|
77
65
|
void Init_animals(void)
|
|
78
66
|
{
|
|
79
|
-
RUBY_TRY
|
|
80
|
-
{
|
|
81
67
|
define_class<Organism>("Organism")
|
|
82
68
|
.define_method("name", &Organism::name);
|
|
83
69
|
|
|
@@ -92,7 +78,5 @@ void Init_animals(void)
|
|
|
92
78
|
|
|
93
79
|
define_class<Rabbit, Animal>("Rabbit")
|
|
94
80
|
.define_constructor(Constructor<Rabbit>());
|
|
95
|
-
}
|
|
96
|
-
RUBY_CATCH
|
|
97
81
|
}
|
|
98
82
|
|
data/sample/inheritance/test.rb
CHANGED
data/sample/map/extconf.rb
CHANGED
data/sample/map/map.cpp
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
#include
|
|
2
|
-
#include "rice/Constructor.hpp"
|
|
1
|
+
#include <rice/rice.hpp>
|
|
3
2
|
|
|
4
3
|
#include <map>
|
|
5
4
|
|
|
@@ -45,37 +44,30 @@ private:
|
|
|
45
44
|
Value_Map map_;
|
|
46
45
|
};
|
|
47
46
|
|
|
48
|
-
Data_Type<Map> rb_cMap;
|
|
49
|
-
|
|
50
47
|
} // namespace
|
|
51
48
|
|
|
52
49
|
template<>
|
|
53
|
-
|
|
50
|
+
struct detail::To_Ruby<Map::value_type>
|
|
54
51
|
{
|
|
55
|
-
|
|
56
|
-
|
|
52
|
+
static VALUE convert(Map::value_type const & pair)
|
|
53
|
+
{
|
|
54
|
+
return detail::protect(rb_assoc_new, pair.first.value(), pair.second.value());
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
57
|
|
|
58
58
|
#include <iostream>
|
|
59
59
|
extern "C"
|
|
60
60
|
void Init_map(void)
|
|
61
61
|
{
|
|
62
|
-
RUBY_TRY
|
|
63
|
-
{
|
|
64
|
-
Map::iterator (Map::*begin)() = &Map::begin;
|
|
65
|
-
Map::iterator (Map::*end)() = &Map::end;
|
|
66
62
|
Rice::Module rb_mStd = define_module("Std");
|
|
67
63
|
|
|
68
64
|
// TODO: no delete method on the map, because I'm not sure how to
|
|
69
65
|
// make delete work properly while iterating
|
|
70
|
-
rb_cMap =
|
|
66
|
+
Data_Type<Map> rb_cMap =
|
|
71
67
|
define_class_under<Map>(rb_mStd, "Map")
|
|
72
68
|
.define_constructor(Constructor<Map>())
|
|
73
69
|
.define_method("[]", &Map::bracket)
|
|
74
70
|
.define_method("[]=", &Map::bracket_equals)
|
|
75
|
-
.define_iterator(begin, end)
|
|
76
|
-
.include_module(rb_mEnumerable)
|
|
77
|
-
;
|
|
78
|
-
}
|
|
79
|
-
RUBY_CATCH
|
|
71
|
+
.define_iterator(&Map::begin, &Map::end)
|
|
72
|
+
.include_module(rb_mEnumerable);
|
|
80
73
|
}
|
|
81
|
-
|
data/sample/map/test.rb
CHANGED
data/test/embed_ruby.cpp
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
#include <
|
|
1
|
+
#include <rice/rice.hpp>
|
|
2
|
+
#include <ruby/version.h>
|
|
2
3
|
|
|
3
4
|
void embed_ruby()
|
|
4
5
|
{
|
|
@@ -7,15 +8,27 @@ void embed_ruby()
|
|
|
7
8
|
if (!initialized__)
|
|
8
9
|
{
|
|
9
10
|
int argc = 0;
|
|
10
|
-
char* argv =
|
|
11
|
-
argv[0] = 0;
|
|
11
|
+
char* argv = nullptr;
|
|
12
12
|
char** pArgv = &argv;
|
|
13
13
|
|
|
14
14
|
ruby_sysinit(&argc, &pArgv);
|
|
15
|
-
RUBY_INIT_STACK;
|
|
16
15
|
ruby_init();
|
|
17
16
|
ruby_init_loadpath();
|
|
18
17
|
|
|
19
18
|
initialized__ = true;
|
|
19
|
+
|
|
20
|
+
// Because Ruby 3 no longer initializes the GC module when embedding, calling GC.stress
|
|
21
|
+
// results in a crash.
|
|
22
|
+
// See https://bugs.ruby-lang.org/issues/17643
|
|
23
|
+
if (RUBY_API_VERSION_MAJOR == 3 &&
|
|
24
|
+
RUBY_API_VERSION_MINOR == 0 &&
|
|
25
|
+
RUBY_API_VERSION_TEENY == 0)
|
|
26
|
+
{
|
|
27
|
+
// do nothing
|
|
28
|
+
}
|
|
29
|
+
else
|
|
30
|
+
{
|
|
31
|
+
rb_eval_string("GC.stress = true");
|
|
32
|
+
}
|
|
20
33
|
}
|
|
21
|
-
}
|
|
34
|
+
}
|
data/test/ext/t1/extconf.rb
CHANGED
data/test/ext/t1/t1.cpp
CHANGED
data/test/ext/t2/extconf.rb
CHANGED
data/test/ext/t2/t2.cpp
CHANGED
data/test/extconf.rb
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require 'bundler/setup'
|
|
2
|
+
require 'rice'
|
|
3
|
+
require 'mkmf-rice'
|
|
4
|
+
require 'rbconfig'
|
|
5
|
+
|
|
6
|
+
# Totally hack mkmf to make a unittest executable instead of a shared library
|
|
7
|
+
target_exe = "unittest#{RbConfig::CONFIG['EXEEXT']}"
|
|
8
|
+
$cleanfiles << target_exe
|
|
9
|
+
|
|
10
|
+
create_makefile(target_exe) do |conf|
|
|
11
|
+
conf << "\n"
|
|
12
|
+
conf << "#{target_exe}: $(OBJS)"
|
|
13
|
+
conf << "\t$(ECHO) linking executable unittest"
|
|
14
|
+
conf << "\t-$(Q)$(RM) $(@)"
|
|
15
|
+
|
|
16
|
+
if IS_MSWIN
|
|
17
|
+
conf << "\t$(Q) $(CXX) -Fe$(@) $(OBJS) $(LIBS) $(LOCAL_LIBS) -link $(ldflags) $(LIBPATH)"
|
|
18
|
+
else
|
|
19
|
+
conf << "\t$(Q) $(CXX) -o $@ $(OBJS) $(LIBPATH) $(LOCAL_LIBS) $(LIBS)"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
conf << "\n"
|
|
23
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
$: << File.join(File.dirname(__FILE__), '..', 'sample')
|
|
2
|
+
|
|
3
|
+
require 'rubygems'
|
|
4
|
+
gem 'minitest'
|
|
5
|
+
require 'minitest/autorun'
|
|
6
|
+
require_relative '../../sample/callbacks/sample_callbacks'
|
|
7
|
+
|
|
8
|
+
class CallbacksTest < Minitest::Test
|
|
9
|
+
def test_callbacks_sample_lambda
|
|
10
|
+
cb = CallbackHolder.new
|
|
11
|
+
cb.register_callback(lambda do |param|
|
|
12
|
+
"Callback got: #{param}"
|
|
13
|
+
end)
|
|
14
|
+
|
|
15
|
+
assert_equal "Callback got: Hello", cb.fire_callback("Hello")
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def hello_world(param)
|
|
19
|
+
"Method got: #{param}"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_callbacks_sample_method
|
|
23
|
+
cb = CallbackHolder.new
|
|
24
|
+
cb.register_callback method(:hello_world)
|
|
25
|
+
|
|
26
|
+
assert_equal "Method got: Hello", cb.fire_callback("Hello")
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
$: << File.join(__dir__, '..', '..', 'sample')
|
|
2
|
+
|
|
3
|
+
require 'minitest'
|
|
4
|
+
require 'minitest/autorun'
|
|
5
|
+
|
|
6
|
+
class MultipleExtensionTest < Minitest::Test
|
|
7
|
+
def test_multiple_extensions
|
|
8
|
+
# Rinse
|
|
9
|
+
require 'map/map'
|
|
10
|
+
m = Std::Map.new
|
|
11
|
+
m[0] = 1
|
|
12
|
+
|
|
13
|
+
# And repeat
|
|
14
|
+
require 'enum/sample_enum'
|
|
15
|
+
m = Std::Map.new
|
|
16
|
+
m[0] = 1
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
$: << File.join(__dir__, '..', 'ext')
|
|
2
|
+
|
|
3
|
+
require 'minitest'
|
|
4
|
+
require 'minitest/autorun'
|
|
5
|
+
|
|
6
|
+
class MultipleExtensionsSameClassTest < Minitest::Test
|
|
7
|
+
def test_multiple_extensions_same_class
|
|
8
|
+
require 't1/t1'
|
|
9
|
+
require 't2/t2'
|
|
10
|
+
|
|
11
|
+
foo = Foo.new
|
|
12
|
+
assert_equal 42, foo.foo
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
$: << File.join(__dir__, '..', '..', 'sample')
|
|
2
|
+
# Load a library that uses inheritance
|
|
3
|
+
require 'inheritance/animals'
|
|
4
|
+
|
|
5
|
+
# Then load a different library
|
|
6
|
+
require 'enum/sample_enum'
|
|
7
|
+
|
|
8
|
+
require 'minitest'
|
|
9
|
+
require 'minitest/autorun'
|
|
10
|
+
|
|
11
|
+
class MultipleExtensionTest < Minitest::Test
|
|
12
|
+
def test_multiple_extensions_with_inheritance
|
|
13
|
+
|
|
14
|
+
# And make sure we can call methods in the base class on a derived
|
|
15
|
+
# instance
|
|
16
|
+
dog = Dog.new
|
|
17
|
+
assert_equal dog.name, "Dog"
|
|
18
|
+
assert_equal dog.speak, "Woof woof"
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#include "unittest.hpp"
|
|
2
2
|
#include "embed_ruby.hpp"
|
|
3
|
-
#include
|
|
3
|
+
#include <rice/rice.hpp>
|
|
4
4
|
|
|
5
5
|
using namespace Rice;
|
|
6
6
|
|
|
@@ -30,15 +30,28 @@ TESTCASE(get_address)
|
|
|
30
30
|
ASSERT_EQUAL(&v, g.address());
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
TESTCASE(
|
|
33
|
+
TESTCASE(move_construct)
|
|
34
34
|
{
|
|
35
|
-
VALUE
|
|
36
|
-
|
|
37
|
-
Address_Registration_Guard
|
|
38
|
-
Address_Registration_Guard
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
ASSERT_EQUAL(&
|
|
42
|
-
|
|
35
|
+
VALUE value = detail::to_ruby("Value 1");
|
|
36
|
+
|
|
37
|
+
Address_Registration_Guard guard1(&value);
|
|
38
|
+
Address_Registration_Guard guard2(std::move(guard1));
|
|
39
|
+
|
|
40
|
+
ASSERT((guard1.address() == nullptr));
|
|
41
|
+
ASSERT_EQUAL(&value, guard2.address());
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
TESTCASE(move_assign)
|
|
45
|
+
{
|
|
46
|
+
VALUE value1 = detail::to_ruby("Value 1");
|
|
47
|
+
VALUE value2 = detail::to_ruby("Value 2");
|
|
48
|
+
|
|
49
|
+
Address_Registration_Guard guard1(&value1);
|
|
50
|
+
Address_Registration_Guard guard2(&value2);
|
|
51
|
+
|
|
52
|
+
guard2 = std::move(guard1);
|
|
53
|
+
|
|
54
|
+
ASSERT((guard1.address() == nullptr));
|
|
55
|
+
ASSERT_EQUAL(&value1, guard2.address());
|
|
43
56
|
}
|
|
44
57
|
|