rice 2.1.1 → 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 (246) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +121 -0
  3. data/CONTRIBUTORS.md +19 -0
  4. data/COPYING +2 -2
  5. data/Gemfile +3 -0
  6. data/README.md +69 -0
  7. data/Rakefile +95 -12
  8. data/include/rice/rice.hpp +7766 -0
  9. data/lib/mkmf-rice.rb +127 -0
  10. data/lib/version.rb +3 -0
  11. data/rice/Address_Registration_Guard.ipp +75 -32
  12. data/rice/Address_Registration_Guard_defn.hpp +60 -56
  13. data/rice/Arg.hpp +80 -4
  14. data/rice/Arg.ipp +51 -0
  15. data/rice/Constructor.hpp +30 -376
  16. data/rice/Data_Object.ipp +234 -107
  17. data/rice/Data_Object_defn.hpp +77 -117
  18. data/rice/Data_Type.hpp +1 -2
  19. data/rice/Data_Type.ipp +251 -295
  20. data/rice/Data_Type_defn.hpp +175 -243
  21. data/rice/Director.hpp +14 -9
  22. data/rice/Enum.hpp +54 -104
  23. data/rice/Enum.ipp +104 -230
  24. data/rice/Exception.hpp +2 -8
  25. data/rice/Exception.ipp +65 -0
  26. data/rice/Exception_defn.hpp +46 -47
  27. data/rice/Identifier.hpp +28 -28
  28. data/rice/Identifier.ipp +23 -27
  29. data/rice/Return.hpp +39 -0
  30. data/rice/Return.ipp +33 -0
  31. data/rice/detail/Exception_Handler.ipp +22 -62
  32. data/rice/detail/Exception_Handler_defn.hpp +76 -91
  33. data/rice/detail/Iterator.hpp +18 -88
  34. data/rice/detail/Iterator.ipp +47 -0
  35. data/rice/detail/Jump_Tag.hpp +21 -0
  36. data/rice/detail/MethodInfo.hpp +44 -0
  37. data/rice/detail/MethodInfo.ipp +78 -0
  38. data/rice/detail/NativeAttribute.hpp +53 -0
  39. data/rice/detail/NativeAttribute.ipp +83 -0
  40. data/rice/detail/NativeFunction.hpp +69 -0
  41. data/rice/detail/NativeFunction.ipp +248 -0
  42. data/rice/detail/RubyFunction.hpp +39 -0
  43. data/rice/detail/RubyFunction.ipp +92 -0
  44. data/rice/detail/Type.hpp +29 -0
  45. data/rice/detail/Type.ipp +138 -0
  46. data/rice/detail/TypeRegistry.hpp +50 -0
  47. data/rice/detail/TypeRegistry.ipp +106 -0
  48. data/rice/detail/Wrapper.hpp +51 -0
  49. data/rice/detail/Wrapper.ipp +151 -0
  50. data/rice/detail/default_allocation_func.hpp +8 -19
  51. data/rice/detail/default_allocation_func.ipp +9 -8
  52. data/rice/detail/from_ruby.hpp +2 -37
  53. data/rice/detail/from_ruby.ipp +1020 -46
  54. data/rice/detail/from_ruby_defn.hpp +38 -0
  55. data/rice/detail/function_traits.hpp +124 -0
  56. data/rice/detail/method_data.hpp +23 -15
  57. data/rice/detail/method_data.ipp +53 -0
  58. data/rice/detail/rice_traits.hpp +116 -0
  59. data/rice/detail/ruby.hpp +9 -49
  60. data/rice/detail/to_ruby.hpp +3 -17
  61. data/rice/detail/to_ruby.ipp +409 -31
  62. data/rice/detail/to_ruby_defn.hpp +48 -0
  63. data/rice/forward_declares.ipp +82 -0
  64. data/rice/global_function.hpp +16 -20
  65. data/rice/global_function.ipp +8 -17
  66. data/rice/rice.hpp +59 -0
  67. data/rice/ruby_mark.hpp +5 -3
  68. data/rice/ruby_try_catch.hpp +4 -4
  69. data/rice/stl.hpp +11 -0
  70. data/sample/callbacks/extconf.rb +6 -0
  71. data/sample/callbacks/sample_callbacks.cpp +35 -0
  72. data/sample/callbacks/test.rb +28 -0
  73. data/sample/enum/extconf.rb +3 -0
  74. data/sample/enum/sample_enum.cpp +3 -17
  75. data/sample/enum/test.rb +2 -2
  76. data/sample/inheritance/animals.cpp +8 -24
  77. data/sample/inheritance/extconf.rb +3 -0
  78. data/sample/inheritance/test.rb +1 -1
  79. data/sample/map/extconf.rb +3 -0
  80. data/sample/map/map.cpp +10 -18
  81. data/sample/map/test.rb +1 -1
  82. data/test/embed_ruby.cpp +34 -0
  83. data/test/embed_ruby.hpp +4 -0
  84. data/test/ext/t1/extconf.rb +3 -0
  85. data/test/ext/t1/t1.cpp +1 -3
  86. data/test/ext/t2/extconf.rb +3 -0
  87. data/test/ext/t2/t2.cpp +1 -1
  88. data/test/extconf.rb +23 -0
  89. data/test/ruby/test_callbacks_sample.rb +28 -0
  90. data/test/ruby/test_multiple_extensions.rb +18 -0
  91. data/test/ruby/test_multiple_extensions_same_class.rb +14 -0
  92. data/test/ruby/test_multiple_extensions_with_inheritance.rb +20 -0
  93. data/test/test_Address_Registration_Guard.cpp +25 -11
  94. data/test/test_Array.cpp +131 -74
  95. data/test/test_Attribute.cpp +147 -0
  96. data/test/test_Builtin_Object.cpp +36 -15
  97. data/test/test_Class.cpp +151 -274
  98. data/test/test_Constructor.cpp +10 -9
  99. data/test/test_Data_Object.cpp +135 -193
  100. data/test/test_Data_Type.cpp +323 -252
  101. data/test/test_Director.cpp +56 -42
  102. data/test/test_Enum.cpp +230 -104
  103. data/test/test_Exception.cpp +7 -7
  104. data/test/test_Hash.cpp +33 -31
  105. data/test/test_Identifier.cpp +6 -6
  106. data/test/test_Inheritance.cpp +221 -0
  107. data/test/test_Iterator.cpp +161 -0
  108. data/test/test_Jump_Tag.cpp +1 -1
  109. data/test/test_Keep_Alive.cpp +161 -0
  110. data/test/test_Memory_Management.cpp +4 -5
  111. data/test/test_Module.cpp +169 -111
  112. data/test/test_Object.cpp +51 -19
  113. data/test/test_Ownership.cpp +275 -0
  114. data/test/test_Self.cpp +205 -0
  115. data/test/test_Stl_Optional.cpp +90 -0
  116. data/test/test_Stl_Pair.cpp +144 -0
  117. data/test/test_Stl_SmartPointer.cpp +200 -0
  118. data/test/test_Stl_String.cpp +74 -0
  119. data/test/test_Stl_Vector.cpp +652 -0
  120. data/test/test_String.cpp +3 -3
  121. data/test/test_Struct.cpp +31 -40
  122. data/test/test_Symbol.cpp +3 -3
  123. data/test/test_To_From_Ruby.cpp +283 -218
  124. data/test/test_global_functions.cpp +41 -20
  125. data/test/unittest.cpp +34 -8
  126. data/test/unittest.hpp +0 -4
  127. metadata +117 -137
  128. data/Doxyfile +0 -2280
  129. data/Makefile.am +0 -26
  130. data/Makefile.in +0 -920
  131. data/README +0 -1055
  132. data/README.mingw +0 -8
  133. data/aclocal.m4 +0 -1088
  134. data/bootstrap +0 -8
  135. data/check_stdcxx_11.ac +0 -142
  136. data/config.guess +0 -1421
  137. data/config.sub +0 -1807
  138. data/configure +0 -7481
  139. data/configure.ac +0 -55
  140. data/depcomp +0 -791
  141. data/doxygen.ac +0 -314
  142. data/doxygen.am +0 -186
  143. data/extconf.rb +0 -69
  144. data/install-sh +0 -501
  145. data/missing +0 -215
  146. data/post-autoconf.rb +0 -22
  147. data/post-automake.rb +0 -28
  148. data/rice/Address_Registration_Guard.cpp +0 -22
  149. data/rice/Arg_impl.hpp +0 -129
  150. data/rice/Arg_operators.cpp +0 -21
  151. data/rice/Arg_operators.hpp +0 -19
  152. data/rice/Array.hpp +0 -214
  153. data/rice/Array.ipp +0 -256
  154. data/rice/Builtin_Object.hpp +0 -8
  155. data/rice/Builtin_Object.ipp +0 -50
  156. data/rice/Builtin_Object_defn.hpp +0 -50
  157. data/rice/Class.cpp +0 -57
  158. data/rice/Class.hpp +0 -8
  159. data/rice/Class.ipp +0 -6
  160. data/rice/Class_defn.hpp +0 -83
  161. data/rice/Data_Type.cpp +0 -54
  162. data/rice/Data_Type_fwd.hpp +0 -12
  163. data/rice/Director.cpp +0 -13
  164. data/rice/Exception.cpp +0 -59
  165. data/rice/Exception_Base.hpp +0 -8
  166. data/rice/Exception_Base.ipp +0 -13
  167. data/rice/Exception_Base_defn.hpp +0 -27
  168. data/rice/Hash.hpp +0 -227
  169. data/rice/Hash.ipp +0 -329
  170. data/rice/Identifier.cpp +0 -8
  171. data/rice/Jump_Tag.hpp +0 -24
  172. data/rice/Makefile.am +0 -124
  173. data/rice/Makefile.in +0 -839
  174. data/rice/Module.cpp +0 -84
  175. data/rice/Module.hpp +0 -8
  176. data/rice/Module.ipp +0 -6
  177. data/rice/Module_defn.hpp +0 -88
  178. data/rice/Module_impl.hpp +0 -281
  179. data/rice/Module_impl.ipp +0 -345
  180. data/rice/Object.cpp +0 -169
  181. data/rice/Object.hpp +0 -8
  182. data/rice/Object.ipp +0 -19
  183. data/rice/Object_defn.hpp +0 -191
  184. data/rice/Require_Guard.hpp +0 -21
  185. data/rice/String.cpp +0 -94
  186. data/rice/String.hpp +0 -91
  187. data/rice/Struct.cpp +0 -117
  188. data/rice/Struct.hpp +0 -162
  189. data/rice/Struct.ipp +0 -26
  190. data/rice/Symbol.cpp +0 -25
  191. data/rice/Symbol.hpp +0 -66
  192. data/rice/Symbol.ipp +0 -44
  193. data/rice/config.hpp +0 -47
  194. data/rice/config.hpp.in +0 -46
  195. data/rice/detail/Arguments.hpp +0 -118
  196. data/rice/detail/Auto_Function_Wrapper.hpp +0 -898
  197. data/rice/detail/Auto_Function_Wrapper.ipp +0 -3694
  198. data/rice/detail/Auto_Member_Function_Wrapper.hpp +0 -897
  199. data/rice/detail/Auto_Member_Function_Wrapper.ipp +0 -2774
  200. data/rice/detail/Caster.hpp +0 -103
  201. data/rice/detail/Not_Copyable.hpp +0 -25
  202. data/rice/detail/Wrapped_Function.hpp +0 -33
  203. data/rice/detail/cfp.hpp +0 -24
  204. data/rice/detail/cfp.ipp +0 -51
  205. data/rice/detail/check_ruby_type.cpp +0 -27
  206. data/rice/detail/check_ruby_type.hpp +0 -23
  207. data/rice/detail/creation_funcs.hpp +0 -37
  208. data/rice/detail/creation_funcs.ipp +0 -36
  209. data/rice/detail/define_method_and_auto_wrap.hpp +0 -31
  210. data/rice/detail/define_method_and_auto_wrap.ipp +0 -30
  211. data/rice/detail/demangle.cpp +0 -56
  212. data/rice/detail/demangle.hpp +0 -19
  213. data/rice/detail/env.hpp +0 -11
  214. data/rice/detail/method_data.cpp +0 -86
  215. data/rice/detail/node.hpp +0 -13
  216. data/rice/detail/object_call.hpp +0 -69
  217. data/rice/detail/object_call.ipp +0 -131
  218. data/rice/detail/protect.cpp +0 -29
  219. data/rice/detail/protect.hpp +0 -34
  220. data/rice/detail/ruby_version_code.hpp +0 -6
  221. data/rice/detail/ruby_version_code.hpp.in +0 -6
  222. data/rice/detail/st.hpp +0 -22
  223. data/rice/detail/traits.hpp +0 -43
  224. data/rice/detail/win32.hpp +0 -16
  225. data/rice/detail/wrap_function.hpp +0 -341
  226. data/rice/detail/wrap_function.ipp +0 -514
  227. data/rice/protect.hpp +0 -92
  228. data/rice/protect.ipp +0 -1134
  229. data/rice/rubypp.rb +0 -97
  230. data/rice/to_from_ruby.hpp +0 -8
  231. data/rice/to_from_ruby.ipp +0 -294
  232. data/rice/to_from_ruby_defn.hpp +0 -70
  233. data/ruby.ac +0 -135
  234. data/ruby/Makefile.am +0 -1
  235. data/ruby/Makefile.in +0 -625
  236. data/ruby/lib/Makefile.am +0 -3
  237. data/ruby/lib/Makefile.in +0 -503
  238. data/ruby/lib/mkmf-rice.rb.in +0 -217
  239. data/ruby/lib/version.rb +0 -3
  240. data/sample/Makefile.am +0 -47
  241. data/sample/Makefile.in +0 -486
  242. data/test/Makefile.am +0 -72
  243. data/test/Makefile.in +0 -1150
  244. data/test/ext/Makefile.am +0 -41
  245. data/test/ext/Makefile.in +0 -480
  246. data/test/test_rice.rb +0 -41
@@ -0,0 +1,48 @@
1
+ #ifndef Rice__detail__to_ruby_defn__hpp_
2
+ #define Rice__detail__to_ruby_defn__hpp_
3
+
4
+ #include "rice_traits.hpp"
5
+
6
+ namespace Rice
7
+ {
8
+ namespace detail
9
+ {
10
+ //! Convert a C++ object to Ruby.
11
+ /*! If x is a pointer, wraps the pointee as a Ruby object. If x is an
12
+ * Object, returns x.
13
+ *
14
+ * If no conversion exists a compile-time error is generated.
15
+ *
16
+ * \param x the object to convert.
17
+ * \return a Ruby representation of the C++ object.
18
+ *
19
+ * Example:
20
+ * \code
21
+ * rb_p(to_ruby(42));
22
+ *
23
+ * Foo * p_foo = new Foo();
24
+ * rb_p(to_ruby(p_foo));
25
+ * \endcode
26
+ */
27
+ template <typename T>
28
+ class To_Ruby;
29
+
30
+ // Helper template function that let's users avoid having to specify the template type - its deduced
31
+ template <typename T>
32
+ VALUE to_ruby(T&& x)
33
+ {
34
+ using Unqualified_T = remove_cv_recursive_t<T>;
35
+ return To_Ruby<Unqualified_T>().convert(std::forward<T>(x));
36
+ }
37
+
38
+ // Helper template function that let's users avoid having to specify the template type - its deduced
39
+ template <typename T>
40
+ VALUE to_ruby(T* x)
41
+ {
42
+ using Unqualified_T = remove_cv_recursive_t<T>;
43
+ return To_Ruby<Unqualified_T*>().convert(x);
44
+ }
45
+ } // detail
46
+ } // Rice
47
+
48
+ #endif // Rice__detail__to_ruby_defn__hpp_
@@ -0,0 +1,82 @@
1
+ #ifndef Rice__Forward_Declares__ipp_
2
+ #define Rice__Forward_Declares__ipp_
3
+
4
+ namespace Rice
5
+ {
6
+ // These methods cannot be defined where they are declared due to circular dependencies
7
+ inline Class Object::class_of() const
8
+ {
9
+ return detail::protect(rb_class_of, value_);
10
+ }
11
+
12
+ inline String Object::to_s() const
13
+ {
14
+ return call("to_s");
15
+ }
16
+
17
+ inline String Object::class_name() const
18
+ {
19
+ return detail::protect(rb_obj_classname, this->value());
20
+ }
21
+
22
+ inline String Object::inspect() const
23
+ {
24
+ return call("inspect");
25
+ }
26
+
27
+ inline Object Object::instance_eval(String const& s)
28
+ {
29
+ const VALUE argv[] = { s.value() };
30
+ return detail::protect(rb_obj_instance_eval, 1, &argv[0], this->value());
31
+ }
32
+
33
+ inline Object Object::vcall(Identifier id, Array args)
34
+ {
35
+ std::vector<VALUE> a(args.size());
36
+
37
+ Array::const_iterator it = args.begin();
38
+ Array::const_iterator end = args.end();
39
+
40
+ for (int i = 0; it != end; i++, ++it)
41
+ {
42
+ a[i] = it->value();
43
+ }
44
+
45
+ return detail::protect(rb_funcall3, this->value(), id.id(), (int)args.size(), (const VALUE*)a.data());
46
+ }
47
+
48
+ inline std::ostream& operator<<(std::ostream& out, Object const& obj)
49
+ {
50
+ String s(obj.to_s());
51
+ out << s.c_str();
52
+ return out;
53
+ }
54
+
55
+ inline Identifier::Identifier(Symbol const& symbol) : id_(SYM2ID(symbol.value()))
56
+ {
57
+ }
58
+
59
+ inline String Module::name() const
60
+ {
61
+ VALUE name = detail::protect(rb_mod_name, this->value());
62
+ if (name == Qnil)
63
+ {
64
+ return String("");
65
+ }
66
+ else
67
+ {
68
+ return name;
69
+ }
70
+ }
71
+
72
+ inline Array Module::ancestors() const
73
+ {
74
+ return detail::protect(rb_mod_ancestors, this->value());
75
+ }
76
+
77
+ inline Class Module::singleton_class() const
78
+ {
79
+ return CLASS_OF(value());
80
+ }
81
+ }
82
+ #endif // Rice__Forward_Declares__ipp_
@@ -5,27 +5,23 @@
5
5
 
6
6
  namespace Rice
7
7
  {
8
+ template<typename Function_T>
9
+ [[deprecated("Please call define_global_function with Arg parameters")]]
10
+ void define_global_function(char const * name, Function_T&& func, MethodInfo* arguments);
8
11
 
9
- /**
10
- * Helper forwarder method to easily wrap
11
- * globally available functions. This simply
12
- * forwards off a call to define_module_function
13
- * on rb_mKernel
14
- */
15
- template<typename Func_T>
16
- void define_global_function(
17
- char const * name,
18
- Func_T func,
19
- Arguments* arguments = 0);
20
-
21
- // FIXME: See Module::define_method with Arg
22
- template<typename Func_T>
23
- void define_global_function(
24
- char const * name,
25
- Func_T func,
26
- Arg const& arg);
27
-
28
-
12
+ //! Define an global function
13
+ /*! The method's implementation can be any function or static member
14
+ * function. A wrapper will be generated which will convert the arguments
15
+ * from ruby types to C++ types before calling the function. The return
16
+ * value will be converted back to ruby.
17
+ * \param name the name of the method
18
+ * \param func the implementation of the function, either a function
19
+ * pointer or a member function pointer.
20
+ * \param args a list of Arg instance used to define default parameters (optional)
21
+ * \return *this
22
+ */
23
+ template<typename Function_T, typename...Arg_Ts>
24
+ void define_global_function(char const * name, Function_T&& func, Arg_Ts const& ...args);
29
25
  } // Rice
30
26
 
31
27
  #include "global_function.ipp"
@@ -1,22 +1,13 @@
1
- #include "detail/define_method_and_auto_wrap.hpp"
1
+ #include "cpp_api/Module.hpp"
2
2
 
3
- template<typename Func_T>
4
- void Rice::define_global_function(
5
- char const * name,
6
- Func_T func,
7
- Arguments* arguments)
3
+ template<typename Function_T>
4
+ void Rice::define_global_function(char const * name, Function_T&& func, MethodInfo* methodInfo)
8
5
  {
9
- Module(rb_mKernel).define_module_function(name, func, arguments);
6
+ Module(rb_mKernel).define_module_function(name, std::forward<Function_T>(func), methodInfo);
10
7
  }
11
8
 
12
- template<typename Func_T>
13
- void Rice::define_global_function(
14
- char const * name,
15
- Func_T func,
16
- Arg const& arg)
9
+ template<typename Function_T, typename...Arg_Ts>
10
+ void Rice::define_global_function(char const * name, Function_T&& func, Arg_Ts const& ...args)
17
11
  {
18
- Arguments* args = new Arguments();
19
- args->add(arg);
20
- define_global_function(name, func, args);
21
- }
22
-
12
+ Module(rb_mKernel).define_module_function(name, std::forward<Function_T>(func), args...);
13
+ }
data/rice/rice.hpp ADDED
@@ -0,0 +1,59 @@
1
+ #ifndef Rice__hpp_
2
+ #define Rice__hpp_
3
+
4
+ #include "detail/ruby.hpp"
5
+ #include "detail/rice_traits.hpp"
6
+ #include "detail/function_traits.hpp"
7
+ #include "detail/Type.hpp"
8
+ #include "detail/TypeRegistry.hpp"
9
+ #include "detail/Wrapper.hpp"
10
+ #include "detail/default_allocation_func.hpp"
11
+ #include "detail/Jump_Tag.hpp"
12
+ #include "Exception_defn.hpp"
13
+ #include "detail/RubyFunction.hpp"
14
+ #include "Return.hpp"
15
+ #include "Arg.hpp"
16
+ #include "detail/from_ruby.hpp"
17
+ #include "detail/to_ruby.hpp"
18
+ #include "detail/MethodInfo.hpp"
19
+ #include "detail/Exception_Handler.hpp"
20
+ #include "detail/Iterator.hpp"
21
+ #include "Exception.ipp"
22
+ #include "detail/method_data.hpp"
23
+ #include "ruby_try_catch.hpp"
24
+ #include "detail/NativeAttribute.hpp"
25
+ #include "detail/NativeFunction.hpp"
26
+
27
+ #include "ruby_mark.hpp"
28
+
29
+ #include "Identifier.hpp"
30
+
31
+ #include "cpp_api/Object.hpp"
32
+ #include "cpp_api/Builtin_Object.hpp"
33
+ #include "cpp_api/String.hpp"
34
+ #include "cpp_api/Array.hpp"
35
+ #include "cpp_api/Hash.hpp"
36
+ #include "cpp_api/Symbol.hpp"
37
+
38
+ #include "Address_Registration_Guard.hpp"
39
+ #include "cpp_api/Module.hpp"
40
+ #include "global_function.hpp"
41
+
42
+ #include "cpp_api/Class.hpp"
43
+ #include "cpp_api/Struct.hpp"
44
+
45
+ #include "Director.hpp"
46
+ #include "Data_Type.hpp"
47
+ #include "Constructor.hpp"
48
+ #include "Data_Object.hpp"
49
+ #include "detail/Iterator.ipp"
50
+
51
+ // Dependent on Data_Object due to the way method metadata is stored in the Ruby class
52
+ #include "detail/default_allocation_func.ipp"
53
+
54
+ #include "Enum.hpp"
55
+
56
+ // Dependent on Module, Class, Array and String
57
+ #include "forward_declares.ipp"
58
+
59
+ #endif // Rice__hpp_
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
- template<typename T>
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
@@ -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::Exception_Base const & ex) \
44
+ catch(::Rice::Exception const & ex) \
45
45
  { \
46
46
  RUBY_RETHROW(ex.value()); \
47
47
  } \
data/rice/stl.hpp ADDED
@@ -0,0 +1,11 @@
1
+ #ifndef Rice__stl__hpp_
2
+ #define Rice__stl__hpp_
3
+
4
+ #include "stl/string.hpp"
5
+ #include "stl/complex.hpp"
6
+ #include "stl/optional.hpp"
7
+ #include "stl/pair.hpp"
8
+ #include "stl/smart_ptr.hpp"
9
+ #include "stl/vector.hpp"
10
+
11
+ #endif // Rice__stl__hpp_
@@ -0,0 +1,6 @@
1
+ require 'bundler/setup'
2
+ require 'rice'
3
+ require 'mkmf-rice'
4
+
5
+ create_makefile('sample_callbacks')
6
+
@@ -0,0 +1,35 @@
1
+ #include <rice/rice.hpp>
2
+
3
+ using namespace Rice;
4
+
5
+ namespace
6
+ {
7
+
8
+ class CallbackHolder
9
+ {
10
+ public:
11
+
12
+ void registerCallback(Rice::Object cb)
13
+ {
14
+ callback_ = cb;
15
+ }
16
+
17
+ Rice::Object fireCallback(Rice::String param)
18
+ {
19
+ return callback_.call("call", param);
20
+ }
21
+
22
+ Rice::Object callback_;
23
+ };
24
+
25
+ } // namespace
26
+
27
+ extern "C"
28
+ void Init_sample_callbacks()
29
+ {
30
+ define_class<CallbackHolder>("CallbackHolder")
31
+ .define_constructor(Constructor<CallbackHolder>())
32
+ .define_method("register_callback", &CallbackHolder::registerCallback)
33
+ .define_method("fire_callback", &CallbackHolder::fireCallback);
34
+ }
35
+
@@ -0,0 +1,28 @@
1
+ require 'sample_callbacks'
2
+
3
+ def hello(message)
4
+ "Hello #{message}"
5
+ end
6
+
7
+ cb1 = CallbackHolder.new
8
+ cb2 = CallbackHolder.new
9
+ cb3 = CallbackHolder.new
10
+
11
+ cb1.register_callback(lambda do |param|
12
+ "Callback 1 got param #{param}"
13
+ end)
14
+
15
+ cb2.register_callback(lambda do |param|
16
+ "Callback 2 got param #{param}"
17
+ end)
18
+
19
+ cb3.register_callback method(:hello)
20
+
21
+ puts "Calling Callback 1"
22
+ puts cb1.fire_callback("Hello")
23
+
24
+ puts "Calling Callback 2"
25
+ puts cb2.fire_callback("World")
26
+
27
+ puts "Calling Callback 3"
28
+ puts cb3.fire_callback("Ruby")
@@ -1,3 +1,6 @@
1
+ require 'bundler/setup'
2
+ require 'rice'
1
3
  require 'mkmf-rice'
4
+
2
5
  create_makefile('sample_enum')
3
6
 
@@ -1,5 +1,4 @@
1
- #include "rice/Enum.hpp"
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
- RUBY_TRY
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