rice 1.4.3 → 1.5.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.
- data/COPYING +2 -2
- data/Doxyfile +1 -1
- data/Makefile.in +296 -166
- data/README +18 -13
- data/Rakefile +3 -2
- data/aclocal.m4 +375 -248
- data/config.guess +296 -261
- data/config.sub +268 -94
- data/configure +2789 -3054
- data/configure.ac +1 -1
- data/depcomp +403 -197
- data/extconf.rb +14 -3
- data/install-sh +139 -119
- data/missing +154 -306
- data/rice/Builtin_Object_defn.hpp +0 -1
- data/rice/Constructor.hpp +31 -30
- data/rice/Data_Object_defn.hpp +8 -2
- data/rice/Hash.hpp +26 -9
- data/rice/Hash.ipp +52 -60
- data/rice/Makefile.am +0 -1
- data/rice/Makefile.in +278 -152
- data/rice/Module_impl.ipp +1 -1
- data/rice/VM.cpp +1 -11
- data/rice/config.hpp +3 -0
- data/rice/config.hpp.in +3 -0
- data/rice/detail/Auto_Function_Wrapper.hpp +69 -0
- data/rice/detail/Auto_Function_Wrapper.ipp +815 -512
- data/rice/detail/Auto_Member_Function_Wrapper.hpp +69 -0
- data/rice/detail/Auto_Member_Function_Wrapper.ipp +543 -272
- data/rice/detail/object_call.hpp +1 -0
- data/rice/detail/ruby.hpp +0 -9
- data/rice/detail/ruby_version_code.hpp +1 -1
- data/rice/detail/st.hpp +0 -38
- data/rice/protect.hpp +1 -0
- data/rice/protect.ipp +1 -0
- data/rice/to_from_ruby.ipp +1 -1
- data/ruby.ac +2 -2
- data/ruby/Makefile.in +221 -134
- data/ruby/lib/Makefile.in +133 -44
- data/ruby/lib/mkmf-rice.rb.in +1 -4
- data/ruby/lib/version.rb +1 -1
- data/sample/Makefile.in +96 -31
- data/test/Makefile.am +0 -1
- data/test/Makefile.in +617 -219
- data/test/ext/Makefile.in +96 -31
- data/test/test_Class.cpp +2 -2
- data/test/test_Data_Object.cpp +11 -11
- data/test/test_Hash.cpp +7 -4
- data/test/test_Module.cpp +17 -1
- data/test/test_To_From_Ruby.cpp +44 -0
- data/test/test_rice.rb +2 -2
- metadata +29 -43
- data/rice/Allocation_Strategies.hpp +0 -37
- data/test/test_Allocation_Strategies.cpp +0 -77
data/rice/Constructor.hpp
CHANGED
@@ -41,7 +41,7 @@ namespace Rice
|
|
41
41
|
}
|
42
42
|
};
|
43
43
|
|
44
|
-
|
44
|
+
|
45
45
|
template<typename T, typename Arg0_T>
|
46
46
|
class Constructor<T, Arg0_T, void, void, void, void, void, void, void, void, void, void, void, void, void, void, void>
|
47
47
|
{
|
@@ -52,7 +52,7 @@ namespace Rice
|
|
52
52
|
}
|
53
53
|
};
|
54
54
|
|
55
|
-
|
55
|
+
|
56
56
|
template<typename T, typename Arg0_T, typename Arg1_T>
|
57
57
|
class Constructor<T, Arg0_T, Arg1_T, void, void, void, void, void, void, void, void, void, void, void, void, void, void>
|
58
58
|
{
|
@@ -63,7 +63,7 @@ namespace Rice
|
|
63
63
|
}
|
64
64
|
};
|
65
65
|
|
66
|
-
|
66
|
+
|
67
67
|
template<typename T, typename Arg0_T, typename Arg1_T, typename Arg2_T>
|
68
68
|
class Constructor<T, Arg0_T, Arg1_T, Arg2_T, void, void, void, void, void, void, void, void, void, void, void, void, void>
|
69
69
|
{
|
@@ -74,7 +74,7 @@ namespace Rice
|
|
74
74
|
}
|
75
75
|
};
|
76
76
|
|
77
|
-
|
77
|
+
|
78
78
|
template<typename T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T>
|
79
79
|
class Constructor<T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, void, void, void, void, void, void, void, void, void, void, void, void>
|
80
80
|
{
|
@@ -85,7 +85,7 @@ namespace Rice
|
|
85
85
|
}
|
86
86
|
};
|
87
87
|
|
88
|
-
|
88
|
+
|
89
89
|
template<typename T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T>
|
90
90
|
class Constructor<T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, void, void, void, void, void, void, void, void, void, void, void>
|
91
91
|
{
|
@@ -96,7 +96,7 @@ namespace Rice
|
|
96
96
|
}
|
97
97
|
};
|
98
98
|
|
99
|
-
|
99
|
+
|
100
100
|
template<typename T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T>
|
101
101
|
class Constructor<T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, void, void, void, void, void, void, void, void, void, void>
|
102
102
|
{
|
@@ -107,7 +107,7 @@ namespace Rice
|
|
107
107
|
}
|
108
108
|
};
|
109
109
|
|
110
|
-
|
110
|
+
|
111
111
|
template<typename T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T>
|
112
112
|
class Constructor<T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, void, void, void, void, void, void, void, void, void>
|
113
113
|
{
|
@@ -118,7 +118,7 @@ namespace Rice
|
|
118
118
|
}
|
119
119
|
};
|
120
120
|
|
121
|
-
|
121
|
+
|
122
122
|
template<typename T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T>
|
123
123
|
class Constructor<T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, void, void, void, void, void, void, void, void>
|
124
124
|
{
|
@@ -129,7 +129,7 @@ namespace Rice
|
|
129
129
|
}
|
130
130
|
};
|
131
131
|
|
132
|
-
|
132
|
+
|
133
133
|
template<typename T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T>
|
134
134
|
class Constructor<T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, void, void, void, void, void, void, void>
|
135
135
|
{
|
@@ -140,7 +140,7 @@ namespace Rice
|
|
140
140
|
}
|
141
141
|
};
|
142
142
|
|
143
|
-
|
143
|
+
|
144
144
|
template<typename T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T>
|
145
145
|
class Constructor<T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, void, void, void, void, void, void>
|
146
146
|
{
|
@@ -151,7 +151,7 @@ namespace Rice
|
|
151
151
|
}
|
152
152
|
};
|
153
153
|
|
154
|
-
|
154
|
+
|
155
155
|
template<typename T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T>
|
156
156
|
class Constructor<T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, void, void, void, void, void>
|
157
157
|
{
|
@@ -162,7 +162,7 @@ namespace Rice
|
|
162
162
|
}
|
163
163
|
};
|
164
164
|
|
165
|
-
|
165
|
+
|
166
166
|
template<typename T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T>
|
167
167
|
class Constructor<T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, void, void, void, void>
|
168
168
|
{
|
@@ -173,7 +173,7 @@ namespace Rice
|
|
173
173
|
}
|
174
174
|
};
|
175
175
|
|
176
|
-
|
176
|
+
|
177
177
|
template<typename T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T>
|
178
178
|
class Constructor<T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, void, void, void>
|
179
179
|
{
|
@@ -184,7 +184,7 @@ namespace Rice
|
|
184
184
|
}
|
185
185
|
};
|
186
186
|
|
187
|
-
|
187
|
+
|
188
188
|
template<typename T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T, typename Arg13_T>
|
189
189
|
class Constructor<T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, void, void>
|
190
190
|
{
|
@@ -195,7 +195,7 @@ namespace Rice
|
|
195
195
|
}
|
196
196
|
};
|
197
197
|
|
198
|
-
|
198
|
+
|
199
199
|
template<typename T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T, typename Arg13_T, typename Arg14_T>
|
200
200
|
class Constructor<T, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T, void>
|
201
201
|
{
|
@@ -206,7 +206,7 @@ namespace Rice
|
|
206
206
|
}
|
207
207
|
};
|
208
208
|
|
209
|
-
|
209
|
+
|
210
210
|
template<typename T, typename Arg0_T>
|
211
211
|
class Constructor<T, Object, Arg0_T, void, void, void, void, void, void, void, void, void, void, void, void, void, void>
|
212
212
|
{
|
@@ -217,7 +217,7 @@ namespace Rice
|
|
217
217
|
}
|
218
218
|
};
|
219
219
|
|
220
|
-
|
220
|
+
|
221
221
|
template<typename T, typename Arg0_T, typename Arg1_T>
|
222
222
|
class Constructor<T, Object, Arg0_T, Arg1_T, void, void, void, void, void, void, void, void, void, void, void, void, void>
|
223
223
|
{
|
@@ -228,7 +228,7 @@ namespace Rice
|
|
228
228
|
}
|
229
229
|
};
|
230
230
|
|
231
|
-
|
231
|
+
|
232
232
|
template<typename T, typename Arg0_T, typename Arg1_T, typename Arg2_T>
|
233
233
|
class Constructor<T, Object, Arg0_T, Arg1_T, Arg2_T, void, void, void, void, void, void, void, void, void, void, void, void>
|
234
234
|
{
|
@@ -239,7 +239,7 @@ namespace Rice
|
|
239
239
|
}
|
240
240
|
};
|
241
241
|
|
242
|
-
|
242
|
+
|
243
243
|
template<typename T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T>
|
244
244
|
class Constructor<T, Object, Arg0_T, Arg1_T, Arg2_T, Arg3_T, void, void, void, void, void, void, void, void, void, void, void>
|
245
245
|
{
|
@@ -250,7 +250,7 @@ namespace Rice
|
|
250
250
|
}
|
251
251
|
};
|
252
252
|
|
253
|
-
|
253
|
+
|
254
254
|
template<typename T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T>
|
255
255
|
class Constructor<T, Object, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, void, void, void, void, void, void, void, void, void, void>
|
256
256
|
{
|
@@ -261,7 +261,7 @@ namespace Rice
|
|
261
261
|
}
|
262
262
|
};
|
263
263
|
|
264
|
-
|
264
|
+
|
265
265
|
template<typename T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T>
|
266
266
|
class Constructor<T, Object, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, void, void, void, void, void, void, void, void, void>
|
267
267
|
{
|
@@ -272,7 +272,7 @@ namespace Rice
|
|
272
272
|
}
|
273
273
|
};
|
274
274
|
|
275
|
-
|
275
|
+
|
276
276
|
template<typename T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T>
|
277
277
|
class Constructor<T, Object, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, void, void, void, void, void, void, void, void>
|
278
278
|
{
|
@@ -283,7 +283,7 @@ namespace Rice
|
|
283
283
|
}
|
284
284
|
};
|
285
285
|
|
286
|
-
|
286
|
+
|
287
287
|
template<typename T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T>
|
288
288
|
class Constructor<T, Object, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, void, void, void, void, void, void, void>
|
289
289
|
{
|
@@ -294,7 +294,7 @@ namespace Rice
|
|
294
294
|
}
|
295
295
|
};
|
296
296
|
|
297
|
-
|
297
|
+
|
298
298
|
template<typename T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T>
|
299
299
|
class Constructor<T, Object, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, void, void, void, void, void, void>
|
300
300
|
{
|
@@ -305,7 +305,7 @@ namespace Rice
|
|
305
305
|
}
|
306
306
|
};
|
307
307
|
|
308
|
-
|
308
|
+
|
309
309
|
template<typename T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T>
|
310
310
|
class Constructor<T, Object, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, void, void, void, void, void>
|
311
311
|
{
|
@@ -316,7 +316,7 @@ namespace Rice
|
|
316
316
|
}
|
317
317
|
};
|
318
318
|
|
319
|
-
|
319
|
+
|
320
320
|
template<typename T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T>
|
321
321
|
class Constructor<T, Object, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, void, void, void, void>
|
322
322
|
{
|
@@ -327,7 +327,7 @@ namespace Rice
|
|
327
327
|
}
|
328
328
|
};
|
329
329
|
|
330
|
-
|
330
|
+
|
331
331
|
template<typename T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T>
|
332
332
|
class Constructor<T, Object, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, void, void, void>
|
333
333
|
{
|
@@ -338,7 +338,7 @@ namespace Rice
|
|
338
338
|
}
|
339
339
|
};
|
340
340
|
|
341
|
-
|
341
|
+
|
342
342
|
template<typename T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T>
|
343
343
|
class Constructor<T, Object, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, void, void>
|
344
344
|
{
|
@@ -349,7 +349,7 @@ namespace Rice
|
|
349
349
|
}
|
350
350
|
};
|
351
351
|
|
352
|
-
|
352
|
+
|
353
353
|
template<typename T, typename Arg0_T, typename Arg1_T, typename Arg2_T, typename Arg3_T, typename Arg4_T, typename Arg5_T, typename Arg6_T, typename Arg7_T, typename Arg8_T, typename Arg9_T, typename Arg10_T, typename Arg11_T, typename Arg12_T, typename Arg13_T>
|
354
354
|
class Constructor<T, Object, Arg0_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, void>
|
355
355
|
{
|
@@ -360,7 +360,8 @@ namespace Rice
|
|
360
360
|
}
|
361
361
|
};
|
362
362
|
|
363
|
-
|
363
|
+
|
364
|
+
} // namespace Rice
|
364
365
|
|
365
366
|
|
366
367
|
#endif // Rice__Constructor__hpp_
|
data/rice/Data_Object_defn.hpp
CHANGED
@@ -3,7 +3,6 @@
|
|
3
3
|
|
4
4
|
#include "Object_defn.hpp"
|
5
5
|
#include "Data_Type_fwd.hpp"
|
6
|
-
#include "Allocation_Strategies.hpp"
|
7
6
|
#include "ruby_mark.hpp"
|
8
7
|
#include "detail/to_ruby.hpp"
|
9
8
|
#include "detail/ruby.hpp"
|
@@ -23,6 +22,13 @@ struct Default_Mark_Function
|
|
23
22
|
static const Ruby_Data_Func mark;
|
24
23
|
};
|
25
24
|
|
25
|
+
template<typename T>
|
26
|
+
struct Default_Free_Function
|
27
|
+
{
|
28
|
+
static void free(T * obj) { delete obj; }
|
29
|
+
};
|
30
|
+
|
31
|
+
|
26
32
|
//! A smartpointer-like wrapper for Ruby data objects.
|
27
33
|
/*! A data object is a ruby object of type T_DATA, which is usually
|
28
34
|
* created by using the Data_Wrap_Struct or Data_Make_Struct macro.
|
@@ -73,7 +79,7 @@ public:
|
|
73
79
|
T * obj,
|
74
80
|
VALUE klass = Data_Type<T>::klass(),
|
75
81
|
Ruby_Data_Func mark_func = Default_Mark_Function<T>::mark,
|
76
|
-
Ruby_Data_Func free_func =
|
82
|
+
Ruby_Data_Func free_func = Default_Free_Function<T>::free);
|
77
83
|
|
78
84
|
//! Unwrap a Ruby object.
|
79
85
|
/*! This constructor is analgous to calling Data_Get_Struct. Uses
|
data/rice/Hash.hpp
CHANGED
@@ -2,9 +2,9 @@
|
|
2
2
|
#define Rice__Hash__hpp_
|
3
3
|
|
4
4
|
#include "Builtin_Object_defn.hpp"
|
5
|
+
#include "Array.hpp"
|
5
6
|
#include "to_from_ruby_defn.hpp"
|
6
7
|
#include "detail/ruby.hpp"
|
7
|
-
#include "detail/st.hpp"
|
8
8
|
#include "detail/traits.hpp"
|
9
9
|
#include <iterator>
|
10
10
|
|
@@ -152,7 +152,10 @@ class Hash::Iterator
|
|
152
152
|
{
|
153
153
|
public:
|
154
154
|
//! Construct a new Iterator.
|
155
|
-
Iterator(Hash_Ref_T hash
|
155
|
+
Iterator(Hash_Ref_T hash);
|
156
|
+
|
157
|
+
//! Construct a new Iterator with a given start-at index point
|
158
|
+
Iterator(Hash_Ref_T hash, int start_at);
|
156
159
|
|
157
160
|
//! Copy construct an Iterator.
|
158
161
|
Iterator(Iterator const & iterator);
|
@@ -189,21 +192,35 @@ public:
|
|
189
192
|
//! Swap with another iterator of the same type.
|
190
193
|
void swap(Iterator & iterator);
|
191
194
|
|
195
|
+
protected:
|
196
|
+
Object current_key();
|
197
|
+
|
198
|
+
Array hash_keys();
|
199
|
+
|
192
200
|
private:
|
193
201
|
Hash hash_;
|
194
|
-
|
195
|
-
|
196
|
-
st_index_t bin_;
|
197
|
-
#else
|
198
|
-
int bin_;
|
199
|
-
#endif
|
200
|
-
st_table_entry * ptr_;
|
202
|
+
int current_index_;
|
203
|
+
VALUE keys_;
|
201
204
|
|
202
205
|
mutable typename detail::remove_const<Value_T>::Type tmp_;
|
203
206
|
};
|
204
207
|
|
205
208
|
} // namespace Rice
|
206
209
|
|
210
|
+
template<>
|
211
|
+
inline
|
212
|
+
Rice::Hash from_ruby<Rice::Hash>(Rice::Object x)
|
213
|
+
{
|
214
|
+
return Rice::Hash(x);
|
215
|
+
}
|
216
|
+
|
217
|
+
template<>
|
218
|
+
inline
|
219
|
+
Rice::Object to_ruby<Rice::Hash>(Rice::Hash const & x)
|
220
|
+
{
|
221
|
+
return x;
|
222
|
+
}
|
223
|
+
|
207
224
|
#include "Hash.ipp"
|
208
225
|
|
209
226
|
#endif // Rice__Hash__hpp_
|
data/rice/Hash.ipp
CHANGED
@@ -6,16 +6,9 @@
|
|
6
6
|
#include "Builtin_Object.hpp"
|
7
7
|
#include "Exception.hpp"
|
8
8
|
#include "Builtin_Object.hpp"
|
9
|
+
#include "detail/st.hpp"
|
9
10
|
#include <algorithm>
|
10
11
|
|
11
|
-
// TODO: Evil hack
|
12
|
-
struct st_table_entry {
|
13
|
-
unsigned int hash;
|
14
|
-
st_data_t key;
|
15
|
-
st_data_t record;
|
16
|
-
st_table_entry *next;
|
17
|
-
};
|
18
|
-
|
19
12
|
inline Rice::Hash::
|
20
13
|
Hash()
|
21
14
|
: Builtin_Object<RHash, T_HASH>(protect(rb_hash_new))
|
@@ -31,7 +24,7 @@ Hash(Object v)
|
|
31
24
|
inline size_t Rice::Hash::
|
32
25
|
size() const
|
33
26
|
{
|
34
|
-
return
|
27
|
+
return RHASH_SIZE(this->value());
|
35
28
|
}
|
36
29
|
|
37
30
|
inline Rice::Hash::Proxy::
|
@@ -145,28 +138,30 @@ swap(Rice::Hash::Entry & entry)
|
|
145
138
|
|
146
139
|
template<typename Hash_Ref_T, typename Value_T>
|
147
140
|
inline Rice::Hash::Iterator<Hash_Ref_T, Value_T>::
|
148
|
-
Iterator(Hash_Ref_T hash
|
141
|
+
Iterator(Hash_Ref_T hash)
|
149
142
|
: hash_(hash)
|
150
|
-
,
|
151
|
-
,
|
152
|
-
,
|
143
|
+
, current_index_(0)
|
144
|
+
, keys_(Qnil)
|
145
|
+
, tmp_(hash, Qnil)
|
146
|
+
{
|
147
|
+
}
|
148
|
+
|
149
|
+
template<typename Hash_Ref_T, typename Value_T>
|
150
|
+
inline Rice::Hash::Iterator<Hash_Ref_T, Value_T>::
|
151
|
+
Iterator(Hash_Ref_T hash, int start_at)
|
152
|
+
: hash_(hash)
|
153
|
+
, current_index_(start_at)
|
154
|
+
, keys_(Qnil)
|
153
155
|
, tmp_(hash, Qnil)
|
154
156
|
{
|
155
|
-
// If we aren't already at the end, then use the increment operator to
|
156
|
-
// point to the first element
|
157
|
-
if(!ptr_ && bin_ < tbl_->num_bins)
|
158
|
-
{
|
159
|
-
operator++();
|
160
|
-
}
|
161
157
|
}
|
162
158
|
|
163
159
|
template<typename Hash_Ref_T, typename Value_T>
|
164
160
|
inline Rice::Hash::Iterator<Hash_Ref_T, Value_T>::
|
165
161
|
Iterator(Iterator const & iterator)
|
166
162
|
: hash_(iterator.hash_.value())
|
167
|
-
,
|
168
|
-
,
|
169
|
-
, ptr_(iterator.ptr_)
|
163
|
+
, current_index_(iterator.current_index_)
|
164
|
+
, keys_(Qnil)
|
170
165
|
, tmp_(iterator.hash_, Qnil)
|
171
166
|
{
|
172
167
|
}
|
@@ -176,9 +171,8 @@ template<typename Iterator_T>
|
|
176
171
|
inline Rice::Hash::Iterator<Hash_Ref_T, Value_T>::
|
177
172
|
Iterator(Iterator_T const & iterator)
|
178
173
|
: hash_(iterator.hash_.value())
|
179
|
-
,
|
180
|
-
,
|
181
|
-
, ptr_(iterator.ptr_)
|
174
|
+
, current_index_(iterator.current_index_)
|
175
|
+
, keys_(Qnil)
|
182
176
|
, tmp_(iterator.hash_, Qnil)
|
183
177
|
{
|
184
178
|
}
|
@@ -200,25 +194,9 @@ inline Rice::Hash::Iterator<Hash_Ref_T, Value_T> &
|
|
200
194
|
Rice::Hash::Iterator<Hash_Ref_T, Value_T>::
|
201
195
|
operator++()
|
202
196
|
{
|
203
|
-
//
|
204
|
-
|
205
|
-
|
206
|
-
if(ptr_)
|
207
|
-
{
|
208
|
-
ptr_ = ptr_->next;
|
209
|
-
}
|
210
|
-
|
211
|
-
// If we've reached the end of the bin, then try the next bin until
|
212
|
-
// we have run out of bins
|
213
|
-
while(ptr_ == 0)
|
214
|
-
{
|
215
|
-
++bin_;
|
216
|
-
if(bin_ == tbl_->num_bins)
|
217
|
-
{
|
218
|
-
// At the end..
|
219
|
-
return *this;
|
220
|
-
}
|
221
|
-
ptr_ = tbl_->bins[bin_];
|
197
|
+
// Ensure we're within the range
|
198
|
+
if(current_index_ < hash_keys().size()) {
|
199
|
+
current_index_++;
|
222
200
|
}
|
223
201
|
|
224
202
|
return *this;
|
@@ -239,7 +217,7 @@ inline Value_T
|
|
239
217
|
Rice::Hash::Iterator<Hash_Ref_T, Value_T>::
|
240
218
|
operator*()
|
241
219
|
{
|
242
|
-
return Value_T(hash_,
|
220
|
+
return Value_T(hash_, current_key());
|
243
221
|
}
|
244
222
|
|
245
223
|
template<typename Hash_Ref_T, typename Value_T>
|
@@ -247,7 +225,7 @@ inline Value_T *
|
|
247
225
|
Rice::Hash::Iterator<Hash_Ref_T, Value_T>::
|
248
226
|
operator->()
|
249
227
|
{
|
250
|
-
Entry tmp(hash_,
|
228
|
+
Entry tmp(hash_, current_key());
|
251
229
|
this->tmp_.swap(tmp);
|
252
230
|
return &tmp_;
|
253
231
|
}
|
@@ -257,9 +235,7 @@ inline bool Rice::Hash::Iterator<Hash_Ref_T, Value_T>::
|
|
257
235
|
operator==(Iterator const & rhs) const
|
258
236
|
{
|
259
237
|
return hash_.value() == rhs.hash_.value()
|
260
|
-
&&
|
261
|
-
&& bin_ == rhs.bin_
|
262
|
-
&& ptr_ == rhs.ptr_;
|
238
|
+
&& current_index_ == rhs.current_index_;
|
263
239
|
}
|
264
240
|
|
265
241
|
template<typename Hash_Ref_T, typename Value_T>
|
@@ -277,37 +253,53 @@ swap(Iterator& iterator)
|
|
277
253
|
using namespace std;
|
278
254
|
|
279
255
|
hash_.swap(iterator.hash_);
|
280
|
-
swap(
|
281
|
-
swap(
|
282
|
-
|
256
|
+
swap(keys_, iterator.keys_);
|
257
|
+
swap(current_index_, iterator.current_index_);
|
258
|
+
}
|
259
|
+
|
260
|
+
template<typename Hash_Ref_T, typename Value_T>
|
261
|
+
inline Rice::Object
|
262
|
+
Rice::Hash::Iterator<Hash_Ref_T, Value_T>::
|
263
|
+
current_key()
|
264
|
+
{
|
265
|
+
return hash_keys()[current_index_];
|
266
|
+
}
|
267
|
+
|
268
|
+
|
269
|
+
template<typename Hash_Ref_T, typename Value_T>
|
270
|
+
inline Rice::Array
|
271
|
+
Rice::Hash::Iterator<Hash_Ref_T, Value_T>::
|
272
|
+
hash_keys()
|
273
|
+
{
|
274
|
+
if(NIL_P(keys_)) {
|
275
|
+
keys_ = rb_funcall(hash_, rb_intern("keys"), 0, 0);
|
276
|
+
}
|
277
|
+
|
278
|
+
return Rice::Array(keys_);
|
283
279
|
}
|
284
280
|
|
285
281
|
inline Rice::Hash::iterator Rice::Hash::
|
286
282
|
begin()
|
287
283
|
{
|
288
|
-
|
289
|
-
return iterator(*this, 0, tbl->bins[0]);
|
284
|
+
return iterator(*this);
|
290
285
|
}
|
291
286
|
|
292
287
|
inline Rice::Hash::const_iterator Rice::Hash::
|
293
288
|
begin() const
|
294
289
|
{
|
295
|
-
|
296
|
-
return const_iterator(*this, 0, tbl->bins[0]);
|
290
|
+
return const_iterator(*this);
|
297
291
|
}
|
298
292
|
|
299
293
|
inline Rice::Hash::iterator Rice::Hash::
|
300
294
|
end()
|
301
295
|
{
|
302
|
-
|
303
|
-
return iterator(*this, tbl->num_bins, 0);
|
296
|
+
return iterator(*this, size());
|
304
297
|
}
|
305
298
|
|
306
299
|
inline Rice::Hash::const_iterator Rice::Hash::
|
307
300
|
end() const
|
308
301
|
{
|
309
|
-
|
310
|
-
return const_iterator(*this, tbl->num_bins, 0);
|
302
|
+
return const_iterator(*this, size());
|
311
303
|
}
|
312
304
|
|
313
305
|
inline bool Rice::
|