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.
Files changed (238) 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/include/rice/stl.hpp +1113 -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 +12 -14
  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 +11 -6
  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 -46
  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 +3 -0
  71. data/sample/callbacks/sample_callbacks.cpp +10 -13
  72. data/sample/enum/extconf.rb +3 -0
  73. data/sample/enum/sample_enum.cpp +3 -17
  74. data/sample/enum/test.rb +2 -2
  75. data/sample/inheritance/animals.cpp +8 -24
  76. data/sample/inheritance/extconf.rb +3 -0
  77. data/sample/inheritance/test.rb +1 -1
  78. data/sample/map/extconf.rb +3 -0
  79. data/sample/map/map.cpp +10 -18
  80. data/sample/map/test.rb +1 -1
  81. data/test/embed_ruby.cpp +18 -5
  82. data/test/ext/t1/extconf.rb +3 -0
  83. data/test/ext/t1/t1.cpp +1 -3
  84. data/test/ext/t2/extconf.rb +3 -0
  85. data/test/ext/t2/t2.cpp +1 -1
  86. data/test/extconf.rb +23 -0
  87. data/test/ruby/test_callbacks_sample.rb +28 -0
  88. data/test/ruby/test_multiple_extensions.rb +18 -0
  89. data/test/ruby/test_multiple_extensions_same_class.rb +14 -0
  90. data/test/ruby/test_multiple_extensions_with_inheritance.rb +20 -0
  91. data/test/test_Address_Registration_Guard.cpp +23 -10
  92. data/test/test_Array.cpp +129 -73
  93. data/test/test_Attribute.cpp +147 -0
  94. data/test/test_Builtin_Object.cpp +34 -14
  95. data/test/test_Class.cpp +149 -275
  96. data/test/test_Constructor.cpp +10 -9
  97. data/test/test_Data_Object.cpp +133 -192
  98. data/test/test_Data_Type.cpp +322 -252
  99. data/test/test_Director.cpp +54 -41
  100. data/test/test_Enum.cpp +228 -103
  101. data/test/test_Exception.cpp +5 -6
  102. data/test/test_Hash.cpp +31 -30
  103. data/test/test_Identifier.cpp +4 -5
  104. data/test/test_Inheritance.cpp +221 -0
  105. data/test/test_Iterator.cpp +161 -0
  106. data/test/test_Jump_Tag.cpp +1 -1
  107. data/test/test_Keep_Alive.cpp +161 -0
  108. data/test/test_Memory_Management.cpp +2 -4
  109. data/test/test_Module.cpp +167 -110
  110. data/test/test_Object.cpp +41 -21
  111. data/test/test_Ownership.cpp +275 -0
  112. data/test/test_Self.cpp +205 -0
  113. data/test/test_Stl_Optional.cpp +90 -0
  114. data/test/test_Stl_Pair.cpp +144 -0
  115. data/test/test_Stl_SmartPointer.cpp +200 -0
  116. data/test/test_Stl_String.cpp +74 -0
  117. data/test/test_Stl_Vector.cpp +652 -0
  118. data/test/test_String.cpp +1 -2
  119. data/test/test_Struct.cpp +29 -39
  120. data/test/test_Symbol.cpp +1 -2
  121. data/test/test_To_From_Ruby.cpp +249 -285
  122. data/test/test_global_functions.cpp +39 -19
  123. data/test/unittest.hpp +0 -4
  124. metadata +70 -141
  125. data/Doxyfile +0 -2268
  126. data/Makefile.am +0 -26
  127. data/Makefile.in +0 -931
  128. data/README.mingw +0 -8
  129. data/aclocal.m4 +0 -1085
  130. data/ax_cxx_compile_stdcxx.m4 +0 -951
  131. data/bootstrap +0 -8
  132. data/config.guess +0 -1421
  133. data/config.sub +0 -1807
  134. data/configure +0 -7792
  135. data/configure.ac +0 -55
  136. data/depcomp +0 -791
  137. data/doxygen.ac +0 -314
  138. data/doxygen.am +0 -186
  139. data/extconf.rb +0 -70
  140. data/install-sh +0 -501
  141. data/missing +0 -215
  142. data/post-autoconf.rb +0 -22
  143. data/post-automake.rb +0 -28
  144. data/rice/Address_Registration_Guard.cpp +0 -22
  145. data/rice/Arg_impl.hpp +0 -129
  146. data/rice/Arg_operators.cpp +0 -21
  147. data/rice/Arg_operators.hpp +0 -19
  148. data/rice/Array.hpp +0 -214
  149. data/rice/Array.ipp +0 -256
  150. data/rice/Builtin_Object.hpp +0 -8
  151. data/rice/Builtin_Object.ipp +0 -50
  152. data/rice/Builtin_Object_defn.hpp +0 -50
  153. data/rice/Class.cpp +0 -57
  154. data/rice/Class.hpp +0 -8
  155. data/rice/Class.ipp +0 -6
  156. data/rice/Class_defn.hpp +0 -84
  157. data/rice/Data_Type.cpp +0 -54
  158. data/rice/Data_Type_fwd.hpp +0 -12
  159. data/rice/Director.cpp +0 -13
  160. data/rice/Exception.cpp +0 -54
  161. data/rice/Exception_Base.hpp +0 -8
  162. data/rice/Exception_Base.ipp +0 -13
  163. data/rice/Exception_Base_defn.hpp +0 -27
  164. data/rice/Hash.hpp +0 -230
  165. data/rice/Hash.ipp +0 -329
  166. data/rice/Identifier.cpp +0 -8
  167. data/rice/Jump_Tag.hpp +0 -24
  168. data/rice/Makefile.am +0 -121
  169. data/rice/Makefile.in +0 -884
  170. data/rice/Module.cpp +0 -84
  171. data/rice/Module.hpp +0 -8
  172. data/rice/Module.ipp +0 -6
  173. data/rice/Module_defn.hpp +0 -88
  174. data/rice/Module_impl.hpp +0 -281
  175. data/rice/Module_impl.ipp +0 -345
  176. data/rice/Object.cpp +0 -169
  177. data/rice/Object.hpp +0 -8
  178. data/rice/Object.ipp +0 -33
  179. data/rice/Object_defn.hpp +0 -214
  180. data/rice/Require_Guard.hpp +0 -21
  181. data/rice/String.cpp +0 -89
  182. data/rice/String.hpp +0 -91
  183. data/rice/Struct.cpp +0 -117
  184. data/rice/Struct.hpp +0 -162
  185. data/rice/Struct.ipp +0 -26
  186. data/rice/Symbol.cpp +0 -25
  187. data/rice/Symbol.hpp +0 -66
  188. data/rice/Symbol.ipp +0 -44
  189. data/rice/config.hpp +0 -47
  190. data/rice/config.hpp.in +0 -46
  191. data/rice/detail/Arguments.hpp +0 -118
  192. data/rice/detail/Auto_Function_Wrapper.hpp +0 -898
  193. data/rice/detail/Auto_Function_Wrapper.ipp +0 -3181
  194. data/rice/detail/Auto_Member_Function_Wrapper.hpp +0 -897
  195. data/rice/detail/Auto_Member_Function_Wrapper.ipp +0 -2501
  196. data/rice/detail/Caster.hpp +0 -103
  197. data/rice/detail/Not_Copyable.hpp +0 -25
  198. data/rice/detail/Wrapped_Function.hpp +0 -33
  199. data/rice/detail/cfp.hpp +0 -24
  200. data/rice/detail/cfp.ipp +0 -51
  201. data/rice/detail/check_ruby_type.cpp +0 -27
  202. data/rice/detail/check_ruby_type.hpp +0 -23
  203. data/rice/detail/creation_funcs.hpp +0 -37
  204. data/rice/detail/creation_funcs.ipp +0 -36
  205. data/rice/detail/define_method_and_auto_wrap.hpp +0 -31
  206. data/rice/detail/define_method_and_auto_wrap.ipp +0 -30
  207. data/rice/detail/demangle.cpp +0 -56
  208. data/rice/detail/demangle.hpp +0 -19
  209. data/rice/detail/env.hpp +0 -11
  210. data/rice/detail/method_data.cpp +0 -92
  211. data/rice/detail/node.hpp +0 -13
  212. data/rice/detail/protect.cpp +0 -29
  213. data/rice/detail/protect.hpp +0 -34
  214. data/rice/detail/ruby_version_code.hpp +0 -6
  215. data/rice/detail/ruby_version_code.hpp.in +0 -6
  216. data/rice/detail/st.hpp +0 -22
  217. data/rice/detail/win32.hpp +0 -16
  218. data/rice/detail/wrap_function.hpp +0 -66
  219. data/rice/protect.hpp +0 -38
  220. data/rice/protect.ipp +0 -1134
  221. data/rice/rubypp.rb +0 -97
  222. data/rice/to_from_ruby.hpp +0 -8
  223. data/rice/to_from_ruby.ipp +0 -418
  224. data/rice/to_from_ruby_defn.hpp +0 -70
  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/ruby.ac +0 -135
  232. data/sample/Makefile.am +0 -53
  233. data/sample/Makefile.in +0 -495
  234. data/test/Makefile.am +0 -73
  235. data/test/Makefile.in +0 -1219
  236. data/test/ext/Makefile.am +0 -41
  237. data/test/ext/Makefile.in +0 -483
  238. data/test/test_rice.rb +0 -45
@@ -1,8 +0,0 @@
1
- #ifndef Rice__Builtin_Object__hpp_
2
- #define Rice__Builtin_Object__hpp_
3
-
4
- #include "Builtin_Object_defn.hpp"
5
- #include "Builtin_Object.ipp"
6
-
7
- #endif // Rice__Builtin_Object__hpp_
8
-
@@ -1,50 +0,0 @@
1
- #ifndef Rice__Builtin_Object__ipp_
2
- #define Rice__Builtin_Object__ipp_
3
-
4
- #include "Object.hpp"
5
- #include "protect.hpp"
6
- #include "detail/check_ruby_type.hpp"
7
-
8
- #include <algorithm>
9
-
10
- namespace Rice
11
- {
12
-
13
- namespace detail
14
- {
15
- inline VALUE check_type(Object value, int type)
16
- {
17
- rb_check_type(value, type);
18
- return Qnil;
19
- }
20
- }
21
-
22
- template<int Builtin_Type>
23
- inline Builtin_Object<Builtin_Type>::
24
- Builtin_Object(Object value)
25
- : Object(value)
26
- , obj_((RObject*)(value.value()))
27
- {
28
- protect(detail::check_type, value, Builtin_Type);
29
- }
30
-
31
- template<int Builtin_Type>
32
- inline Builtin_Object<Builtin_Type>::
33
- Builtin_Object(Builtin_Object<Builtin_Type> const & other)
34
- : Object(other.value())
35
- , obj_(other.obj_)
36
- {
37
- }
38
-
39
- template<int Builtin_Type>
40
- inline void Builtin_Object<Builtin_Type>::
41
- swap(Builtin_Object<Builtin_Type> & ref)
42
- {
43
- std::swap(obj_, ref.obj_);
44
- Object::swap(ref);
45
- }
46
-
47
- } // namespace Rice
48
-
49
- #endif // Rice__Builtin_Object__ipp_
50
-
@@ -1,50 +0,0 @@
1
- #ifndef Rice__Builtin_Object_defn__hpp_
2
- #define Rice__Builtin_Object_defn__hpp_
3
-
4
- #include "Object_defn.hpp"
5
- #include "detail/ruby.hpp"
6
-
7
- namespace Rice
8
- {
9
-
10
- //! A smartpointer-like wrapper for Ruby builtin objects.
11
- /*! A builtin object is one of Ruby's internal types, e.g. RArray or
12
- * RString. Every builtin type structure has a corresponding integer
13
- * type number (e.g T_ARRAY for RArray or T_STRING for RString). This
14
- * class is a wrapper for those types of objects, primarily useful as a
15
- * base class for other wrapper classes like Array and Hash.
16
- */
17
- template<int Builtin_Type>
18
- class Builtin_Object
19
- : public Object
20
- {
21
- public:
22
- //! Wrap an already allocated Ruby object.
23
- /*! Checks to see if the object is an object of type Builtin_Type; a
24
- * C++ exception is thrown if this is not the case.
25
- * \param value the object to be wrapped.
26
- */
27
- Builtin_Object(Object value);
28
-
29
- //! Make a copy of a Builtin_Object
30
- /*! \param other the Builtin_Object to be copied.
31
- */
32
- Builtin_Object(Builtin_Object const & other);
33
-
34
- RObject & operator*() const { return *obj_; } //!< Return a reference to obj_
35
- RObject * operator->() const { return obj_; } //!< Return a pointer to obj_
36
- RObject * get() const { return obj_; } //!< Return a pointer to obj_
37
-
38
- //! Swap with another builtin object of the same type
39
- /*! \param ref the object with which to swap.
40
- */
41
- void swap(Builtin_Object<Builtin_Type> & ref);
42
-
43
- private:
44
- RObject * obj_;
45
- };
46
-
47
- } // namespace Rice
48
-
49
- #endif // Rice__Builtin_Object_defn__hpp_
50
-
data/rice/Class.cpp DELETED
@@ -1,57 +0,0 @@
1
- #include "Class.hpp"
2
- #include "Exception.hpp"
3
- #include "detail/creation_funcs.hpp"
4
-
5
- Rice::Class::
6
- Class()
7
- : Module_impl<Module, Class>()
8
- {
9
- }
10
-
11
- Rice::Class::
12
- Class(VALUE v)
13
- : Module_impl<Module, Class>(v)
14
- {
15
- if(::rb_type(v) != T_CLASS)
16
- {
17
- throw Exception(
18
- rb_eTypeError,
19
- "Expected a Class but got a %s",
20
- rb_class2name(CLASS_OF(v))); // TODO: might raise an exception
21
- }
22
- }
23
-
24
- Rice::Class & Rice::Class::
25
- undef_creation_funcs()
26
- {
27
- detail::undef_creation_funcs(*this);
28
- return *this;
29
- }
30
-
31
- Rice::Class Rice::
32
- define_class_under(
33
- Rice::Object module,
34
- char const * name,
35
- Rice::Object superclass)
36
- {
37
- VALUE v = rb_define_class_under(module, name, superclass);
38
- return Class(v);
39
- }
40
-
41
- Rice::Class Rice::
42
- define_class(
43
- char const * name,
44
- Rice::Object superclass)
45
- {
46
- VALUE v = rb_define_class(name, superclass);
47
- return Class(v);
48
- }
49
-
50
- Rice::Class Rice::
51
- anonymous_class(
52
- Rice::Object superclass)
53
- {
54
- VALUE v = Class(rb_cClass).call("new");
55
- return Class(v);
56
- }
57
-
data/rice/Class.hpp DELETED
@@ -1,8 +0,0 @@
1
- #ifndef Rice__Class__hpp_
2
- #define Rice__Class__hpp_
3
-
4
- #include "Class_defn.hpp"
5
- #include "Class.ipp"
6
-
7
- #endif // Rice__Class__hpp_
8
-
data/rice/Class.ipp DELETED
@@ -1,6 +0,0 @@
1
- #ifndef Rice__Class__ipp_
2
- #define Rice__Class__ipp_
3
-
4
- #include "Module.ipp"
5
-
6
- #endif // Rice__Class__ipp_
data/rice/Class_defn.hpp DELETED
@@ -1,84 +0,0 @@
1
- #ifndef Rice__Class_defn__hpp_
2
- #define Rice__Class_defn__hpp_
3
-
4
- #include "Object_defn.hpp"
5
- #include "Module_impl.hpp"
6
- #include "Module_defn.hpp"
7
- #include "to_from_ruby_defn.hpp"
8
- #include "Identifier.hpp"
9
-
10
- /*!
11
- * \example inheritance/animals.cpp
12
- * \example callbacks/sample_callbacks.cpp
13
- */
14
-
15
- namespace Rice
16
- {
17
-
18
- //! A helper for defining a Class and its methods.
19
- /*! This class provides a C++-style interface to ruby's Class class and
20
- * for defining methods on that class.
21
- */
22
- class Class
23
- : public Module_impl<Module, Class>
24
- {
25
- public:
26
- //! Default construct a new class wrapper and initialize it to
27
- //! rb_cObject.
28
- Class();
29
-
30
- //! Construct a new class wrapper from a ruby object of type T_CLASS.
31
- Class(VALUE v);
32
-
33
- //! Disallow creation of an instance from Ruby code.
34
- /*! Undefines the singleton method allocate (or new, if using a
35
- * version of ruby prior to 1.7) and the instance method initialize.
36
- */
37
- Class & undef_creation_funcs();
38
- };
39
-
40
- //! Define a new class in the namespace given by module.
41
- /*! \param module the Module in which to define the class.
42
- * \param name the name of the class.
43
- * \param superclass the base class to use.
44
- * \return the new class.
45
- */
46
- Class define_class_under(
47
- Object module,
48
- char const * name,
49
- Object superclass = rb_cObject);
50
-
51
- //! Define a new class in the default namespace.
52
- /*! \param name the name of the class.
53
- * \param superclass the base class to use.
54
- * \return the new class.
55
- */
56
- Class define_class(
57
- char const * name,
58
- Object superclass = rb_cObject);
59
-
60
- //! Create a new anonymous class.
61
- /*! \param superclass the base class to use.
62
- * \return the new class.
63
- */
64
- Class anonymous_class(
65
- Object superclass = rb_cObject);
66
-
67
- } // namespace Rice
68
-
69
- template<>
70
- inline
71
- Rice::Class from_ruby<Rice::Class>(Rice::Object x)
72
- {
73
- return Rice::Class(x);
74
- }
75
-
76
- template<>
77
- inline
78
- Rice::Object to_ruby<Rice::Class>(Rice::Class const & x)
79
- {
80
- return x;
81
- }
82
-
83
- #endif // Rice__Class_defn__hpp_
84
-
data/rice/Data_Type.cpp DELETED
@@ -1,54 +0,0 @@
1
- #include "Data_Type.hpp"
2
-
3
- Rice::Data_Type_Base::Casters * Rice::Data_Type_Base::casters_ = 0;
4
-
5
- Rice::Data_Type_Base::
6
- Data_Type_Base()
7
- : Module_impl<Class, Data_Type_Base>()
8
- {
9
- }
10
-
11
- Rice::Data_Type_Base::
12
- Data_Type_Base(VALUE v)
13
- : Module_impl<Class, Data_Type_Base>(v)
14
- {
15
- }
16
-
17
- Rice::Data_Type_Base::
18
- ~Data_Type_Base()
19
- {
20
- }
21
-
22
- Rice::Data_Type_Base::Casters &
23
- Rice::Data_Type_Base::
24
- casters()
25
- {
26
- // Initialize the casters_ if it is null
27
- if (!casters_)
28
- {
29
- // First, see if it has been previously registered with the
30
- // interpreter (possibly by another extension)
31
- Class object(rb_cObject);
32
- Object casters_object(object.attr_get("__rice_casters__"));
33
-
34
- if (casters_object.is_nil())
35
- {
36
- // If it is unset, then set it for the first time
37
- Data_Object<Casters> casters(
38
- new Casters,
39
- rb_cObject);
40
- object.iv_set("__rice_casters__", casters);
41
- casters_ = casters.get();
42
- }
43
- else
44
- {
45
- // If it is set, then use the existing value
46
- Data_Object<Casters> casters(
47
- casters_object);
48
- casters_ = casters.get();
49
- }
50
- }
51
-
52
- return *casters_;
53
- }
54
-
@@ -1,12 +0,0 @@
1
- #ifndef Rice__Data_Type_fwd__hpp_
2
- #define Rice__Data_Type_fwd__hpp_
3
-
4
- namespace Rice
5
- {
6
-
7
- template<typename T>
8
- class Data_Type;
9
-
10
- } // Rice
11
-
12
- #endif // Rice__Data_Type_fwd__hpp_
data/rice/Director.cpp DELETED
@@ -1,13 +0,0 @@
1
- #include "Director.hpp"
2
-
3
- namespace Rice {
4
-
5
- Director::Director(Object self) {
6
- self_ = self;
7
- }
8
-
9
- void Director::raisePureVirtual() const {
10
- rb_raise(rb_eNotImpError, "Cannot call super() into a pure-virtual C++ method");
11
- }
12
-
13
- }
data/rice/Exception.cpp DELETED
@@ -1,54 +0,0 @@
1
- #include "Exception.hpp"
2
- #include "protect.hpp"
3
- #include "to_from_ruby.hpp"
4
- #include "detail/ruby.hpp"
5
-
6
- #include <stdarg.h>
7
- #define va_init_list(a,b) va_start(a,b)
8
-
9
- Rice::Exception::
10
- Exception(VALUE e)
11
- : Exception_Base(e)
12
- , message_(Qnil)
13
- , message_guard_(&message_)
14
- {
15
- }
16
-
17
- Rice::Exception::
18
- Exception(Exception const & other)
19
- : Exception_Base(other)
20
- , message_(other.message_)
21
- , message_guard_(&message_)
22
- {
23
- }
24
-
25
- Rice::Exception::
26
- Exception(Object exc, char const * fmt, ...)
27
- : Exception_Base(Qnil)
28
- , message_(Qnil)
29
- , message_guard_(&message_)
30
- {
31
- va_list args;
32
- char buf[BUFSIZ];
33
-
34
- va_init_list(args, fmt);
35
- vsnprintf(buf, BUFSIZ, fmt, args);
36
- buf[BUFSIZ - 1] = '\0';
37
- va_end(args);
38
-
39
- set_value(protect(rb_exc_new2, exc, buf));
40
- }
41
-
42
- Rice::String Rice::Exception::
43
- message() const
44
- {
45
- return protect(rb_funcall, value(), rb_intern("message"), 0);
46
- }
47
-
48
- char const * Rice::Exception::
49
- what() const throw()
50
- {
51
- message_ = message();
52
- return from_ruby<char const *>(message_);
53
- }
54
-
@@ -1,8 +0,0 @@
1
- #ifndef Rice__Exception_Base__hpp_
2
- #define Rice__Exception_Base__hpp_
3
-
4
- #include "Exception_Base_defn.hpp"
5
- #include "Exception_Base.ipp"
6
-
7
- #endif // Rice__Exception_Base__hpp_
8
-
@@ -1,13 +0,0 @@
1
- #include "Object.hpp"
2
-
3
- inline Rice::Exception_Base::
4
- Exception_Base(VALUE v)
5
- : Object(v)
6
- {
7
- }
8
-
9
- inline Rice::Exception_Base::
10
- ~Exception_Base() throw()
11
- {
12
- }
13
-
@@ -1,27 +0,0 @@
1
- #ifndef Rice__Exception_Base_defn__hpp_
2
- #define Rice__Exception_Base_defn__hpp_
3
-
4
- #include "Object_defn.hpp"
5
-
6
- namespace Rice
7
- {
8
-
9
- //! An abstract interface for Exception
10
- /*! This class exists to prevent a circular reference between
11
- * Exception.hpp and ruby_try_catch.hpp
12
- */
13
- class Exception_Base
14
- : public std::exception
15
- , public Object
16
- {
17
- public:
18
- Exception_Base(VALUE v);
19
-
20
- virtual ~Exception_Base() throw() = 0;
21
-
22
- virtual char const * what() const throw() = 0;
23
- };
24
-
25
- } // Rice
26
-
27
- #endif // Rice__Exception_Base_defn__hpp_
data/rice/Hash.hpp DELETED
@@ -1,230 +0,0 @@
1
- #ifndef Rice__Hash__hpp_
2
- #define Rice__Hash__hpp_
3
-
4
- #include "Builtin_Object_defn.hpp"
5
- #include "Array.hpp"
6
- #include "to_from_ruby_defn.hpp"
7
- #include "detail/ruby.hpp"
8
- #include <iterator>
9
- #include <type_traits>
10
-
11
- namespace Rice
12
- {
13
-
14
- //! A wrapper for the ruby Hash class.
15
- //! This class provides a C++-style interface to ruby's Hash class and
16
- //! its associated rb_hash_* functions.
17
- //! Example:
18
- //! \code
19
- //! Hash h;
20
- //! h[42] = String("foo");
21
- //! h[10] = String("bar");
22
- //! std::cout << String(h[42]) << std::endl;
23
- //! \endcode
24
- class Hash
25
- : public Builtin_Object<T_HASH>
26
- {
27
- public:
28
- //! Construct a new hash.
29
- Hash();
30
-
31
- //! Wrap an existing hash.
32
- /*! \param v the hash to wrap.
33
- */
34
- Hash(Object v);
35
-
36
- //! Return the number of elements in the hash.
37
- size_t size() const;
38
-
39
- private:
40
- //! A helper class so hash[key]=value can work.
41
- class Proxy;
42
-
43
- public:
44
- //! Get the value for the given key.
45
- /*! \param key the key whose value should be retrieved from the hash.
46
- * \return the value associated with the given key.
47
- */
48
- template<typename Key_T>
49
- Proxy const operator[](Key_T const & key) const;
50
-
51
- //! Get the value for the given key.
52
- /*! \param key the key whose value should be retrieved from the hash.
53
- * \return the value associated with the given key.
54
- */
55
- template<typename Key_T>
56
- Proxy operator[](Key_T const & key);
57
-
58
- //! Get the value for the given key
59
- /*! The returned value is converted to the type given by Value_T.
60
- * \param key the key whose value should be retrieved from the hash.
61
- * \return the value associated with the given key, converted to C++
62
- * type Value_T.
63
- */
64
- template<typename Value_T, typename Key_T>
65
- Value_T get(Key_T const & key);
66
-
67
- //! A helper class for dereferencing iterators
68
- class Entry;
69
-
70
- //! A helper class for implementing iterators for a Hash.
71
- template<typename Hash_Ref_T, typename Value_T>
72
- class Iterator;
73
-
74
- public:
75
- //! An iterator.
76
- typedef Iterator<Hash &, Entry> iterator;
77
-
78
- //! A const iterator.
79
- typedef Iterator<Hash const &, Entry const> const_iterator;
80
-
81
- public:
82
- //! Return an iterator to the beginning of the hash.
83
- iterator begin();
84
-
85
- //! Return a const iterator to the beginning of the hash.
86
- const_iterator begin() const;
87
-
88
- //! Return an iterator to the end of the hash.
89
- iterator end();
90
-
91
- //! Return a const to the end of the hash.
92
- const_iterator end() const;
93
- };
94
-
95
- //! A helper class so hash[key]=value can work.
96
- class Hash::Proxy
97
- {
98
- public:
99
- //! Construct a new Proxy.
100
- Proxy(Hash hash, Object key);
101
-
102
- //! Implicit conversion to Object.
103
- operator Object() const;
104
-
105
- //! Explicit conversion to VALUE.
106
- VALUE value() const;
107
-
108
- //! Assignment operator.
109
- template<typename T>
110
- Object operator=(T const & value);
111
-
112
- void swap(Proxy & proxy);
113
-
114
- private:
115
- Hash hash_;
116
- Object key_;
117
- };
118
-
119
- //! A helper class for dereferencing iterators
120
- /*! This class is intended to look similar to an std::pair.
121
- */
122
- class Hash::Entry
123
- {
124
- public:
125
- //! Construct a new Entry.
126
- Entry(Hash hash, Object key);
127
-
128
- //! Copy constructor.
129
- Entry(Entry const & entry);
130
-
131
- Object const key; //!< The key
132
- Object const & first; //!< An alias for the key
133
-
134
- Proxy value; //!< The value
135
- Proxy & second; //!< An alias for the value
136
-
137
- Entry & operator=(Entry const & rhs);
138
-
139
- void swap(Entry & entry);
140
-
141
- friend bool operator<(Entry const & lhs, Entry const & rhs);
142
- };
143
-
144
- bool operator<(Hash::Entry const & lhs, Hash::Entry const & rhs);
145
-
146
- //! A helper class for implementing iterators for a Hash.
147
- template<typename Hash_Ref_T, typename Value_T>
148
- class Hash::Iterator
149
- {
150
- public:
151
- using iterator_category = std::input_iterator_tag;
152
- using value_type = Value_T;
153
- using difference_type = long;
154
- using pointer = Object*;
155
- using reference = Value_T&;
156
-
157
- //! Construct a new Iterator.
158
- Iterator(Hash_Ref_T hash);
159
-
160
- //! Construct a new Iterator with a given start-at index point
161
- Iterator(Hash_Ref_T hash, int start_at);
162
-
163
- //! Copy construct an Iterator.
164
- Iterator(Iterator const & iterator);
165
-
166
- //! Construct an Iterator from another Iterator of a different const
167
- //! qualification.
168
- template<typename Iterator_T>
169
- Iterator(Iterator_T const & iterator);
170
-
171
- //! Assignment operator.
172
- Iterator & operator=(Iterator const & rhs);
173
-
174
- //! Preincrement operator.
175
- Iterator & operator++();
176
-
177
- //! Postincrement operator.
178
- Iterator operator++(int);
179
-
180
- //! Dereference operator.
181
- Value_T operator*();
182
-
183
- //! Dereference operator.
184
- Value_T * operator->();
185
-
186
- //! Equality operator.
187
- bool operator==(Iterator const & rhs) const;
188
-
189
- //! Inequality operator.
190
- bool operator!=(Iterator const & rhs) const;
191
-
192
- template<typename Hash_Ref_T_, typename Value_T_>
193
- friend class Hash::Iterator;
194
-
195
- //! Swap with another iterator of the same type.
196
- void swap(Iterator & iterator);
197
-
198
- protected:
199
- Object current_key();
200
-
201
- Array hash_keys();
202
-
203
- private:
204
- Hash hash_;
205
- size_t current_index_;
206
- VALUE keys_;
207
-
208
- mutable typename std::remove_const<Value_T>::type tmp_;
209
- };
210
-
211
- } // namespace Rice
212
-
213
- template<>
214
- inline
215
- Rice::Hash from_ruby<Rice::Hash>(Rice::Object x)
216
- {
217
- return Rice::Hash(x);
218
- }
219
-
220
- template<>
221
- inline
222
- Rice::Object to_ruby<Rice::Hash>(Rice::Hash const & x)
223
- {
224
- return x;
225
- }
226
-
227
- #include "Hash.ipp"
228
-
229
- #endif // Rice__Hash__hpp_
230
-