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/Object.hpp DELETED
@@ -1,8 +0,0 @@
1
- #ifndef Rice__Object__hpp_
2
- #define Rice__Object__hpp_
3
-
4
- #include "Object_defn.hpp"
5
- #include "Object.ipp"
6
-
7
- #endif // Rice__Object__hpp_
8
-
data/rice/Object.ipp DELETED
@@ -1,19 +0,0 @@
1
- #ifndef Rice__Object__ipp_
2
- #define Rice__Object__ipp_
3
-
4
- #include "protect.hpp"
5
- #include "detail/ruby.hpp"
6
-
7
- #include "detail/object_call.ipp"
8
-
9
- template<typename T>
10
- void Rice::Object::
11
- iv_set(
12
- Identifier name,
13
- T const & value)
14
- {
15
- protect(rb_ivar_set, *this, name.id(), to_ruby(value));
16
- }
17
-
18
- #endif // Rice__Object__ipp_
19
-
data/rice/Object_defn.hpp DELETED
@@ -1,191 +0,0 @@
1
- #ifndef Rice__Object_defn__hpp_
2
- #define Rice__Object_defn__hpp_
3
-
4
- /*! \file Object.hpp
5
- */
6
-
7
- #include "Identifier.hpp"
8
- #include "detail/ruby.hpp"
9
-
10
- #include <iosfwd>
11
-
12
- namespace Rice
13
- {
14
-
15
- class Class;
16
- class String;
17
- class Array;
18
-
19
- //! The base class for all Objects
20
- /*! Perhaps the name "Object" is a misnomer, because this class really
21
- * holds an object reference, not an object.
22
- */
23
- class Object
24
- {
25
- public:
26
- //! Encapsulate an existing ruby object.
27
- Object(VALUE value = Qnil) : value_(value) { }
28
-
29
- //! Copy constructor
30
- Object(Object const & other) : value_(other.value()) { }
31
-
32
- //! Destructor
33
- virtual ~Object() { }
34
-
35
- //! Returns false if the object is nil or false; returns true
36
- //! otherwise.
37
- // Having this conversion also prevents accidental conversion to
38
- // undesired integral types (e.g. long or int) by making the
39
- // conversion ambiguous.
40
- bool test() const { return RTEST(value_); }
41
-
42
- //! Returns false if the object is nil or false; returns true
43
- //! otherwise.
44
- operator bool() const { return test(); }
45
-
46
- //! Returns true if the object is nil, false otherwise.
47
- bool is_nil() const { return NIL_P(value_); }
48
-
49
- //! Implicit conversion to VALUE.
50
- operator VALUE() const { return value_; }
51
-
52
- //! Explicitly get the encapsulated VALUE.
53
- // Returns a const ref so that Address_Registration_Guard can access
54
- // the address where the VALUE is stored
55
- VALUE const volatile & value() const { return value_; }
56
-
57
- //! Get the class of an object.
58
- /*! \return the object's Class.
59
- */
60
- Class class_of() const;
61
-
62
- //! Compare this object to another object.
63
- /*! Gets the result of self <=> other and returns the result. The
64
- * result will be less than zero if self < other, greater than zero
65
- * if self > other, and equal to zero if self == other.
66
- */
67
- int compare(Object const & other) const;
68
-
69
- //! Return a string representation of an object.
70
- /*! \return the result of calling to_s on the object. A String is not
71
- * returned, because it is not possible to return an instance of a
72
- * derived class.
73
- */
74
- String to_s() const;
75
-
76
- //! Inspect the object.
77
- /*! \return the result of calling inspect on the object. A String is
78
- * not returned, because it is not possible to return an instance of
79
- * a derived class.
80
- */
81
- String inspect() const;
82
-
83
- //! Freeze the object.
84
- void freeze();
85
-
86
- //! Determine if the object is frozen.
87
- /*! \return true if the object is frozen, false otherwise.
88
- */
89
- bool is_frozen() const;
90
-
91
- //! Swap with another Object.
92
- void swap(Object & other);
93
-
94
- //! Evaluate the given string in the context of the object.
95
- /*! This is equivalant to calling obj.instance_eval(s) from inside the
96
- * interpreter.
97
- * \return the result of the expression.
98
- */
99
- Object instance_eval(String const & s);
100
-
101
- //! Return the type of the underlying C object.
102
- /*! This is equivalent to calling rb_type(obj).
103
- * \return the type of the underlying C object (e.g. T_DATA, T_ARRAY,
104
- * etc.).
105
- */
106
- int rb_type() const;
107
-
108
- //! Determine whether the object is an instance of a class/module.
109
- /*! \param klass a class or module.
110
- * \return true if the object is an instance of the given
111
- * class/module or one of its descendants.
112
- */
113
- bool is_a(Object klass) const;
114
-
115
- //! Determine if the objects responds to a method.
116
- /*! \param id the name of the method
117
- * \return true if the objects responds to the method, false
118
- * otherwise.
119
- */
120
- bool respond_to(Identifier id) const;
121
-
122
- //! Determine whether class is the object's class.
123
- /*! \param klass a class.
124
- * \return true if the object is an instance of the given class.
125
- */
126
- bool is_instance_of(Object klass) const;
127
-
128
- //! Set an instance variable.
129
- /*! \param name the name of the instance variable to set (including
130
- * the leading @ sign)
131
- * \param value the value of the variable, which will be converted to
132
- * a Ruby type if necessary.
133
- */
134
- template<typename T>
135
- void iv_set(
136
- Identifier name,
137
- T const & value);
138
-
139
- //! Get the value of an instance variable.
140
- /*! \param name the name of the instance variable to get
141
- * \return the value of the instance variable
142
- */
143
- Object iv_get(
144
- Identifier name) const;
145
-
146
- //! Get the value of an instance variable, but don't warn if it is
147
- //unset.
148
- /*! \param name the name of the instance variable to get
149
- * \return the value of the instance variable
150
- */
151
- Object attr_get(
152
- Identifier name) const;
153
-
154
- #include "detail/object_call.hpp"
155
-
156
- //! Vectorized call.
157
- /*! Calls the method identified by id with the list of arguments
158
- * identified by args.
159
- * \param id the name of the method to call
160
- * \param args the arguments to the method
161
- * \return the return value of the method call
162
- */
163
- Object vcall(Identifier id, Array args);
164
-
165
- //! Mark the object with the garbage collector.
166
- void mark() const;
167
-
168
- protected:
169
- //! Set the encapsulated value.
170
- void set_value(VALUE v);
171
-
172
- private:
173
- volatile VALUE value_;
174
- };
175
-
176
- std::ostream & operator<<(std::ostream & out, Object const & obj);
177
-
178
- bool operator==(Object const & lhs, Object const & rhs);
179
- bool operator!=(Object const & lhs, Object const & rhs);
180
- bool operator<(Object const & lhs, Object const & rhs);
181
- bool operator>(Object const & lhs, Object const & rhs);
182
-
183
- extern Object const Nil;
184
- extern Object const True;
185
- extern Object const False;
186
- extern Object const Undef;
187
-
188
- } // namespace Rice
189
-
190
- #endif // Rice__Object_defn__hpp_
191
-
@@ -1,21 +0,0 @@
1
- #ifndef Rice__Require_Guard__hpp_
2
- #define Rice__Require_Guard__hpp_
3
-
4
- /*! \def RICE_REQUIRE_GUARD
5
- * \brief Put this inside your Init_module function to keep it from
6
- * being required more than once with the same name (if you use
7
- * Rice, and your module is initialized more than once, an
8
- * exception will be thrown).
9
- */
10
- #define RICE_REQUIRE_GUARD \
11
- static bool Rice__module_initialized = false; \
12
- if(Rice__module_initialized) \
13
- { \
14
- return; \
15
- } \
16
- /* TODO: If module initialization fails, it's not possible to */ \
17
- /* retry */ \
18
- Rice__module_initialized = true
19
-
20
- #endif // Rice__Require_Guard__hpp_
21
-
data/rice/String.cpp DELETED
@@ -1,94 +0,0 @@
1
- #include "String.hpp"
2
- #include "Builtin_Object.hpp"
3
- #include "protect.hpp"
4
- #include "detail/ruby.hpp"
5
-
6
- #ifdef HAVE_STDARG_PROTOTYPES
7
- #include <stdarg.h>
8
- #define va_init_list(a,b) va_start(a,b)
9
- #else
10
- #include <varargs.h>
11
- #define va_init_list(a,b) va_start(a)
12
- #endif
13
-
14
- Rice::String::
15
- String()
16
- : Builtin_Object<T_STRING>(protect(rb_str_new2, ""))
17
- {
18
- }
19
-
20
- Rice::String::
21
- String(VALUE v)
22
- : Builtin_Object<T_STRING>(v)
23
- {
24
- }
25
-
26
- Rice::String::
27
- String(Object v)
28
- : Builtin_Object<T_STRING>(v)
29
- {
30
- }
31
-
32
- Rice::String::
33
- String(char const * s)
34
- : Builtin_Object<T_STRING>(protect(rb_str_new2, s))
35
- {
36
- }
37
-
38
- Rice::String::
39
- String(std::string const & s)
40
- : Builtin_Object<T_STRING>(protect(rb_str_new, s.data(), s.length()))
41
- {
42
- }
43
-
44
- Rice::String::
45
- String(Identifier id)
46
- : Builtin_Object<T_STRING>(protect(rb_str_new2, id.c_str()))
47
- {
48
- }
49
-
50
- Rice::String Rice::String::
51
- format(char const * fmt, ...)
52
- {
53
- va_list args;
54
- char buf[BUFSIZ];
55
-
56
- va_init_list(args, fmt);
57
- vsnprintf(buf, BUFSIZ, fmt, args);
58
- buf[BUFSIZ - 1] = '\0';
59
- va_end(args);
60
-
61
- String s = String(buf);
62
- return s;
63
- }
64
-
65
- size_t Rice::String::
66
- length() const
67
- {
68
- return RSTRING_LEN(value());
69
- }
70
-
71
- char Rice::String::
72
- operator[](ptrdiff_t index) const
73
- {
74
- return RSTRING_PTR(value())[index];
75
- }
76
-
77
- char const * Rice::String::
78
- c_str() const
79
- {
80
- return RSTRING_PTR(value());
81
- }
82
-
83
- std::string Rice::String::
84
- str() const
85
- {
86
- return std::string(RSTRING_PTR(value()), length());
87
- }
88
-
89
- Rice::Identifier Rice::String::
90
- intern() const
91
- {
92
- return rb_intern(c_str());
93
- }
94
-
data/rice/String.hpp DELETED
@@ -1,91 +0,0 @@
1
- #ifndef Rice__String__hpp_
2
- #define Rice__String__hpp_
3
-
4
- #include "Identifier.hpp"
5
- #include "Builtin_Object_defn.hpp"
6
- #include "to_from_ruby_defn.hpp"
7
- #include "detail/ruby.hpp"
8
- #include <string>
9
-
10
- namespace Rice
11
- {
12
-
13
- //! A Wraper for the ruby String class.
14
- /*! This class provides a C++-style interface to ruby's String class and
15
- * its associated rb_str_* functions.
16
- *
17
- * Example:
18
- * \code
19
- * String s(String::format("%s: %d", "foo", 42));
20
- * std::cout << s.length() << std::endl;
21
- * \endcode
22
- */
23
- class String
24
- : public Builtin_Object<T_STRING>
25
- {
26
- public:
27
- //! Construct a new string.
28
- String();
29
-
30
- //! Wrap an existing string.
31
- String(VALUE v);
32
-
33
- //! Wrap an existing string.
34
- String(Object v);
35
-
36
- //! Construct a String from an Identifier.
37
- String(Identifier id);
38
-
39
- //! Construct a String from a null-terminated C string.
40
- String(char const * s);
41
-
42
- //! Construct a String from an std::string.
43
- String(std::string const & s);
44
-
45
- //! Format a string using printf-style formatting.
46
- static String format(char const * s, ...);
47
-
48
- //! Get the length of the String.
49
- /*! \return the length of the string.
50
- */
51
- size_t length() const;
52
-
53
- //! Get the character at the given index.
54
- /*! \param index the desired index.
55
- * \return the character at the given index.
56
- */
57
- char operator[](ptrdiff_t index) const;
58
-
59
- //! Return a pointer to the beginning of the underlying C string.
60
- char const * c_str() const;
61
-
62
- //! Return a copy of the string as an std::string.
63
- std::string str() const;
64
-
65
- //! Create an Identifier from the String.
66
- /*! Calls rb_intern to create an ID.
67
- * \return an Identifier holding the ID returned from rb_intern.
68
- */
69
- Identifier intern() const;
70
- };
71
-
72
- } // namespace Rice
73
-
74
- template<>
75
- inline
76
- Rice::String from_ruby<Rice::String>(Rice::Object x)
77
- {
78
- return Rice::String(x);
79
- }
80
-
81
- template<>
82
- inline
83
- Rice::Object to_ruby<Rice::String>(Rice::String const & x)
84
- {
85
- return x;
86
- }
87
-
88
- #include "Builtin_Object.ipp"
89
-
90
- #endif // Rice__String__hpp_
91
-
data/rice/Struct.cpp DELETED
@@ -1,117 +0,0 @@
1
- #include "Struct.hpp"
2
- #include "Symbol.hpp"
3
-
4
- #include <stdexcept>
5
-
6
- Rice::Struct::
7
- Struct()
8
- : Module_impl<Class, Struct>(rb_cObject)
9
- , members_()
10
- , members_guard_(&members_)
11
- , member_offset_()
12
- , member_offset_guard_(&member_offset_)
13
- {
14
- }
15
-
16
- Rice::Struct::
17
- Struct(Rice::Struct const & s)
18
- : Module_impl<Class, Struct>(s)
19
- , members_(s.members_.value())
20
- , members_guard_(&members_)
21
- , member_offset_(s.member_offset_.value())
22
- , member_offset_guard_(&member_offset_)
23
- {
24
- }
25
-
26
- Rice::Struct::
27
- ~Struct()
28
- {
29
- }
30
-
31
- Rice::Struct & Rice::Struct::
32
- initialize(
33
- Module module,
34
- Identifier name)
35
- {
36
- Class struct_class(rb_cStruct);
37
- Object type = struct_class.vcall("new", members_);
38
-
39
- set_value(type);
40
- module.const_set(name, type);
41
-
42
- return *this;
43
- }
44
-
45
- Rice::Struct & Rice::Struct::
46
- define_member(
47
- Identifier name)
48
- {
49
- if(value() != rb_cObject)
50
- {
51
- throw std::runtime_error("struct is already initialized");
52
- }
53
-
54
- // TODO: not exception-safe
55
- Symbol ruby_name(name);
56
- member_offset_[ruby_name] = members_.size();
57
- members_.push(ruby_name);
58
-
59
- return *this;
60
- }
61
-
62
- size_t Rice::Struct::
63
- offset_of(Identifier name) const
64
- {
65
- Symbol ruby_name(name);
66
- return from_ruby<size_t>(member_offset_[ruby_name]);
67
- }
68
-
69
- void Rice::Struct::
70
- swap(Rice::Struct & other)
71
- {
72
- members_.swap(other.members_);
73
- members_guard_.swap(other.members_guard_);
74
- member_offset_.swap(other.member_offset_);
75
- member_offset_guard_.swap(other.member_offset_guard_);
76
- Class::swap(other);
77
- }
78
-
79
- Rice::Struct::Instance
80
- Rice::Struct::
81
- new_instance(Array args) const
82
- {
83
- Object instance = const_cast<Struct *>(this)->vcall("new", args);
84
- return Instance(*this, instance);
85
- }
86
-
87
- Rice::Struct::Instance::
88
- Instance(
89
- Struct const & type,
90
- Array args)
91
- : Builtin_Object<T_STRUCT>(type.new_instance(args))
92
- , type_(type)
93
- {
94
- }
95
-
96
- Rice::Struct::Instance::
97
- Instance(
98
- Struct const & type,
99
- Object s)
100
- : Builtin_Object<T_STRUCT>(s)
101
- , type_(type)
102
- {
103
- }
104
-
105
- void Rice::Struct::Instance::
106
- swap(Instance & other)
107
- {
108
- type_.swap(other.type_);
109
- Builtin_Object<T_STRUCT>::swap(other);
110
- }
111
-
112
- Rice::Struct Rice::
113
- define_struct()
114
- {
115
- return Struct();
116
- }
117
-