Class: Drip::SortedArray

Inherits:
Object
  • Object
show all
Includes:
ArrayBsearch
Defined in:
lib/drip.rb

Instance Method Summary collapse

Methods included from ArrayBsearch

lower_boundary, upper_boundary

Constructor Details

#initialize(ary) ⇒ SortedArray

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

Returns:

  • (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

#lastObject



503
504
505
# File 'lib/drip.rb', line 503

def last
  @ary[-1]
end

#last_keyObject



507
508
509
# File 'lib/drip.rb', line 507

def last_key
  @ary.empty? ? 0 : last[0]
end

#latest?(key) ⇒ Boolean

Returns:

  • (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