rb_lovely 0.7.1 → 0.7.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/rb_lovely/sorted_hash.cpp +22 -22
- data/yard.rb +15 -33
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 67d03675c3c6b63a3ebfd789c053a98df9b4a55c
|
4
|
+
data.tar.gz: c77b233b9b82b11f00f1d0fb37ed1ac7be8d8c17
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8605022a32d4df8a51bfd6460774f64ea8fef9983f028f4eab839f663c6d5ec671b3d450c91525b84ff8f980e4e670f632f136cf9b022584749addb48512fe70
|
7
|
+
data.tar.gz: 256fbbace880eca76a8a3373e1622c57a9ac34324580f9904311770abd3b10579dfbb9ff719cfbcd7357dfdfd499440846594225b31bfda3b640f1cfc0afe55b
|
@@ -179,6 +179,9 @@ VALUE hashToString(VALUE self) {
|
|
179
179
|
return rb_str_new(stlString.data(), stlString.size());
|
180
180
|
}
|
181
181
|
|
182
|
+
enum class ValueOrKey { VALUE, KEY, BOTH };
|
183
|
+
|
184
|
+
template <ValueOrKey V>
|
182
185
|
VALUE hashFirst(VALUE self) {
|
183
186
|
Hash* hash = rubyCast<Hash>(self);
|
184
187
|
if (hash->container.empty()) {
|
@@ -186,9 +189,15 @@ VALUE hashFirst(VALUE self) {
|
|
186
189
|
}
|
187
190
|
|
188
191
|
auto &pair = *hash->container.get<1>().begin();
|
189
|
-
|
192
|
+
if (V == ValueOrKey::BOTH) {
|
193
|
+
return rb_ary_new3(2, pair.key, pair.val);
|
194
|
+
}
|
195
|
+
else {
|
196
|
+
return V == ValueOrKey::VALUE ? pair.val : pair.key;
|
197
|
+
}
|
190
198
|
}
|
191
199
|
|
200
|
+
template <ValueOrKey V>
|
192
201
|
VALUE hashLast(VALUE self) {
|
193
202
|
Hash* hash = rubyCast<Hash>(self);
|
194
203
|
if (hash->container.empty()) {
|
@@ -197,22 +206,13 @@ VALUE hashLast(VALUE self) {
|
|
197
206
|
|
198
207
|
auto it = hash->container.get<1>().end();
|
199
208
|
--it;
|
200
|
-
return rb_ary_new3(2, it->key, it->val);
|
201
|
-
}
|
202
|
-
|
203
|
-
VALUE hashFirstValue(VALUE self) {
|
204
|
-
Hash* hash = rubyCast<Hash>(self);
|
205
|
-
return hash->container.empty() ? Qnil : hash->container.get<1>().begin()->val;
|
206
|
-
}
|
207
209
|
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
--last;
|
215
|
-
return last->val;
|
210
|
+
if (V == ValueOrKey::BOTH) {
|
211
|
+
return rb_ary_new3(2, it->key, it->val);
|
212
|
+
}
|
213
|
+
else {
|
214
|
+
return V == ValueOrKey::VALUE ? it->val : it->key;
|
215
|
+
}
|
216
216
|
}
|
217
217
|
|
218
218
|
VALUE hashDelete(VALUE self, VALUE toDelete) {
|
@@ -228,8 +228,6 @@ VALUE hashDelete(VALUE self, VALUE toDelete) {
|
|
228
228
|
}
|
229
229
|
}
|
230
230
|
|
231
|
-
enum class ValueOrKey { VALUE, KEY, BOTH };
|
232
|
-
|
233
231
|
template <ValueOrKey V>
|
234
232
|
VALUE hashShift(VALUE self) {
|
235
233
|
Hash* hash = rubyCast<Hash>(self);
|
@@ -311,10 +309,12 @@ extern "C" {
|
|
311
309
|
rb_define_method(rbHash, "[]", RUBY_METHOD_FUNC(hashGet), 1);
|
312
310
|
rb_define_method(rbHash, "each", RUBY_METHOD_FUNC(hashEach), 0);
|
313
311
|
rb_define_method(rbHash, "to_s", RUBY_METHOD_FUNC(hashToString), 0);
|
314
|
-
rb_define_method(rbHash, "first", RUBY_METHOD_FUNC(hashFirst), 0);
|
315
|
-
rb_define_method(rbHash, "
|
316
|
-
rb_define_method(rbHash, "
|
317
|
-
rb_define_method(rbHash, "
|
312
|
+
rb_define_method(rbHash, "first", RUBY_METHOD_FUNC(hashFirst<ValueOrKey::BOTH>), 0);
|
313
|
+
rb_define_method(rbHash, "first_value", RUBY_METHOD_FUNC(hashFirst<ValueOrKey::VALUE>), 0);
|
314
|
+
rb_define_method(rbHash, "first_key", RUBY_METHOD_FUNC(hashFirst<ValueOrKey::KEY>), 0);
|
315
|
+
rb_define_method(rbHash, "last", RUBY_METHOD_FUNC(hashLast<ValueOrKey::BOTH>), 0);
|
316
|
+
rb_define_method(rbHash, "last_value", RUBY_METHOD_FUNC(hashLast<ValueOrKey::VALUE>), 0);
|
317
|
+
rb_define_method(rbHash, "last_key", RUBY_METHOD_FUNC(hashLast<ValueOrKey::KEY>), 0);
|
318
318
|
rb_define_method(rbHash, "delete", RUBY_METHOD_FUNC(hashDelete), 1);
|
319
319
|
// rb_define_method(rbHash, "reject!", RUBY_METHOD_FUNC(hashMutatingReject), 0);
|
320
320
|
// rb_define_method(rbHash, "reject_first!", RUBY_METHOD_FUNC(hashMutatingRejectFirst), 0);
|
data/yard.rb
CHANGED
@@ -209,7 +209,7 @@ module RbLovely
|
|
209
209
|
# @complexity O(c)
|
210
210
|
# @return The value associated with the deleted key or nil if the key was not in the hash.
|
211
211
|
# @example
|
212
|
-
# hash = RbLovely::SortedHash [:a, 5
|
212
|
+
# hash = RbLovely::SortedHash [:a, 5]
|
213
213
|
# expect(hash.delete(:a)).to equal 5
|
214
214
|
# expect(hash.delete(:b)).to equal nil
|
215
215
|
def delete key ; end
|
@@ -264,7 +264,7 @@ module RbLovely
|
|
264
264
|
# @return The first key in the hash
|
265
265
|
# @example
|
266
266
|
# @set = RbLovely::SortedHash [:a, 1, :b, 2]
|
267
|
-
# expect(@set.
|
267
|
+
# expect(@set.first_key).to equal :a
|
268
268
|
def first_key ; end
|
269
269
|
|
270
270
|
# Retrieve last key-value pair as determined by value sort order or nil if the hash is empty.
|
@@ -298,23 +298,23 @@ module RbLovely
|
|
298
298
|
# expect(hash.shift).to equal [:a, 2]
|
299
299
|
def shift ; end
|
300
300
|
|
301
|
-
# Remove the first key-value pair in the hash and return the
|
301
|
+
# Remove the first key-value pair in the hash and return the value or return nil if the hash is empty.
|
302
302
|
# @complexity O(c).
|
303
|
-
# @see #
|
303
|
+
# @see #pop_value
|
304
304
|
# @return The first key pair according to the <=> method defined on each member or nil if the hash is empty.
|
305
305
|
# @example
|
306
306
|
# set = RbLovely::SortedHash [:a, 2, :b, 10]
|
307
|
-
# expect(hash.
|
308
|
-
def
|
307
|
+
# expect(hash.shift_value).to equal 2
|
308
|
+
def shift_value ; end
|
309
309
|
|
310
|
-
# Remove the first key-value pair in the hash and return the
|
310
|
+
# Remove the first key-value pair in the hash and return the key or return nil if the hash is empty.
|
311
311
|
# @complexity O(c).
|
312
|
-
# @see #
|
312
|
+
# @see #pop_key
|
313
313
|
# @return The first key pair according to the <=> method defined on each member or nil if the hash is empty.
|
314
314
|
# @example
|
315
315
|
# set = RbLovely::SortedHash [:a, 2, :b, 10]
|
316
|
-
# expect(hash.
|
317
|
-
def
|
316
|
+
# expect(hash.shift_key).to equal :a
|
317
|
+
def shift_key ; end
|
318
318
|
|
319
319
|
# Remove the last key-value pair in the hash and return it or return nil if the hash is empty.
|
320
320
|
# @complexity O(c).
|
@@ -325,15 +325,6 @@ module RbLovely
|
|
325
325
|
# expect(hash.pop).to equal [:b, 10]
|
326
326
|
def pop ; end
|
327
327
|
|
328
|
-
# Remove the last key-value pair in the hash and return the key or return nil if the hash is empty.
|
329
|
-
# @complexity O(c).
|
330
|
-
# @see #shift_key
|
331
|
-
# @return The last key according to the <=> method defined on each member or nil if the hash is empty.
|
332
|
-
# @example
|
333
|
-
# set = RbLovely::SortedHash [:a, 2, :b, 10]
|
334
|
-
# expect(hash.pop_key).to equal :b
|
335
|
-
def pop_key ; end
|
336
|
-
|
337
328
|
# Remove the last key-value pair in the hash and return the value or return nil if the hash is empty.
|
338
329
|
# @complexity O(c).
|
339
330
|
# @see #shift_value
|
@@ -343,23 +334,14 @@ module RbLovely
|
|
343
334
|
# expect(hash.pop_value).to equal 10
|
344
335
|
def pop_value ; end
|
345
336
|
|
346
|
-
# Remove the
|
347
|
-
# @complexity O(c).
|
348
|
-
# @see #pop_value
|
349
|
-
# @return The first value according to the <=> method defined on each member or nil if the hash is empty.
|
350
|
-
# @example
|
351
|
-
# set = RbLovely::SortedHash [:a, 2, :b, 10]
|
352
|
-
# expect(hash.shift_value).to equal 2
|
353
|
-
def shift_value ; end
|
354
|
-
|
355
|
-
# Remove the last key-value pair in the hash and return it or return nil if the hash is empty.
|
337
|
+
# Remove the last key-value pair in the hash and return the key or return nil if the hash is empty.
|
356
338
|
# @complexity O(c).
|
357
|
-
# @see #
|
358
|
-
# @return The last
|
339
|
+
# @see #shift_key
|
340
|
+
# @return The last key according to the <=> method defined on each member or nil if the hash is empty.
|
359
341
|
# @example
|
360
342
|
# set = RbLovely::SortedHash [:a, 2, :b, 10]
|
361
|
-
# expect(hash.
|
362
|
-
def
|
343
|
+
# expect(hash.pop_key).to equal :b
|
344
|
+
def pop_key ; end
|
363
345
|
|
364
346
|
# Gets the number of elements in the hash.
|
365
347
|
# @complexity O(c).
|