class MemDB::Index::SequenceMatch

Public Class Methods

new(idx:, bucket: MemDB::Bucket) click to toggle source
# File lib/mem_db/index/sequence_match.rb, line 111
def initialize(idx:, bucket: MemDB::Bucket)
  @idx = idx
  @bucket = bucket
  @patterns = {}
  @matchers = {}
end

Public Instance Methods

add(obj, value) click to toggle source
# File lib/mem_db/index/sequence_match.rb, line 118
def add(obj, value)
  obj.idx_value(@idx).each do |pattern|
    @patterns[pattern] ||= @bucket.new
    @patterns[pattern].add(obj, value)

    @matchers[pattern] ||= SequenceIndex.new(pattern)
  end
end
query(query, out: MemDB::Out.new) click to toggle source
# File lib/mem_db/index/sequence_match.rb, line 127
def query(query, out: MemDB::Out.new)
  query.idx_value(@idx).each do |seq|
    select_one(query, seq, out)
  end

  out
end

Private Instance Methods

select_one(query, seq, out) click to toggle source
# File lib/mem_db/index/sequence_match.rb, line 137
def select_one(query, seq, out)
  @matchers.each do |pattern, sequence|
    next if seq.length < pattern.length

    @patterns[pattern].query(query, out: out) if sequence.index(seq) > -1
  end
end