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
@@ -1,103 +0,0 @@
1
- #ifndef Rice__detail__Caster__hpp_
2
- #define Rice__detail__Caster__hpp_
3
-
4
- #include "../Module.hpp"
5
- #include <stdexcept>
6
-
7
- namespace Rice
8
- {
9
-
10
- namespace detail
11
- {
12
-
13
- class Abstract_Caster
14
- {
15
- public:
16
- virtual void * cast_to_base(void * derived, Module type) const = 0;
17
- virtual ~Abstract_Caster() { }
18
- };
19
-
20
- template<typename Derived_T, typename Base_T>
21
- class Caster
22
- : public Abstract_Caster
23
- {
24
- public:
25
- Caster(Abstract_Caster * base_caster, Module type)
26
- : base_caster_(base_caster)
27
- , type_(type)
28
- {
29
- }
30
-
31
- protected:
32
- virtual void * cast_to_base(void * derived, Module type) const
33
- {
34
- if(type.value() == type_.value())
35
- {
36
- Derived_T * d(static_cast<Derived_T *>(derived));
37
- return static_cast<Base_T *>(d);
38
- }
39
- else
40
- {
41
- if(base_caster_)
42
- {
43
- return base_caster_->cast_to_base(derived, type);
44
- }
45
- else
46
- {
47
- std::string s = "bad cast. No caster found for ";
48
- s += type_.name().str();
49
- throw std::runtime_error(s);
50
- }
51
- }
52
- }
53
-
54
- private:
55
- Abstract_Caster * base_caster_;
56
- Module type_;
57
- };
58
-
59
- template<typename To_T, typename From_T>
60
- class Implicit_Caster
61
- : public Abstract_Caster
62
- {
63
- public:
64
- Implicit_Caster(Abstract_Caster * base_caster, Module type)
65
- : base_caster_(base_caster)
66
- , type_(type)
67
- {
68
- }
69
-
70
- protected:
71
- virtual void * cast_to_base(void * derived, Module type) const
72
- {
73
- if(type.value() == type_.value())
74
- {
75
- return new To_T( *static_cast<From_T*>(derived) );
76
- }
77
- else
78
- {
79
- if(base_caster_)
80
- {
81
- return base_caster_->cast_to_base(derived, type);
82
- }
83
- else
84
- {
85
- std::string s = "bad cast. No implicit caster found for ";
86
- s += type_.name().str();
87
- throw std::runtime_error(s);
88
- }
89
- }
90
- }
91
-
92
- private:
93
- Abstract_Caster * base_caster_;
94
- Module type_;
95
- };
96
-
97
-
98
-
99
- } // detail
100
-
101
- } // Rice
102
-
103
- #endif //Rice__detail__Caster__hpp_
@@ -1,25 +0,0 @@
1
- #ifndef Rice__Not_Copyable__hpp_
2
- #define Rice__Not_Copyable__hpp_
3
-
4
- namespace Rice
5
- {
6
-
7
- namespace detail
8
- {
9
-
10
- // Inherit from Not_Copyable to prevent copying instances of a class.
11
- class Not_Copyable
12
- {
13
- public:
14
- Not_Copyable() { }
15
-
16
- private:
17
- Not_Copyable(Not_Copyable const &);
18
- Not_Copyable & operator=(Not_Copyable const &);
19
- };
20
-
21
- } // namespace detail
22
-
23
- } // namespace Rice
24
-
25
- #endif // Rice__Not_Copyable__hpp_
@@ -1,33 +0,0 @@
1
- #ifndef Rice__detail__Wrapped_Function__hpp_
2
- #define Rice__detail__Wrapped_Function__hpp_
3
-
4
- #include "ruby.hpp"
5
-
6
- namespace Rice
7
- {
8
-
9
- namespace detail
10
- {
11
-
12
- class Wrapped_Function
13
- {
14
- public:
15
- Wrapped_Function(RUBY_METHOD_FUNC func, int arity)
16
- : func_(func)
17
- , arity_(arity)
18
- {
19
- }
20
-
21
- RUBY_METHOD_FUNC func() const { return func_; }
22
- int arity() const { return arity_; }
23
-
24
- private:
25
- RUBY_METHOD_FUNC func_;
26
- int arity_;
27
- };
28
-
29
- } // detail
30
-
31
- } // Rice
32
-
33
- #endif // Rice__detail__Wrapped_Function__hpp_
data/rice/detail/cfp.hpp DELETED
@@ -1,24 +0,0 @@
1
- #ifndef Rice__detail__cfp__hpp_
2
- #define Rice__detail__cfp__hpp_
3
-
4
- #include "ruby.hpp"
5
-
6
- namespace Rice
7
- {
8
-
9
- namespace detail
10
- {
11
-
12
- VALUE * cfp();
13
-
14
- VALUE & cfp_data_memo_node_and_pc(VALUE * cfp);
15
- VALUE & cfp_self(VALUE * cfp);
16
- VALUE & cfp_method_class(VALUE * cfp);
17
-
18
- } // detail
19
-
20
- } // Rice
21
-
22
- #include "cfp.ipp"
23
-
24
- #endif // Rice__detail__cfp__hpp_
data/rice/detail/cfp.ipp DELETED
@@ -1,51 +0,0 @@
1
- namespace detail
2
- {
3
-
4
- struct rb_thread_struct
5
- {
6
- VALUE self;
7
- void *vm;
8
- VALUE *stack;
9
- unsigned long stack_size;
10
- VALUE *cfp;
11
- /* ... */
12
- };
13
-
14
- typedef struct rb_thread_struct rb_thread_t;
15
-
16
- } // namespace detail
17
-
18
- extern "C" detail::rb_thread_t * ruby_current_thread;
19
-
20
- inline
21
- VALUE *
22
- Rice::detail::
23
- cfp()
24
- {
25
- return ruby_current_thread->cfp;
26
- }
27
-
28
- inline
29
- VALUE &
30
- Rice::detail::
31
- cfp_data_memo_node_and_pc(VALUE * cfp)
32
- {
33
- return cfp[0];
34
- }
35
-
36
- inline
37
- VALUE &
38
- Rice::detail::
39
- cfp_self(VALUE * cfp)
40
- {
41
- return cfp[5];
42
- }
43
-
44
- inline
45
- VALUE &
46
- Rice::detail::
47
- cfp_method_class(VALUE * cfp)
48
- {
49
- return cfp[11];
50
- }
51
-
@@ -1,27 +0,0 @@
1
- #include "check_ruby_type.hpp"
2
- #include "../Exception.hpp"
3
-
4
- void Rice::detail::
5
- check_ruby_type(
6
- VALUE value,
7
- VALUE klass,
8
- bool include_super
9
- )
10
- {
11
- if( !rb_obj_is_kind_of(value, klass) ||
12
- (!include_super && rb_obj_class(value) != klass))
13
- {
14
- // Not sure why this stuff can't be chained
15
- VALUE gotV = protect(rb_mod_name, rb_obj_class(value));
16
- char* got = StringValuePtr(gotV);
17
- VALUE exptV = protect(rb_mod_name, klass);
18
- char* expected = StringValuePtr(exptV);
19
-
20
- throw Exception(
21
- rb_eTypeError,
22
- "wrong argument type %s (expected %s)",
23
- got, expected
24
- );
25
- }
26
- }
27
-
@@ -1,23 +0,0 @@
1
- #ifndef Rice__detail__check_ruby_type__hpp_
2
- #define Rice__detail__check_ruby_type__hpp_
3
-
4
- #include "ruby.hpp"
5
-
6
- namespace Rice
7
- {
8
-
9
- namespace detail
10
- {
11
-
12
- // Throws an exception if the given object is not of type klass.
13
- void check_ruby_type(
14
- VALUE value,
15
- VALUE klass,
16
- bool include_super);
17
-
18
- } // namespace detail
19
-
20
- } // namespace Rice
21
-
22
- #endif // Rice__detail__check_ruby_type__hpp_
23
-
@@ -1,37 +0,0 @@
1
- #ifndef Rice__detail__creation_funcs__hpp_
2
- #define Rice__detail__creation_funcs__hpp_
3
-
4
- namespace Rice
5
- {
6
-
7
- class Class;
8
-
9
- namespace detail
10
- {
11
-
12
- //! Like define_alloc_func, but allows the user to define an
13
- //! "initialize" method too.
14
- template<typename Initialize_Func_T>
15
- void define_creation_funcs(
16
- Class const & klass,
17
- RUBY_VALUE_FUNC allocate_func,
18
- Initialize_Func_T initialize_func);
19
-
20
- //! This is just the opposite of define_alloc_func. It can be
21
- //! used to create a class that cannot be instantiated by the user.
22
- void undef_alloc_func(
23
- Class const & klass);
24
-
25
- //! This is just the opposite of define_creation_func. It can be
26
- //! used to create a class that cannot be instantiated by the user.
27
- void undef_creation_funcs(
28
- Class const & klass);
29
-
30
- } // namespace detail
31
-
32
- } // namespace Rice
33
-
34
- #include "creation_funcs.ipp"
35
-
36
- #endif // Rice__detail__creation_funcs__hpp_
37
-
@@ -1,36 +0,0 @@
1
- #ifndef Rice__detail__creation_funcs__ipp_
2
- #define Rice__detail__creation_funcs__ipp_
3
-
4
- namespace Rice
5
- {
6
-
7
- namespace detail
8
- {
9
-
10
- template<typename Initialize_Func_T>
11
- inline void define_creation_funcs(
12
- Class const & klass,
13
- RUBY_VALUE_FUNC allocate_func,
14
- Initialize_Func_T initialize_func)
15
- {
16
- rb_define_alloc_func(klass, allocate_func);
17
- klass.define_method("initialize", initialize_func);
18
- }
19
-
20
- inline void undef_alloc_func(Class const & klass)
21
- {
22
- rb_undef_alloc_func(klass);
23
- }
24
-
25
- inline void undef_creation_funcs(Class const & klass)
26
- {
27
- undef_alloc_func(klass);
28
- rb_undef_method(klass, "initialize");
29
- }
30
-
31
- } // namespace detail
32
-
33
- } // namespace Rice
34
-
35
- #endif // Rice__detail__creation_funcs__ipp_
36
-
@@ -1,31 +0,0 @@
1
- #ifndef Rice__detail__define_method_and_auto_wrap__hpp_
2
- #define Rice__detail__define_method_and_auto_wrap__hpp_
3
-
4
- #include "ruby.hpp"
5
- #include "../Data_Object.hpp"
6
- #include "../Identifier.hpp"
7
- #include "Arguments.hpp"
8
-
9
- namespace Rice
10
- {
11
-
12
- namespace detail
13
- {
14
-
15
- class Exception_Handler;
16
-
17
- template<typename Fun_T>
18
- void define_method_and_auto_wrap(
19
- VALUE klass,
20
- Identifier name,
21
- Fun_T function,
22
- Data_Object<Exception_Handler> handler,
23
- Arguments* arguments = 0);
24
-
25
- } // detail
26
-
27
- } // Rice
28
-
29
- #include "define_method_and_auto_wrap.ipp"
30
-
31
- #endif // Rice__detail__define_method_and_auto_wrap__hpp_
@@ -1,30 +0,0 @@
1
- #ifndef Rice__detail__define_method_and_auto_wrap__ipp_
2
- #define Rice__detail__define_method_and_auto_wrap__ipp_
3
-
4
- #include "wrap_function.hpp"
5
- #include "method_data.hpp"
6
- #include "Exception_Handler_defn.hpp"
7
- #include "../protect.hpp"
8
-
9
- template<typename Fun_T>
10
- void Rice::detail::
11
- define_method_and_auto_wrap(
12
- VALUE klass,
13
- Identifier name,
14
- Fun_T function,
15
- Data_Object<Exception_Handler> handler,
16
- Arguments* arguments)
17
- {
18
- Data_Object<Wrapped_Function> f(
19
- wrap_function(function, handler, arguments),
20
- rb_cObject);
21
- Rice::protect(
22
- define_method_with_data,
23
- klass,
24
- name.id(),
25
- f->func(),
26
- -1,
27
- f);
28
- }
29
-
30
- #endif // Rice__detail__define_method_and_auto_wrap__ipp_
@@ -1,56 +0,0 @@
1
- #include "demangle.hpp"
2
-
3
- #ifdef __GNUC__
4
- #include <cxxabi.h>
5
- #include <cstdlib>
6
- #include <cstring>
7
- #endif
8
-
9
- std::string
10
- Rice::detail::
11
- demangle(char const * mangled_name)
12
- {
13
- #ifdef __GNUC__
14
- struct Helper
15
- {
16
- Helper(
17
- char const * mangled_name)
18
- : name_(0)
19
- {
20
- int status = 0;
21
- name_ = abi::__cxa_demangle(mangled_name, 0, 0, &status);
22
- }
23
-
24
- ~Helper()
25
- {
26
- std::free(name_);
27
- }
28
-
29
- char * name_;
30
-
31
- private:
32
- Helper(Helper const &);
33
- void operator=(Helper const &);
34
- };
35
-
36
- Helper helper(mangled_name);
37
- if(helper.name_)
38
- {
39
- return helper.name_;
40
- }
41
- else
42
- {
43
- return mangled_name;
44
- }
45
- #else
46
- return mangled_name;
47
- #endif
48
- }
49
-
50
-
51
- std::string
52
- Rice::detail::
53
- demangle(std::string const & mangled_name)
54
- {
55
- return demangle(mangled_name.c_str());
56
- }