rice2 2.2.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 (190) hide show
  1. checksums.yaml +7 -0
  2. data/COPYING +23 -0
  3. data/Doxyfile +2268 -0
  4. data/Makefile.am +26 -0
  5. data/Makefile.in +929 -0
  6. data/README.md +1054 -0
  7. data/README.mingw +8 -0
  8. data/Rakefile +24 -0
  9. data/aclocal.m4 +1090 -0
  10. data/bootstrap +8 -0
  11. data/config.guess +1667 -0
  12. data/config.sub +1793 -0
  13. data/configure +8209 -0
  14. data/configure.ac +55 -0
  15. data/depcomp +791 -0
  16. data/doxygen.ac +314 -0
  17. data/doxygen.am +186 -0
  18. data/extconf.rb +66 -0
  19. data/install-sh +529 -0
  20. data/missing +215 -0
  21. data/post-autoconf.rb +22 -0
  22. data/post-automake.rb +28 -0
  23. data/rice/Address_Registration_Guard.cpp +22 -0
  24. data/rice/Address_Registration_Guard.hpp +7 -0
  25. data/rice/Address_Registration_Guard.ipp +37 -0
  26. data/rice/Address_Registration_Guard_defn.hpp +75 -0
  27. data/rice/Arg.hpp +8 -0
  28. data/rice/Arg_impl.hpp +129 -0
  29. data/rice/Arg_operators.cpp +21 -0
  30. data/rice/Arg_operators.hpp +19 -0
  31. data/rice/Array.hpp +214 -0
  32. data/rice/Array.ipp +256 -0
  33. data/rice/Builtin_Object.hpp +8 -0
  34. data/rice/Builtin_Object.ipp +50 -0
  35. data/rice/Builtin_Object_defn.hpp +50 -0
  36. data/rice/Class.cpp +57 -0
  37. data/rice/Class.hpp +8 -0
  38. data/rice/Class.ipp +6 -0
  39. data/rice/Class_defn.hpp +83 -0
  40. data/rice/Constructor.hpp +47 -0
  41. data/rice/Data_Object.hpp +8 -0
  42. data/rice/Data_Object.ipp +133 -0
  43. data/rice/Data_Object_defn.hpp +138 -0
  44. data/rice/Data_Type.cpp +54 -0
  45. data/rice/Data_Type.hpp +8 -0
  46. data/rice/Data_Type.ipp +365 -0
  47. data/rice/Data_Type_defn.hpp +261 -0
  48. data/rice/Data_Type_fwd.hpp +12 -0
  49. data/rice/Director.cpp +13 -0
  50. data/rice/Director.hpp +39 -0
  51. data/rice/Enum.hpp +117 -0
  52. data/rice/Enum.ipp +246 -0
  53. data/rice/Exception.cpp +59 -0
  54. data/rice/Exception.hpp +13 -0
  55. data/rice/Exception_Base.hpp +8 -0
  56. data/rice/Exception_Base.ipp +13 -0
  57. data/rice/Exception_Base_defn.hpp +27 -0
  58. data/rice/Exception_defn.hpp +69 -0
  59. data/rice/Hash.hpp +227 -0
  60. data/rice/Hash.ipp +329 -0
  61. data/rice/Identifier.cpp +8 -0
  62. data/rice/Identifier.hpp +50 -0
  63. data/rice/Identifier.ipp +33 -0
  64. data/rice/Jump_Tag.hpp +24 -0
  65. data/rice/Makefile.am +122 -0
  66. data/rice/Makefile.in +885 -0
  67. data/rice/Module.cpp +84 -0
  68. data/rice/Module.hpp +8 -0
  69. data/rice/Module.ipp +6 -0
  70. data/rice/Module_defn.hpp +88 -0
  71. data/rice/Module_impl.hpp +281 -0
  72. data/rice/Module_impl.ipp +345 -0
  73. data/rice/Object.cpp +169 -0
  74. data/rice/Object.hpp +8 -0
  75. data/rice/Object.ipp +33 -0
  76. data/rice/Object_defn.hpp +214 -0
  77. data/rice/Require_Guard.hpp +21 -0
  78. data/rice/String.cpp +94 -0
  79. data/rice/String.hpp +91 -0
  80. data/rice/Struct.cpp +117 -0
  81. data/rice/Struct.hpp +162 -0
  82. data/rice/Struct.ipp +26 -0
  83. data/rice/Symbol.cpp +25 -0
  84. data/rice/Symbol.hpp +66 -0
  85. data/rice/Symbol.ipp +44 -0
  86. data/rice/config.hpp +47 -0
  87. data/rice/config.hpp.in +46 -0
  88. data/rice/detail/Arguments.hpp +118 -0
  89. data/rice/detail/Auto_Function_Wrapper.hpp +898 -0
  90. data/rice/detail/Auto_Function_Wrapper.ipp +3694 -0
  91. data/rice/detail/Auto_Member_Function_Wrapper.hpp +897 -0
  92. data/rice/detail/Auto_Member_Function_Wrapper.ipp +2774 -0
  93. data/rice/detail/Caster.hpp +103 -0
  94. data/rice/detail/Exception_Handler.hpp +8 -0
  95. data/rice/detail/Exception_Handler.ipp +68 -0
  96. data/rice/detail/Exception_Handler_defn.hpp +96 -0
  97. data/rice/detail/Iterator.hpp +93 -0
  98. data/rice/detail/Not_Copyable.hpp +25 -0
  99. data/rice/detail/Wrapped_Function.hpp +33 -0
  100. data/rice/detail/cfp.hpp +24 -0
  101. data/rice/detail/cfp.ipp +51 -0
  102. data/rice/detail/check_ruby_type.cpp +27 -0
  103. data/rice/detail/check_ruby_type.hpp +23 -0
  104. data/rice/detail/creation_funcs.hpp +37 -0
  105. data/rice/detail/creation_funcs.ipp +36 -0
  106. data/rice/detail/default_allocation_func.hpp +23 -0
  107. data/rice/detail/default_allocation_func.ipp +11 -0
  108. data/rice/detail/define_method_and_auto_wrap.hpp +31 -0
  109. data/rice/detail/define_method_and_auto_wrap.ipp +30 -0
  110. data/rice/detail/demangle.cpp +56 -0
  111. data/rice/detail/demangle.hpp +19 -0
  112. data/rice/detail/env.hpp +11 -0
  113. data/rice/detail/from_ruby.hpp +43 -0
  114. data/rice/detail/from_ruby.ipp +60 -0
  115. data/rice/detail/method_data.cpp +92 -0
  116. data/rice/detail/method_data.hpp +21 -0
  117. data/rice/detail/node.hpp +13 -0
  118. data/rice/detail/protect.cpp +29 -0
  119. data/rice/detail/protect.hpp +34 -0
  120. data/rice/detail/ruby.hpp +74 -0
  121. data/rice/detail/ruby_version_code.hpp +6 -0
  122. data/rice/detail/ruby_version_code.hpp.in +6 -0
  123. data/rice/detail/st.hpp +22 -0
  124. data/rice/detail/to_ruby.hpp +22 -0
  125. data/rice/detail/to_ruby.ipp +36 -0
  126. data/rice/detail/traits.hpp +43 -0
  127. data/rice/detail/win32.hpp +16 -0
  128. data/rice/detail/wrap_function.hpp +66 -0
  129. data/rice/global_function.hpp +33 -0
  130. data/rice/global_function.ipp +22 -0
  131. data/rice/protect.hpp +38 -0
  132. data/rice/protect.ipp +1134 -0
  133. data/rice/ruby_mark.hpp +13 -0
  134. data/rice/ruby_try_catch.hpp +86 -0
  135. data/rice/rubypp.rb +97 -0
  136. data/rice/to_from_ruby.hpp +8 -0
  137. data/rice/to_from_ruby.ipp +418 -0
  138. data/rice/to_from_ruby_defn.hpp +70 -0
  139. data/ruby.ac +135 -0
  140. data/ruby/Makefile.am +1 -0
  141. data/ruby/Makefile.in +628 -0
  142. data/ruby/lib/Makefile.am +3 -0
  143. data/ruby/lib/Makefile.in +506 -0
  144. data/ruby/lib/mkmf-rice.rb.in +217 -0
  145. data/ruby/lib/version.rb +3 -0
  146. data/sample/Makefile.am +47 -0
  147. data/sample/Makefile.in +489 -0
  148. data/sample/enum/extconf.rb +3 -0
  149. data/sample/enum/sample_enum.cpp +54 -0
  150. data/sample/enum/test.rb +8 -0
  151. data/sample/inheritance/animals.cpp +98 -0
  152. data/sample/inheritance/extconf.rb +3 -0
  153. data/sample/inheritance/test.rb +7 -0
  154. data/sample/map/extconf.rb +3 -0
  155. data/sample/map/map.cpp +81 -0
  156. data/sample/map/test.rb +7 -0
  157. data/test/Makefile.am +72 -0
  158. data/test/Makefile.in +1213 -0
  159. data/test/ext/Makefile.am +41 -0
  160. data/test/ext/Makefile.in +483 -0
  161. data/test/ext/t1/Foo.hpp +10 -0
  162. data/test/ext/t1/extconf.rb +2 -0
  163. data/test/ext/t1/t1.cpp +15 -0
  164. data/test/ext/t2/extconf.rb +2 -0
  165. data/test/ext/t2/t2.cpp +11 -0
  166. data/test/test_Address_Registration_Guard.cpp +43 -0
  167. data/test/test_Array.cpp +248 -0
  168. data/test/test_Builtin_Object.cpp +71 -0
  169. data/test/test_Class.cpp +496 -0
  170. data/test/test_Constructor.cpp +128 -0
  171. data/test/test_Data_Object.cpp +275 -0
  172. data/test/test_Data_Type.cpp +348 -0
  173. data/test/test_Director.cpp +308 -0
  174. data/test/test_Enum.cpp +215 -0
  175. data/test/test_Exception.cpp +47 -0
  176. data/test/test_Hash.cpp +212 -0
  177. data/test/test_Identifier.cpp +70 -0
  178. data/test/test_Jump_Tag.cpp +17 -0
  179. data/test/test_Memory_Management.cpp +50 -0
  180. data/test/test_Module.cpp +497 -0
  181. data/test/test_Object.cpp +159 -0
  182. data/test/test_String.cpp +107 -0
  183. data/test/test_Struct.cpp +205 -0
  184. data/test/test_Symbol.cpp +63 -0
  185. data/test/test_To_From_Ruby.cpp +428 -0
  186. data/test/test_global_functions.cpp +114 -0
  187. data/test/test_rice.rb +41 -0
  188. data/test/unittest.cpp +136 -0
  189. data/test/unittest.hpp +294 -0
  190. metadata +297 -0
@@ -0,0 +1,84 @@
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
+
@@ -0,0 +1,8 @@
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
+
@@ -0,0 +1,6 @@
1
+ #ifndef Rice__Module__ipp_
2
+ #define Rice__Module__ipp_
3
+
4
+ #include "Module_impl.ipp"
5
+
6
+ #endif // Rice__Module__ipp_
@@ -0,0 +1,88 @@
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
+
@@ -0,0 +1,281 @@
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
+