Class: Drip::SortedArray
Instance Method Summary
collapse
lower_boundary, upper_boundary
Constructor Details
Returns a new instance of SortedArray.
433
434
435
436
|
# File 'lib/drip.rb', line 433
def initialize(ary)
@ary = ary
@last_key = ary.empty? ? 0 : ary[-1][0]
end
|
Instance Method Details
#empty? ⇒ Boolean
458
459
460
|
# File 'lib/drip.rb', line 458
def empty?
@ary.empty?
end
|
#fetch(key) ⇒ Object
444
445
446
447
448
|
# File 'lib/drip.rb', line 444
def fetch(key)
idx = lower_boundary(@ary, key)
k, v = @ary[idx]
k == key ? v.to_a : nil
end
|
#head(n) ⇒ Object
466
467
468
469
470
471
|
# File 'lib/drip.rb', line 466
def head(n)
n = @ary.size < n ? @ary.size : n
@ary[-n, n].collect {|kv|
[kv[0], *kv[1].to_a]
}
end
|
#last ⇒ Object
481
482
483
|
# File 'lib/drip.rb', line 481
def last
@ary[-1]
end
|
#last_key ⇒ Object
485
486
487
|
# File 'lib/drip.rb', line 485
def last_key
@ary.empty? ? 0 : last[0]
end
|
#latest?(key) ⇒ Boolean
462
463
464
|
# File 'lib/drip.rb', line 462
def latest?(key)
@last_key == key
end
|
#older(key) ⇒ Object
473
474
475
476
477
478
479
|
# File 'lib/drip.rb', line 473
def older(key)
return nil if @ary.empty?
key = @ary[-1][0] + 1 unless key
idx = upper_boundary(@ary, key - 1)
k, v = @ary[idx - 1]
k && k < key ? [k, *v.to_a] : nil
end
|
#push(obj) ⇒ Object
438
439
440
441
442
|
# File 'lib/drip.rb', line 438
def push(obj)
raise 'InvalidTimeError' if obj[0] <= @last_key
@last_key = obj[0]
@ary << obj
end
|
#read(key, n = 1) ⇒ Object
450
451
452
453
454
455
456
|
# File 'lib/drip.rb', line 450
def read(key, n=1)
idx = lower_boundary(@ary, key + 1)
return [] unless idx
@ary[idx, n].collect {|kv|
[kv[0], *kv[1].to_a]
}
end
|