rice 3.0.0 → 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 (237) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +121 -0
  3. data/CONTRIBUTORS.md +19 -0
  4. data/Gemfile +3 -0
  5. data/README.md +44 -1025
  6. data/Rakefile +95 -12
  7. data/include/rice/rice.hpp +7766 -0
  8. data/lib/mkmf-rice.rb +127 -0
  9. data/lib/version.rb +3 -0
  10. data/rice/Address_Registration_Guard.ipp +75 -32
  11. data/rice/Address_Registration_Guard_defn.hpp +60 -56
  12. data/rice/Arg.hpp +80 -4
  13. data/rice/Arg.ipp +51 -0
  14. data/rice/Constructor.hpp +12 -14
  15. data/rice/Data_Object.ipp +234 -107
  16. data/rice/Data_Object_defn.hpp +77 -117
  17. data/rice/Data_Type.hpp +1 -2
  18. data/rice/Data_Type.ipp +251 -295
  19. data/rice/Data_Type_defn.hpp +175 -243
  20. data/rice/Director.hpp +11 -6
  21. data/rice/Enum.hpp +54 -104
  22. data/rice/Enum.ipp +104 -230
  23. data/rice/Exception.hpp +2 -8
  24. data/rice/Exception.ipp +65 -0
  25. data/rice/Exception_defn.hpp +46 -47
  26. data/rice/Identifier.hpp +28 -28
  27. data/rice/Identifier.ipp +23 -27
  28. data/rice/Return.hpp +39 -0
  29. data/rice/Return.ipp +33 -0
  30. data/rice/detail/Exception_Handler.ipp +22 -62
  31. data/rice/detail/Exception_Handler_defn.hpp +76 -91
  32. data/rice/detail/Iterator.hpp +18 -88
  33. data/rice/detail/Iterator.ipp +47 -0
  34. data/rice/detail/Jump_Tag.hpp +21 -0
  35. data/rice/detail/MethodInfo.hpp +44 -0
  36. data/rice/detail/MethodInfo.ipp +78 -0
  37. data/rice/detail/NativeAttribute.hpp +53 -0
  38. data/rice/detail/NativeAttribute.ipp +83 -0
  39. data/rice/detail/NativeFunction.hpp +69 -0
  40. data/rice/detail/NativeFunction.ipp +248 -0
  41. data/rice/detail/RubyFunction.hpp +39 -0
  42. data/rice/detail/RubyFunction.ipp +92 -0
  43. data/rice/detail/Type.hpp +29 -0
  44. data/rice/detail/Type.ipp +138 -0
  45. data/rice/detail/TypeRegistry.hpp +50 -0
  46. data/rice/detail/TypeRegistry.ipp +106 -0
  47. data/rice/detail/Wrapper.hpp +51 -0
  48. data/rice/detail/Wrapper.ipp +151 -0
  49. data/rice/detail/default_allocation_func.hpp +8 -19
  50. data/rice/detail/default_allocation_func.ipp +9 -8
  51. data/rice/detail/from_ruby.hpp +2 -37
  52. data/rice/detail/from_ruby.ipp +1020 -46
  53. data/rice/detail/from_ruby_defn.hpp +38 -0
  54. data/rice/detail/function_traits.hpp +124 -0
  55. data/rice/detail/method_data.hpp +23 -15
  56. data/rice/detail/method_data.ipp +53 -0
  57. data/rice/detail/rice_traits.hpp +116 -0
  58. data/rice/detail/ruby.hpp +9 -46
  59. data/rice/detail/to_ruby.hpp +3 -17
  60. data/rice/detail/to_ruby.ipp +409 -31
  61. data/rice/detail/to_ruby_defn.hpp +48 -0
  62. data/rice/forward_declares.ipp +82 -0
  63. data/rice/global_function.hpp +16 -20
  64. data/rice/global_function.ipp +8 -17
  65. data/rice/rice.hpp +59 -0
  66. data/rice/ruby_mark.hpp +5 -3
  67. data/rice/ruby_try_catch.hpp +4 -4
  68. data/rice/stl.hpp +11 -0
  69. data/sample/callbacks/extconf.rb +3 -0
  70. data/sample/callbacks/sample_callbacks.cpp +10 -13
  71. data/sample/enum/extconf.rb +3 -0
  72. data/sample/enum/sample_enum.cpp +3 -17
  73. data/sample/enum/test.rb +2 -2
  74. data/sample/inheritance/animals.cpp +8 -24
  75. data/sample/inheritance/extconf.rb +3 -0
  76. data/sample/inheritance/test.rb +1 -1
  77. data/sample/map/extconf.rb +3 -0
  78. data/sample/map/map.cpp +10 -18
  79. data/sample/map/test.rb +1 -1
  80. data/test/embed_ruby.cpp +18 -5
  81. data/test/ext/t1/extconf.rb +3 -0
  82. data/test/ext/t1/t1.cpp +1 -3
  83. data/test/ext/t2/extconf.rb +3 -0
  84. data/test/ext/t2/t2.cpp +1 -1
  85. data/test/extconf.rb +23 -0
  86. data/test/ruby/test_callbacks_sample.rb +28 -0
  87. data/test/ruby/test_multiple_extensions.rb +18 -0
  88. data/test/ruby/test_multiple_extensions_same_class.rb +14 -0
  89. data/test/ruby/test_multiple_extensions_with_inheritance.rb +20 -0
  90. data/test/test_Address_Registration_Guard.cpp +23 -10
  91. data/test/test_Array.cpp +129 -73
  92. data/test/test_Attribute.cpp +147 -0
  93. data/test/test_Builtin_Object.cpp +34 -14
  94. data/test/test_Class.cpp +149 -275
  95. data/test/test_Constructor.cpp +10 -9
  96. data/test/test_Data_Object.cpp +133 -192
  97. data/test/test_Data_Type.cpp +322 -252
  98. data/test/test_Director.cpp +54 -41
  99. data/test/test_Enum.cpp +228 -103
  100. data/test/test_Exception.cpp +5 -6
  101. data/test/test_Hash.cpp +31 -30
  102. data/test/test_Identifier.cpp +4 -5
  103. data/test/test_Inheritance.cpp +221 -0
  104. data/test/test_Iterator.cpp +161 -0
  105. data/test/test_Jump_Tag.cpp +1 -1
  106. data/test/test_Keep_Alive.cpp +161 -0
  107. data/test/test_Memory_Management.cpp +2 -4
  108. data/test/test_Module.cpp +167 -110
  109. data/test/test_Object.cpp +41 -21
  110. data/test/test_Ownership.cpp +275 -0
  111. data/test/test_Self.cpp +205 -0
  112. data/test/test_Stl_Optional.cpp +90 -0
  113. data/test/test_Stl_Pair.cpp +144 -0
  114. data/test/test_Stl_SmartPointer.cpp +200 -0
  115. data/test/test_Stl_String.cpp +74 -0
  116. data/test/test_Stl_Vector.cpp +652 -0
  117. data/test/test_String.cpp +1 -2
  118. data/test/test_Struct.cpp +29 -39
  119. data/test/test_Symbol.cpp +1 -2
  120. data/test/test_To_From_Ruby.cpp +249 -285
  121. data/test/test_global_functions.cpp +39 -19
  122. data/test/unittest.hpp +0 -4
  123. metadata +63 -139
  124. data/Doxyfile +0 -2268
  125. data/Makefile.am +0 -26
  126. data/Makefile.in +0 -931
  127. data/README.mingw +0 -8
  128. data/aclocal.m4 +0 -1085
  129. data/ax_cxx_compile_stdcxx.m4 +0 -951
  130. data/bootstrap +0 -8
  131. data/config.guess +0 -1421
  132. data/config.sub +0 -1807
  133. data/configure +0 -7792
  134. data/configure.ac +0 -55
  135. data/depcomp +0 -791
  136. data/doxygen.ac +0 -314
  137. data/doxygen.am +0 -186
  138. data/extconf.rb +0 -70
  139. data/install-sh +0 -501
  140. data/missing +0 -215
  141. data/post-autoconf.rb +0 -22
  142. data/post-automake.rb +0 -28
  143. data/rice/Address_Registration_Guard.cpp +0 -22
  144. data/rice/Arg_impl.hpp +0 -129
  145. data/rice/Arg_operators.cpp +0 -21
  146. data/rice/Arg_operators.hpp +0 -19
  147. data/rice/Array.hpp +0 -214
  148. data/rice/Array.ipp +0 -256
  149. data/rice/Builtin_Object.hpp +0 -8
  150. data/rice/Builtin_Object.ipp +0 -50
  151. data/rice/Builtin_Object_defn.hpp +0 -50
  152. data/rice/Class.cpp +0 -57
  153. data/rice/Class.hpp +0 -8
  154. data/rice/Class.ipp +0 -6
  155. data/rice/Class_defn.hpp +0 -84
  156. data/rice/Data_Type.cpp +0 -54
  157. data/rice/Data_Type_fwd.hpp +0 -12
  158. data/rice/Director.cpp +0 -13
  159. data/rice/Exception.cpp +0 -54
  160. data/rice/Exception_Base.hpp +0 -8
  161. data/rice/Exception_Base.ipp +0 -13
  162. data/rice/Exception_Base_defn.hpp +0 -27
  163. data/rice/Hash.hpp +0 -230
  164. data/rice/Hash.ipp +0 -329
  165. data/rice/Identifier.cpp +0 -8
  166. data/rice/Jump_Tag.hpp +0 -24
  167. data/rice/Makefile.am +0 -121
  168. data/rice/Makefile.in +0 -884
  169. data/rice/Module.cpp +0 -84
  170. data/rice/Module.hpp +0 -8
  171. data/rice/Module.ipp +0 -6
  172. data/rice/Module_defn.hpp +0 -88
  173. data/rice/Module_impl.hpp +0 -281
  174. data/rice/Module_impl.ipp +0 -345
  175. data/rice/Object.cpp +0 -169
  176. data/rice/Object.hpp +0 -8
  177. data/rice/Object.ipp +0 -33
  178. data/rice/Object_defn.hpp +0 -214
  179. data/rice/Require_Guard.hpp +0 -21
  180. data/rice/String.cpp +0 -89
  181. data/rice/String.hpp +0 -91
  182. data/rice/Struct.cpp +0 -117
  183. data/rice/Struct.hpp +0 -162
  184. data/rice/Struct.ipp +0 -26
  185. data/rice/Symbol.cpp +0 -25
  186. data/rice/Symbol.hpp +0 -66
  187. data/rice/Symbol.ipp +0 -44
  188. data/rice/config.hpp +0 -47
  189. data/rice/config.hpp.in +0 -46
  190. data/rice/detail/Arguments.hpp +0 -118
  191. data/rice/detail/Auto_Function_Wrapper.hpp +0 -898
  192. data/rice/detail/Auto_Function_Wrapper.ipp +0 -3181
  193. data/rice/detail/Auto_Member_Function_Wrapper.hpp +0 -897
  194. data/rice/detail/Auto_Member_Function_Wrapper.ipp +0 -2501
  195. data/rice/detail/Caster.hpp +0 -103
  196. data/rice/detail/Not_Copyable.hpp +0 -25
  197. data/rice/detail/Wrapped_Function.hpp +0 -33
  198. data/rice/detail/cfp.hpp +0 -24
  199. data/rice/detail/cfp.ipp +0 -51
  200. data/rice/detail/check_ruby_type.cpp +0 -27
  201. data/rice/detail/check_ruby_type.hpp +0 -23
  202. data/rice/detail/creation_funcs.hpp +0 -37
  203. data/rice/detail/creation_funcs.ipp +0 -36
  204. data/rice/detail/define_method_and_auto_wrap.hpp +0 -31
  205. data/rice/detail/define_method_and_auto_wrap.ipp +0 -30
  206. data/rice/detail/demangle.cpp +0 -56
  207. data/rice/detail/demangle.hpp +0 -19
  208. data/rice/detail/env.hpp +0 -11
  209. data/rice/detail/method_data.cpp +0 -92
  210. data/rice/detail/node.hpp +0 -13
  211. data/rice/detail/protect.cpp +0 -29
  212. data/rice/detail/protect.hpp +0 -34
  213. data/rice/detail/ruby_version_code.hpp +0 -6
  214. data/rice/detail/ruby_version_code.hpp.in +0 -6
  215. data/rice/detail/st.hpp +0 -22
  216. data/rice/detail/win32.hpp +0 -16
  217. data/rice/detail/wrap_function.hpp +0 -66
  218. data/rice/protect.hpp +0 -38
  219. data/rice/protect.ipp +0 -1134
  220. data/rice/rubypp.rb +0 -97
  221. data/rice/to_from_ruby.hpp +0 -8
  222. data/rice/to_from_ruby.ipp +0 -418
  223. data/rice/to_from_ruby_defn.hpp +0 -70
  224. data/ruby.ac +0 -135
  225. data/ruby/Makefile.am +0 -1
  226. data/ruby/Makefile.in +0 -628
  227. data/ruby/lib/Makefile.am +0 -3
  228. data/ruby/lib/Makefile.in +0 -506
  229. data/ruby/lib/mkmf-rice.rb.in +0 -217
  230. data/ruby/lib/version.rb +0 -3
  231. data/sample/Makefile.am +0 -53
  232. data/sample/Makefile.in +0 -495
  233. data/test/Makefile.am +0 -73
  234. data/test/Makefile.in +0 -1219
  235. data/test/ext/Makefile.am +0 -41
  236. data/test/ext/Makefile.in +0 -483
  237. data/test/test_rice.rb +0 -45
data/rice/Array.hpp DELETED
@@ -1,214 +0,0 @@
1
- #ifndef Rice__Array__hpp_
2
- #define Rice__Array__hpp_
3
-
4
- #include "Builtin_Object.hpp"
5
- #include "to_from_ruby_defn.hpp"
6
- #include "detail/ruby.hpp"
7
- #include <iterator>
8
-
9
- namespace Rice
10
- {
11
-
12
- //! A wrapper for the ruby Array class.
13
- /*! This class provides a C++-style interface to ruby's Array class and
14
- * its associated rb_ary_* functions.
15
- * Example:
16
- * \code
17
- * Array a;
18
- * a.push(String("some string"));
19
- * a.push(42);
20
- * \endcode
21
- */
22
- class Array
23
- : public Builtin_Object<T_ARRAY>
24
- {
25
- public:
26
- //! Construct a new array
27
- Array();
28
-
29
- //! Wrap an existing array
30
- /*! \param v a ruby object, which must be of type T_ARRAY.
31
- */
32
- Array(Object v);
33
-
34
- //! Wrap an existing array
35
- /*! \param v a ruby object, which must be of type T_ARRAY.
36
- */
37
- Array(VALUE v);
38
-
39
- //! Construct an array from a sequence.
40
- /*! \param begin an iterator to the beginning of the sequence.
41
- * \param end an iterator to the end of the sequence.
42
- */
43
- template<typename Iter_T>
44
- Array(Iter_T begin, Iter_T end);
45
-
46
- //! Construct an Array from a C array.
47
- /*! \param a a C array of type T and size n.
48
- */
49
- template<typename T, long n>
50
- Array(T const (& a)[n]);
51
-
52
- public:
53
- //! Return the size of the array.
54
- long size() const;
55
-
56
- //! Return the element at the given index.
57
- /*! \param index The index of the desired element. The index may be
58
- * negative, to indicate an offset from the end of the array. If the
59
- * index is out of bounds, this function has undefined behavior.
60
- * \return the element at the given index.
61
- */
62
- Object operator[](long index) const;
63
-
64
- private:
65
- //! A helper class so array[index]=value can work.
66
- class Proxy;
67
-
68
- public:
69
- //! Return a reference to the element at the given index.
70
- /*! \param index The index of the desired element. The index may be
71
- * negative, to indicate an offset from the end of the array. If the
72
- * index is out of bounds, this function has undefined behavior.
73
- * \return the element at the given index.
74
- */
75
- Proxy operator[](long index);
76
-
77
- //! Push an element onto the end of the array
78
- /*! \param v an object to push onto the array.
79
- * \return the object which was pushed onto the array.
80
- */
81
- template<typename T>
82
- Object push(T const & obj);
83
-
84
- //! Pop an element from the end of the array
85
- /*! \return the object which was popped from the array, or Qnil if
86
- * the array was empty.
87
- */
88
- Object pop();
89
-
90
- //! Unshift an element onto the beginning of the array
91
- /*! \param v an object to unshift onto the array.
92
- * \return the object which was unshifted onto the array.
93
- */
94
- template<typename T>
95
- Object unshift(T const & obj);
96
-
97
- //! Shift an element from the beginning of the array
98
- /*! \return the object which was shifted from the array.
99
- */
100
- Object shift();
101
-
102
- private:
103
- template<typename Array_Ref_T, typename Value_T>
104
- class Iterator;
105
-
106
- long position_of(long index) const;
107
-
108
- public:
109
- //! An iterator.
110
- typedef Iterator<Array &, Proxy> iterator;
111
-
112
- //! A const iterator.
113
- typedef Iterator<Array const &, Object> const_iterator;
114
-
115
- //! Return an iterator to the beginning of the array.
116
- iterator begin();
117
-
118
- //! Return a const iterator to the beginning of the array.
119
- const_iterator begin() const;
120
-
121
- //! Return an iterator to the end of the array.
122
- iterator end();
123
-
124
- //! Return a const iterator to the end of the array.
125
- const_iterator end() const;
126
- };
127
-
128
- //! A helper class so array[index]=value can work.
129
- class Array::Proxy
130
- {
131
- public:
132
- //! Construct a new Proxy
133
- Proxy(Array array, long index);
134
-
135
- //! Implicit conversion to Object.
136
- operator Object() const;
137
-
138
- //! Explicit conversion to VALUE.
139
- VALUE value() const;
140
-
141
- //! Assignment operator.
142
- template<typename T>
143
- Object operator=(T const & value);
144
-
145
- private:
146
- Array array_;
147
- long index_;
148
- };
149
-
150
- //! A helper class for implementing iterators for a Array.
151
- // TODO: This really should be a random-access iterator.
152
- template<typename Array_Ref_T, typename Value_T>
153
- class Array::Iterator
154
- {
155
- public:
156
- using iterator_category = std::forward_iterator_tag;
157
- using value_type = Value_T;
158
- using difference_type = long;
159
- using pointer = Object*;
160
- using reference = Value_T&;
161
-
162
- Iterator(Array_Ref_T array, long index);
163
-
164
- template<typename Array_Ref_T_, typename Value_T_>
165
- Iterator(Iterator<Array_Ref_T_, Value_T_> const & rhs);
166
-
167
- template<typename Array_Ref_T_, typename Value_T_>
168
- Iterator & operator=(Iterator<Array_Ref_T_, Value_T_> const & rhs);
169
-
170
- Iterator & operator++();
171
- Iterator operator++(int);
172
- Value_T operator*();
173
- Object * operator->();
174
-
175
- template<typename Array_Ref_T_, typename Value_T_>
176
- bool operator==(Iterator<Array_Ref_T_, Value_T_> const & rhs) const;
177
-
178
- template<typename Array_Ref_T_, typename Value_T_>
179
- bool operator!=(Iterator<Array_Ref_T_, Value_T_> const & rhs) const;
180
-
181
- // Causes ICE on g++ 3.3.3
182
- // template<typename Array_Ref_T_, typename Value_T_>
183
- // friend class Iterator;
184
-
185
- Array_Ref_T array() const;
186
- long index() const;
187
-
188
- private:
189
- Array_Ref_T array_;
190
- long index_;
191
-
192
- Object tmp_;
193
- };
194
-
195
- } // namespace Rice
196
-
197
- template<>
198
- inline
199
- Rice::Array from_ruby<Rice::Array>(Rice::Object x)
200
- {
201
- return Rice::Array(x);
202
- }
203
-
204
- template<>
205
- inline
206
- Rice::Object to_ruby<Rice::Array>(Rice::Array const & x)
207
- {
208
- return x;
209
- }
210
-
211
- #include "Array.ipp"
212
-
213
- #endif // Rice__Array__hpp_
214
-
data/rice/Array.ipp DELETED
@@ -1,256 +0,0 @@
1
- #ifndef Rice__Array__ipp_
2
- #define Rice__Array__ipp_
3
-
4
- #include "protect.hpp"
5
-
6
- inline Rice::Array::
7
- Array()
8
- : Builtin_Object<T_ARRAY>(protect(rb_ary_new))
9
- {
10
- }
11
-
12
- inline Rice::Array::
13
- Array(Object v)
14
- : Builtin_Object<T_ARRAY>(v)
15
- {
16
- }
17
-
18
- inline Rice::Array::
19
- Array(VALUE v)
20
- : Builtin_Object<T_ARRAY>(v)
21
- {
22
- }
23
-
24
- template<typename Iter_T>
25
- inline Rice::Array::
26
- Array(Iter_T it, Iter_T end)
27
- : Builtin_Object<T_ARRAY>(protect(rb_ary_new))
28
- {
29
- for(; it != end; ++it)
30
- {
31
- push(*it);
32
- }
33
- }
34
-
35
- template<typename T, long n>
36
- inline Rice::Array::
37
- Array(T const (& a)[n])
38
- : Builtin_Object<T_ARRAY>(protect(rb_ary_new))
39
- {
40
- for(long j = 0; j < n; ++j)
41
- {
42
- push(a[j]);
43
- }
44
- }
45
-
46
- inline long Rice::Array::
47
- size() const
48
- {
49
- return RARRAY_LEN(this->value());
50
- }
51
-
52
- inline Rice::Object Rice::Array::
53
- operator[](long index) const
54
- {
55
- return protect(rb_ary_entry, value(), position_of(index));
56
- }
57
-
58
- inline Rice::Array::Proxy Rice::Array::
59
- operator[](long index)
60
- {
61
- return Proxy(*this, position_of(index));
62
- }
63
-
64
- template<typename T>
65
- inline Rice::Object Rice::Array::
66
- push(T const & obj)
67
- {
68
- return protect(rb_ary_push, value(), to_ruby(obj));
69
- }
70
-
71
- inline Rice::Object Rice::Array::
72
- pop()
73
- {
74
- return protect(rb_ary_pop, value());
75
- }
76
-
77
- template<typename T>
78
- inline Rice::Object Rice::Array::
79
- unshift(T const & obj)
80
- {
81
- return protect(rb_ary_unshift, value(), to_ruby(obj));
82
- }
83
-
84
- inline Rice::Object Rice::Array::
85
- shift()
86
- {
87
- return protect(rb_ary_shift, value());
88
- }
89
-
90
- inline long Rice::Array::
91
- position_of(long index) const
92
- {
93
- if(index < 0)
94
- {
95
- return size() + index;
96
- }
97
- else
98
- {
99
- return static_cast<long>(index);
100
- }
101
- }
102
-
103
- inline Rice::Array::Proxy::
104
- Proxy(Array array, long index)
105
- : array_(array)
106
- , index_(index)
107
- {
108
- }
109
-
110
- inline Rice::Array::Proxy::
111
- operator Rice::Object() const
112
- {
113
- return protect(rb_ary_entry, array_.value(), index_);
114
- }
115
-
116
- inline VALUE Rice::Array::Proxy::
117
- value() const
118
- {
119
- return protect(rb_ary_entry, array_.value(), index_);
120
- }
121
-
122
- template<typename T>
123
- Rice::Object Rice::Array::Proxy::
124
- operator=(T const & value)
125
- {
126
- Object o = to_ruby(value);
127
- rb_ary_store(array_.value(), index_, o.value());
128
- return o;
129
- }
130
-
131
- template<typename Array_Ref_T, typename Value_T>
132
- inline Rice::Array::Iterator<Array_Ref_T, Value_T>::
133
- Iterator(Array_Ref_T array, long index)
134
- : array_(array)
135
- , index_(index)
136
- {
137
- }
138
-
139
- template<typename Array_Ref_T, typename Value_T>
140
- template<typename Array_Ref_T_, typename Value_T_>
141
- inline
142
- Rice::Array::Iterator<Array_Ref_T, Value_T>::
143
- Iterator(Iterator<Array_Ref_T_, Value_T_> const & rhs)
144
- : array_(rhs.array())
145
- , index_(rhs.index())
146
- , tmp_()
147
- {
148
- }
149
-
150
- template<typename Array_Ref_T, typename Value_T>
151
- template<typename Array_Ref_T_, typename Value_T_>
152
- inline Rice::Array::Iterator<Array_Ref_T, Value_T> &
153
- Rice::Array::Iterator<Array_Ref_T, Value_T>::
154
- operator=(Iterator<Array_Ref_T_, Value_T_> const & rhs)
155
- {
156
- array_ = rhs.array_;
157
- index_ = rhs.index_;
158
- return *this;
159
- }
160
-
161
- template<typename Array_Ref_T, typename Value_T>
162
- inline Rice::Array::Iterator<Array_Ref_T, Value_T> &
163
- Rice::Array::Iterator<Array_Ref_T, Value_T>::
164
- operator++()
165
- {
166
- ++index_;
167
- return *this;
168
- }
169
-
170
- template<typename Array_Ref_T, typename Value_T>
171
- inline Rice::Array::Iterator<Array_Ref_T, Value_T>
172
- Rice::Array::Iterator<Array_Ref_T, Value_T>::
173
- operator++(int)
174
- {
175
- Array copy(*this);
176
- ++(*this);
177
- return *this;
178
- }
179
-
180
- template<typename Array_Ref_T, typename Value_T>
181
- inline Value_T
182
- Rice::Array::Iterator<Array_Ref_T, Value_T>::
183
- operator*()
184
- {
185
- return array_[index_];
186
- }
187
-
188
- template<typename Array_Ref_T, typename Value_T>
189
- inline Rice::Object *
190
- Rice::Array::Iterator<Array_Ref_T, Value_T>::
191
- operator->()
192
- {
193
- tmp_ = array_[index_];
194
- return &tmp_;
195
- }
196
-
197
- template<typename Array_Ref_T, typename Value_T>
198
- template<typename Array_Ref_T_, typename Value_T_>
199
- inline bool
200
- Rice::Array::Iterator<Array_Ref_T, Value_T>::
201
- operator==(Iterator<Array_Ref_T_, Value_T_> const & rhs) const
202
- {
203
- return array_.value() == rhs.array_.value() && index_ == rhs.index_;
204
- }
205
-
206
- template<typename Array_Ref_T, typename Value_T>
207
- template<typename Array_Ref_T_, typename Value_T_>
208
- inline bool
209
- Rice::Array::Iterator<Array_Ref_T, Value_T>::
210
- operator!=(Iterator<Array_Ref_T_, Value_T_> const & rhs) const
211
- {
212
- return !(*this == rhs);
213
- }
214
-
215
- template<typename Array_Ref_T, typename Value_T>
216
- Array_Ref_T
217
- Rice::Array::Iterator<Array_Ref_T, Value_T>::
218
- array() const
219
- {
220
- return array_;
221
- }
222
-
223
- template<typename Array_Ref_T, typename Value_T>
224
- long
225
- Rice::Array::Iterator<Array_Ref_T, Value_T>::
226
- index() const
227
- {
228
- return index_;
229
- }
230
-
231
- inline Rice::Array::iterator Rice::Array::
232
- begin()
233
- {
234
- return iterator(*this, 0);
235
- }
236
-
237
- inline Rice::Array::const_iterator Rice::Array::
238
- begin() const
239
- {
240
- return const_iterator(*this, 0);
241
- }
242
-
243
- inline Rice::Array::iterator Rice::Array::
244
- end()
245
- {
246
- return iterator(*this, size());
247
- }
248
-
249
- inline Rice::Array::const_iterator Rice::Array::
250
- end() const
251
- {
252
- return const_iterator(*this, size());
253
- }
254
-
255
- #endif // Rice__Array__ipp_
256
-