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
data/rice/Module.cpp DELETED
@@ -1,84 +0,0 @@
1
- #include "Module.hpp"
2
- #include "Symbol.hpp"
3
- #include "String.hpp"
4
- #include "Array.hpp"
5
- #include "Exception.hpp"
6
- #include "protect.hpp"
7
-
8
- Rice::Module::
9
- Module()
10
- : Module_impl<Module_base, Module>(rb_cObject)
11
- {
12
- }
13
-
14
- Rice::Module::
15
- Module(VALUE v)
16
- : Module_impl<Module_base, Module>(v)
17
- {
18
- if(::rb_type(v) != T_CLASS && ::rb_type(v) != T_MODULE)
19
- {
20
- throw Exception(
21
- rb_eTypeError,
22
- "Expected a Module but got a %s",
23
- rb_class2name(CLASS_OF(v))); // TODO: might raise an exception
24
- }
25
- }
26
-
27
- Rice::String Rice::Module::
28
- name() const
29
- {
30
- Object name = rb_mod_name(*this);
31
- if(name.is_nil())
32
- {
33
- // 1.9
34
- return String("");
35
- }
36
- else
37
- {
38
- return name;
39
- }
40
- }
41
-
42
- Rice::Module Rice::
43
- define_module_under(
44
- Rice::Object module,
45
- char const * name)
46
- {
47
- VALUE v = rb_define_module_under(module, name);
48
- return Module(v);
49
- }
50
-
51
- Rice::Module Rice::
52
- define_module(
53
- char const * name)
54
- {
55
- VALUE v = rb_define_module(name);
56
- return Module(v);
57
- }
58
-
59
- Rice::Module Rice::
60
- anonymous_module()
61
- {
62
- return Module(protect(rb_module_new));
63
- }
64
-
65
- void Rice::Module::
66
- swap(Rice::Module & other)
67
- {
68
- Module_base::swap(other);
69
- }
70
-
71
- Rice::Array
72
- Rice::Module::
73
- ancestors() const
74
- {
75
- return protect(rb_mod_ancestors, *this);
76
- }
77
-
78
- Rice::Class
79
- Rice::Module::
80
- singleton_class() const
81
- {
82
- return CLASS_OF(value());
83
- }
84
-
data/rice/Module.hpp DELETED
@@ -1,8 +0,0 @@
1
- #ifndef Rice__builtin__Module__hpp_
2
- #define Rice__builtin__Module__hpp_
3
-
4
- #include "Module_defn.hpp"
5
- #include "Module.ipp"
6
-
7
- #endif // Rice__builtin__Module__hpp_
8
-
data/rice/Module.ipp DELETED
@@ -1,6 +0,0 @@
1
- #ifndef Rice__Module__ipp_
2
- #define Rice__Module__ipp_
3
-
4
- #include "Module_impl.ipp"
5
-
6
- #endif // Rice__Module__ipp_
data/rice/Module_defn.hpp DELETED
@@ -1,88 +0,0 @@
1
- #ifndef Rice__Module_defn__hpp_
2
- #define Rice__Module_defn__hpp_
3
-
4
- #include "Object_defn.hpp"
5
- #include "Module_impl.hpp"
6
- #include "to_from_ruby_defn.hpp"
7
- #include <memory>
8
-
9
- namespace Rice
10
- {
11
-
12
- class Array;
13
- class Class;
14
- class String;
15
-
16
- //! A helper for defining a Module and its methods.
17
- /*! This class provides a C++-style interface to ruby's Module class and
18
- * for defining methods on that module.
19
- *
20
- * Many of the methods are defined in Module_impl.hpp so that they can
21
- * return a reference to the most derived type.
22
- */
23
- class Module
24
- // TODO: we can't inherit from Builtin_Object, because Class needs
25
- // type T_CLASS and Module needs type T_MODULE
26
- : public Module_impl<Module_base, Module>
27
- {
28
- public:
29
- //! Default construct a Module and initialize it to rb_cObject.
30
- Module();
31
-
32
- //! Construct a Module from an existing Module object.
33
- Module(VALUE v);
34
-
35
- //! Return the name of the module.
36
- String name() const;
37
-
38
- //! Swap with another Module.
39
- void swap(Module & other);
40
-
41
- //! Return an array containing the Module's ancestors.
42
- /*! You will need to include Array.hpp to use this function.
43
- */
44
- Array ancestors() const;
45
-
46
- //! Return the module's singleton class.
47
- /*! You will need to include Class.hpp to use this function.
48
- */
49
- Class singleton_class() const;
50
- };
51
-
52
- //! Define a new module in the namespace given by module.
53
- /*! \param module the module in which to define the new module.
54
- * \param name the name of the new module.
55
- */
56
- Module define_module_under(
57
- Object module,
58
- char const * name);
59
-
60
- //! Define a new module in the default namespace.
61
- /*! \param name the name of the new module.
62
- */
63
- Module define_module(
64
- char const * name);
65
-
66
- //! Create a new anonymous module.
67
- /*! \return the new module.
68
- */
69
- Module anonymous_module();
70
-
71
- } // namespace Rice
72
-
73
- template<>
74
- inline
75
- Rice::Module from_ruby<Rice::Module>(Rice::Object x)
76
- {
77
- return Rice::Module(x);
78
- }
79
-
80
- template<>
81
- inline
82
- Rice::Object to_ruby<Rice::Module>(Rice::Module const & x)
83
- {
84
- return x;
85
- }
86
-
87
- #endif // Rice__Module_defn__hpp_
88
-
data/rice/Module_impl.hpp DELETED
@@ -1,281 +0,0 @@
1
- #ifndef Rice__Module_impl__hpp_
2
- #define Rice__Module_impl__hpp_
3
-
4
- #include "detail/Exception_Handler_defn.hpp"
5
- #include "detail/ruby.hpp"
6
- #include "Object_defn.hpp"
7
- #include "Address_Registration_Guard_defn.hpp"
8
- #include "Arg.hpp"
9
-
10
- namespace Rice
11
- {
12
-
13
- class Module;
14
- class Class;
15
- template<typename T> class Data_Type;
16
-
17
- /*! Holds all member data of Module_impl so it only exists in one place
18
- * in the hierarchy.
19
- */
20
- class Module_base
21
- : public Object
22
- {
23
- public:
24
- Module_base(VALUE v = rb_cObject);
25
- Module_base(Module_base const & other);
26
-
27
- Module_base & operator=(Module_base const & other);
28
-
29
- void swap(Module_base & other);
30
-
31
- protected:
32
- template<typename Exception_T, typename Functor_T>
33
- void add_handler(Functor_T functor);
34
-
35
- Object handler() const;
36
-
37
- private:
38
- Object mutable handler_;
39
- Address_Registration_Guard handler_guard_;
40
- };
41
-
42
- /*! An intermediate base class so we can always return the most-derived
43
- * type (Module, Class, Data_Type, ...) without having to re-implement
44
- * each function for each derived class.
45
- */
46
- template<typename Base_T, typename Derived_T>
47
- class Module_impl
48
- : public Base_T
49
- {
50
- public:
51
- Module_impl();
52
-
53
- template<typename T>
54
- Module_impl(T const & arg);
55
-
56
- //! Define an exception handler.
57
- /*! Whenever an exception of type Exception_T is thrown from a
58
- * function defined on this class, functor will be called to
59
- * translate the exception into a ruby exception.
60
- * \param Exception_T a template parameter indicating the type of
61
- * exception to be translated.
62
- * \param functor a functor to be called to translate the exception
63
- * into a ruby exception. This functor should re-throw the exception
64
- * as an Exception.
65
- * Example:
66
- * \code
67
- * class MyException : public std::exception { };
68
- * Data_Type<MyException> rb_cMyException;
69
- * Class rb_cFoo;
70
- *
71
- * void translate_my_exception(MyException const & ex)
72
- * {
73
- * Data_Object<MyException> ex_(
74
- * new MyException(ex),
75
- * rb_cMyException);
76
- * throw Exception(ex_);
77
- * }
78
- *
79
- * extern "C"
80
- * void Init_MyExtension()
81
- * {
82
- * rb_cMyException = define_class("MyException");
83
- * rb_cFoo = define_class("Foo")
84
- * .add_handler<MyException>(translate_my_exception);
85
- * }
86
- * \endcode
87
- */
88
- template<typename Exception_T, typename Functor_T>
89
- Derived_T & add_handler(
90
- Functor_T functor);
91
-
92
- //! Define an instance method.
93
- /*! The method's implementation can be any function or member
94
- * function. A wrapper will be generated which will use from_ruby<>
95
- * to convert the arguments from ruby types to C++ types before
96
- * calling the function. The return value will be converted back to
97
- * ruby by using to_ruby().
98
- * \param name the name of the method
99
- * \param func the implementation of the function, either a function
100
- * pointer or a member function pointer.
101
- * \param arguments the list of arguments of this function, used for
102
- * defining default parameters (optional)
103
- * \return *this
104
- */
105
- template<typename Func_T>
106
- Derived_T & define_method(
107
- Identifier name,
108
- Func_T func,
109
- Arguments* arguments = 0);
110
-
111
- // FIXME There's GOT to be a better way to
112
- // do this. Handles the case where there is a single
113
- // argument defined for this method
114
- template<typename Func_T>
115
- Derived_T & define_method(
116
- Identifier name,
117
- Func_T func,
118
- Arg const& arg);
119
-
120
- //! Define a singleton method.
121
- /*! The method's implementation can be any function or member
122
- * function. A wrapper will be generated which will use from_ruby<>
123
- * to convert the arguments from ruby types to C++ types before
124
- * calling the function. The return value will be converted back to
125
- * ruby by using to_ruby().
126
- * \param name the name of the method
127
- * \param func the implementation of the function, either a function
128
- * pointer or a member function pointer.
129
- * \param arguments the list of arguments of this function, used for
130
- * defining default parameters (optional)
131
- * \return *this
132
- */
133
- template<typename Func_T>
134
- Derived_T & define_singleton_method(
135
- Identifier name,
136
- Func_T func,
137
- Arguments* arguments = 0);
138
-
139
- // FIXME: See define_method with Arg above
140
- template<typename Func_T>
141
- Derived_T & define_singleton_method(
142
- Identifier name,
143
- Func_T func,
144
- Arg const& arg);
145
-
146
- //! Define a module function.
147
- /*! A module function is a function that can be accessed either as a
148
- * singleton method or as an instance method.
149
- * The method's implementation can be any function or member
150
- * function. A wrapper will be generated which will use from_ruby<>
151
- * to convert the arguments from ruby types to C++ types before
152
- * calling the function. The return value will be converted back to
153
- * ruby by using to_ruby().
154
- * \param name the name of the method
155
- * \param func the implementation of the function, either a function
156
- * pointer or a member function pointer.
157
- * \param arguments the list of arguments of this function, used for
158
- * defining default parameters (optional)
159
- * \return *this
160
- */
161
- template<typename Func_T>
162
- Derived_T & define_module_function(
163
- Identifier name,
164
- Func_T func,
165
- Arguments* arguments = 0);
166
-
167
- // FIXME: See define_method with Arg above
168
- template<typename Func_T>
169
- Derived_T & define_module_function(
170
- Identifier name,
171
- Func_T func,
172
- Arg const& arg);
173
-
174
- //! Define an iterator.
175
- /*! Essentially this is a conversion from a C++-style begin/end
176
- * iterator to a Ruby-style \#each iterator.
177
- * \param begin a member function pointer to a function that returns
178
- * an iterator to the beginning of the sequence.
179
- * \param end a member function pointer to a function that returns an
180
- * iterator to the end of the sequence.
181
- * \param name the name of the iterator.
182
- * \return *this
183
- */
184
- template<typename T, typename Iterator_T>
185
- Derived_T & define_iterator(
186
- Iterator_T (T::*begin)(),
187
- Iterator_T (T::*end)(),
188
- Identifier name = "each");
189
-
190
- //! Include a module.
191
- /*! \param inc the module to be included.
192
- * \return *this
193
- */
194
- Derived_T & include_module(
195
- Module const & inc);
196
-
197
- //! Set a constant.
198
- /*! \param name the name of the constant to set.
199
- * \param value the value of the constant.
200
- * \return *this
201
- */
202
- Derived_T & const_set(
203
- Identifier name,
204
- Object value);
205
-
206
- //! Get a constant.
207
- /*! \param name the name of the constant to get.
208
- * \return the value of the constant.
209
- */
210
- Object const_get(
211
- Identifier name) const;
212
-
213
- //! Determine whether a constant is defined.
214
- /*! \param name the name of the constant to check.
215
- * \return true if the constant is defined in this module or false
216
- * otherwise.
217
- */
218
- bool const_defined(
219
- Identifier name) const;
220
-
221
- //! Remove a constant.
222
- /*! \param name the name of the constant to remove.
223
- */
224
- void remove_const(
225
- Identifier name);
226
-
227
- //! Define a module under this module.
228
- /*! \param name the name of the module.
229
- * \return the new class.
230
- */
231
- Module define_module(
232
- char const * name);
233
-
234
- //! Define a class under this module.
235
- /*! \param name the name of the class.
236
- * \param superclass the base class to use.
237
- * \return the new class.
238
- */
239
- Class define_class(
240
- char const * name,
241
- Object superclass = rb_cObject);
242
-
243
- //! Define a new data class under this module.
244
- /*! The class will have a base class of Object.
245
- * \param T the C++ type of the wrapped class.
246
- * \return the new class.
247
- */
248
- // This function needs to be defined inline to work around a bug in
249
- // g++ 3.3.3.
250
- template<typename T>
251
- Data_Type<T>
252
- define_class(
253
- char const * name)
254
- {
255
- return this->define_class_with_object_as_base<T>(name);
256
- }
257
-
258
- //! Define a new data class under this module.
259
- /*! The class with have a base class determined by Base_T (specifically,
260
- * Data_Type<Base_T>::klass). Therefore, the type Base_T must already
261
- * have been registered using define_class<> or define_class_under<>.
262
- * \param T the C++ type of the wrapped class.
263
- * \return the new class.
264
- */
265
- template<typename T, typename T_Base_T>
266
- Data_Type<T>
267
- define_class(
268
- char const * name);
269
-
270
- private:
271
- // Workaround for g++ 3.3.3 (see above).
272
- template<typename T>
273
- Data_Type<T>
274
- define_class_with_object_as_base(
275
- char const * name);
276
- };
277
-
278
- } // namespace Rice
279
-
280
- #endif // Rice__Module_impl__hpp_
281
-