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.



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

Returns:

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

#lastObject



481
482
483
# File 'lib/drip.rb', line 481

def last
  @ary[-1]
end

#last_keyObject



485
486
487
# File 'lib/drip.rb', line 485

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

#latest?(key) ⇒ Boolean

Returns:

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