Class: SyntaxSuggest::PriorityEngulfQueue
| Relationships & Source Files | |
| Inherits: | Object | 
| Defined in: | lib/syntax_suggest/priority_engulf_queue.rb | 
Overview
Keeps track of what elements are in the queue in priority and also ensures that when one element engulfs/covers/eats another that the larger element evicts the smaller element
Class Method Summary
- .new ⇒ PriorityEngulfQueue constructor
Instance Attribute Summary
- #empty? ⇒ Boolean readonly
Instance Method Summary
- #length
- #peek
- #pop
- #push(block)
- #to_a
- #flush_deleted private
- #prune_engulf(block) private
Constructor Details
    .new  ⇒ PriorityEngulfQueue 
  
# File 'lib/syntax_suggest/priority_engulf_queue.rb', line 9
def initialize @queue = PriorityQueue.new end
Instance Attribute Details
    #empty?  ⇒ Boolean  (readonly)
  
  [ GitHub ]
# File 'lib/syntax_suggest/priority_engulf_queue.rb', line 17
def empty? @queue.empty? end
Instance Method Details
#flush_deleted (private)
[ GitHub ]#length
[ GitHub ]# File 'lib/syntax_suggest/priority_engulf_queue.rb', line 21
def length @queue.length end
#peek
[ GitHub ]# File 'lib/syntax_suggest/priority_engulf_queue.rb', line 25
def peek @queue.peek end
#pop
[ GitHub ]# File 'lib/syntax_suggest/priority_engulf_queue.rb', line 29
def pop @queue.pop end
#prune_engulf(block) (private)
[ GitHub ]# File 'lib/syntax_suggest/priority_engulf_queue.rb', line 47
private def prune_engulf(block) # If we're about to pop off the same block, we can skip deleting # things from the frontier this iteration since we'll get it # on the next iteration return if @queue.peek && (block <=> @queue.peek) == 1 if block.starts_at != block.ends_at # A block of size 1 cannot engulf another @queue.to_a.each { |b| if b.starts_at >= block.starts_at && b.ends_at <= block.ends_at b.delete true end } end end
#push(block)
[ GitHub ]# File 'lib/syntax_suggest/priority_engulf_queue.rb', line 33
def push(block) prune_engulf(block) @queue << block flush_deleted self end
#to_a
[ GitHub ]# File 'lib/syntax_suggest/priority_engulf_queue.rb', line 13
def to_a @queue.to_a end