Class: Drip::SortedArray
Instance Method Summary
collapse
lower_boundary, upper_boundary
Constructor Details
Returns a new instance of SortedArray.
455
456
457
458
|
# File 'lib/drip.rb', line 455
def initialize(ary)
@ary = ary
@last_key = ary.empty? ? 0 : ary[-1][0]
end
|
Instance Method Details
#empty? ⇒ Boolean
480
481
482
|
# File 'lib/drip.rb', line 480
def empty?
@ary.empty?
end
|
#fetch(key) ⇒ Object
466
467
468
469
470
|
# File 'lib/drip.rb', line 466
def fetch(key)
idx = lower_boundary(@ary, key)
k, v = @ary[idx]
k == key ? v.to_a : nil
end
|
#head(n) ⇒ Object
488
489
490
491
492
493
|
# File 'lib/drip.rb', line 488
def head(n)
n = @ary.size < n ? @ary.size : n
@ary[-n, n].collect {|kv|
[kv[0], *kv[1].to_a]
}
end
|
#last ⇒ Object
503
504
505
|
# File 'lib/drip.rb', line 503
def last
@ary[-1]
end
|
#last_key ⇒ Object
507
508
509
|
# File 'lib/drip.rb', line 507
def last_key
@ary.empty? ? 0 : last[0]
end
|
#latest?(key) ⇒ Boolean
484
485
486
|
# File 'lib/drip.rb', line 484
def latest?(key)
@last_key == key
end
|
#older(key) ⇒ Object
495
496
497
498
499
500
501
|
# File 'lib/drip.rb', line 495
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
460
461
462
463
464
|
# File 'lib/drip.rb', line 460
def push(obj)
raise 'InvalidTimeError' if obj[0] <= @last_key
@last_key = obj[0]
@ary << obj
end
|
#read(key, n = 1) ⇒ Object
472
473
474
475
476
477
478
|
# File 'lib/drip.rb', line 472
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
|