🔍

No recent searches

# class SyntaxSuggest::PriorityEngulfQueue

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

### Public Class Methods

new ()
Source

    # File lib/syntax_suggest/priority_engulf_queue.rb, line 9
    def initialize
      @queue = PriorityQueue.new
    end

### Public Instance Methods

empty? ()
Source

    # File lib/syntax_suggest/priority_engulf_queue.rb, line 17
    def empty?
      @queue.empty?
    end

length ()
Source

    # File lib/syntax_suggest/priority_engulf_queue.rb, line 21
    def length
      @queue.length
    end

peek ()
Source

    # File lib/syntax_suggest/priority_engulf_queue.rb, line 25
    def peek
      @queue.peek
    end

pop ()
Source

    # File lib/syntax_suggest/priority_engulf_queue.rb, line 29
    def pop
      @queue.pop
    end

push (block)
Source

    # File lib/syntax_suggest/priority_engulf_queue.rb, line 33
    def push(block)
      prune_engulf(block)
      @queue << block
      flush_deleted

      self
    end

to_a ()
Source

    # File lib/syntax_suggest/priority_engulf_queue.rb, line 13
    def to_a
      @queue.to_a
    end

### Private Instance Methods

flush_deleted ()
Source

    # File lib/syntax_suggest/priority_engulf_queue.rb, line 41
            def flush_deleted
      while @queue&.peek&.deleted?
        @queue.pop
      end
    end

prune_engulf (block)
Source

    # File lib/syntax_suggest/priority_engulf_queue.rb, line 47
            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