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.
- checksums.yaml +7 -0
- data/COPYING +23 -0
- data/Doxyfile +2268 -0
- data/Makefile.am +26 -0
- data/Makefile.in +929 -0
- data/README.md +1054 -0
- data/README.mingw +8 -0
- data/Rakefile +24 -0
- data/aclocal.m4 +1090 -0
- data/bootstrap +8 -0
- data/config.guess +1667 -0
- data/config.sub +1793 -0
- data/configure +8209 -0
- data/configure.ac +55 -0
- data/depcomp +791 -0
- data/doxygen.ac +314 -0
- data/doxygen.am +186 -0
- data/extconf.rb +66 -0
- data/install-sh +529 -0
- data/missing +215 -0
- data/post-autoconf.rb +22 -0
- data/post-automake.rb +28 -0
- data/rice/Address_Registration_Guard.cpp +22 -0
- data/rice/Address_Registration_Guard.hpp +7 -0
- data/rice/Address_Registration_Guard.ipp +37 -0
- data/rice/Address_Registration_Guard_defn.hpp +75 -0
- data/rice/Arg.hpp +8 -0
- data/rice/Arg_impl.hpp +129 -0
- data/rice/Arg_operators.cpp +21 -0
- data/rice/Arg_operators.hpp +19 -0
- data/rice/Array.hpp +214 -0
- data/rice/Array.ipp +256 -0
- data/rice/Builtin_Object.hpp +8 -0
- data/rice/Builtin_Object.ipp +50 -0
- data/rice/Builtin_Object_defn.hpp +50 -0
- data/rice/Class.cpp +57 -0
- data/rice/Class.hpp +8 -0
- data/rice/Class.ipp +6 -0
- data/rice/Class_defn.hpp +83 -0
- data/rice/Constructor.hpp +47 -0
- data/rice/Data_Object.hpp +8 -0
- data/rice/Data_Object.ipp +133 -0
- data/rice/Data_Object_defn.hpp +138 -0
- data/rice/Data_Type.cpp +54 -0
- data/rice/Data_Type.hpp +8 -0
- data/rice/Data_Type.ipp +365 -0
- data/rice/Data_Type_defn.hpp +261 -0
- data/rice/Data_Type_fwd.hpp +12 -0
- data/rice/Director.cpp +13 -0
- data/rice/Director.hpp +39 -0
- data/rice/Enum.hpp +117 -0
- data/rice/Enum.ipp +246 -0
- data/rice/Exception.cpp +59 -0
- data/rice/Exception.hpp +13 -0
- data/rice/Exception_Base.hpp +8 -0
- data/rice/Exception_Base.ipp +13 -0
- data/rice/Exception_Base_defn.hpp +27 -0
- data/rice/Exception_defn.hpp +69 -0
- data/rice/Hash.hpp +227 -0
- data/rice/Hash.ipp +329 -0
- data/rice/Identifier.cpp +8 -0
- data/rice/Identifier.hpp +50 -0
- data/rice/Identifier.ipp +33 -0
- data/rice/Jump_Tag.hpp +24 -0
- data/rice/Makefile.am +122 -0
- data/rice/Makefile.in +885 -0
- data/rice/Module.cpp +84 -0
- data/rice/Module.hpp +8 -0
- data/rice/Module.ipp +6 -0
- data/rice/Module_defn.hpp +88 -0
- data/rice/Module_impl.hpp +281 -0
- data/rice/Module_impl.ipp +345 -0
- data/rice/Object.cpp +169 -0
- data/rice/Object.hpp +8 -0
- data/rice/Object.ipp +33 -0
- data/rice/Object_defn.hpp +214 -0
- data/rice/Require_Guard.hpp +21 -0
- data/rice/String.cpp +94 -0
- data/rice/String.hpp +91 -0
- data/rice/Struct.cpp +117 -0
- data/rice/Struct.hpp +162 -0
- data/rice/Struct.ipp +26 -0
- data/rice/Symbol.cpp +25 -0
- data/rice/Symbol.hpp +66 -0
- data/rice/Symbol.ipp +44 -0
- data/rice/config.hpp +47 -0
- data/rice/config.hpp.in +46 -0
- data/rice/detail/Arguments.hpp +118 -0
- data/rice/detail/Auto_Function_Wrapper.hpp +898 -0
- data/rice/detail/Auto_Function_Wrapper.ipp +3694 -0
- data/rice/detail/Auto_Member_Function_Wrapper.hpp +897 -0
- data/rice/detail/Auto_Member_Function_Wrapper.ipp +2774 -0
- data/rice/detail/Caster.hpp +103 -0
- data/rice/detail/Exception_Handler.hpp +8 -0
- data/rice/detail/Exception_Handler.ipp +68 -0
- data/rice/detail/Exception_Handler_defn.hpp +96 -0
- data/rice/detail/Iterator.hpp +93 -0
- data/rice/detail/Not_Copyable.hpp +25 -0
- data/rice/detail/Wrapped_Function.hpp +33 -0
- data/rice/detail/cfp.hpp +24 -0
- data/rice/detail/cfp.ipp +51 -0
- data/rice/detail/check_ruby_type.cpp +27 -0
- data/rice/detail/check_ruby_type.hpp +23 -0
- data/rice/detail/creation_funcs.hpp +37 -0
- data/rice/detail/creation_funcs.ipp +36 -0
- data/rice/detail/default_allocation_func.hpp +23 -0
- data/rice/detail/default_allocation_func.ipp +11 -0
- data/rice/detail/define_method_and_auto_wrap.hpp +31 -0
- data/rice/detail/define_method_and_auto_wrap.ipp +30 -0
- data/rice/detail/demangle.cpp +56 -0
- data/rice/detail/demangle.hpp +19 -0
- data/rice/detail/env.hpp +11 -0
- data/rice/detail/from_ruby.hpp +43 -0
- data/rice/detail/from_ruby.ipp +60 -0
- data/rice/detail/method_data.cpp +92 -0
- data/rice/detail/method_data.hpp +21 -0
- data/rice/detail/node.hpp +13 -0
- data/rice/detail/protect.cpp +29 -0
- data/rice/detail/protect.hpp +34 -0
- data/rice/detail/ruby.hpp +74 -0
- data/rice/detail/ruby_version_code.hpp +6 -0
- data/rice/detail/ruby_version_code.hpp.in +6 -0
- data/rice/detail/st.hpp +22 -0
- data/rice/detail/to_ruby.hpp +22 -0
- data/rice/detail/to_ruby.ipp +36 -0
- data/rice/detail/traits.hpp +43 -0
- data/rice/detail/win32.hpp +16 -0
- data/rice/detail/wrap_function.hpp +66 -0
- data/rice/global_function.hpp +33 -0
- data/rice/global_function.ipp +22 -0
- data/rice/protect.hpp +38 -0
- data/rice/protect.ipp +1134 -0
- data/rice/ruby_mark.hpp +13 -0
- data/rice/ruby_try_catch.hpp +86 -0
- data/rice/rubypp.rb +97 -0
- data/rice/to_from_ruby.hpp +8 -0
- data/rice/to_from_ruby.ipp +418 -0
- data/rice/to_from_ruby_defn.hpp +70 -0
- data/ruby.ac +135 -0
- data/ruby/Makefile.am +1 -0
- data/ruby/Makefile.in +628 -0
- data/ruby/lib/Makefile.am +3 -0
- data/ruby/lib/Makefile.in +506 -0
- data/ruby/lib/mkmf-rice.rb.in +217 -0
- data/ruby/lib/version.rb +3 -0
- data/sample/Makefile.am +47 -0
- data/sample/Makefile.in +489 -0
- data/sample/enum/extconf.rb +3 -0
- data/sample/enum/sample_enum.cpp +54 -0
- data/sample/enum/test.rb +8 -0
- data/sample/inheritance/animals.cpp +98 -0
- data/sample/inheritance/extconf.rb +3 -0
- data/sample/inheritance/test.rb +7 -0
- data/sample/map/extconf.rb +3 -0
- data/sample/map/map.cpp +81 -0
- data/sample/map/test.rb +7 -0
- data/test/Makefile.am +72 -0
- data/test/Makefile.in +1213 -0
- data/test/ext/Makefile.am +41 -0
- data/test/ext/Makefile.in +483 -0
- data/test/ext/t1/Foo.hpp +10 -0
- data/test/ext/t1/extconf.rb +2 -0
- data/test/ext/t1/t1.cpp +15 -0
- data/test/ext/t2/extconf.rb +2 -0
- data/test/ext/t2/t2.cpp +11 -0
- data/test/test_Address_Registration_Guard.cpp +43 -0
- data/test/test_Array.cpp +248 -0
- data/test/test_Builtin_Object.cpp +71 -0
- data/test/test_Class.cpp +496 -0
- data/test/test_Constructor.cpp +128 -0
- data/test/test_Data_Object.cpp +275 -0
- data/test/test_Data_Type.cpp +348 -0
- data/test/test_Director.cpp +308 -0
- data/test/test_Enum.cpp +215 -0
- data/test/test_Exception.cpp +47 -0
- data/test/test_Hash.cpp +212 -0
- data/test/test_Identifier.cpp +70 -0
- data/test/test_Jump_Tag.cpp +17 -0
- data/test/test_Memory_Management.cpp +50 -0
- data/test/test_Module.cpp +497 -0
- data/test/test_Object.cpp +159 -0
- data/test/test_String.cpp +107 -0
- data/test/test_Struct.cpp +205 -0
- data/test/test_Symbol.cpp +63 -0
- data/test/test_To_From_Ruby.cpp +428 -0
- data/test/test_global_functions.cpp +114 -0
- data/test/test_rice.rb +41 -0
- data/test/unittest.cpp +136 -0
- data/test/unittest.hpp +294 -0
- metadata +297 -0
data/rice/Module.cpp
ADDED
@@ -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
|
+
|
data/rice/Module.hpp
ADDED
data/rice/Module.ipp
ADDED
@@ -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
|
+
|