class MemDB::Index::PatternMatch
Attributes
bucket[R]
idx[R]
Public Class Methods
new(idx:, bucket: MemDB::Bucket)
click to toggle source
# File lib/mem_db/index/pattern_match.rb, line 30 def initialize(idx:, bucket: MemDB::Bucket) @idx = idx @bucket = bucket end
Public Instance Methods
add(obj, value)
click to toggle source
# File lib/mem_db/index/pattern_match.rb, line 35 def add(obj, value) obj.idx_value(@idx).each do |pattern| type = pattern[0] sequence = pattern[1] index = case type when :enum enums when :prefix prefixes when :suffix suffixes when :substring substrings end obj[self] = sequence index.add(obj, value) obj.delete(self) end end
query(query, out: MemDB::Out.new)
click to toggle source
# File lib/mem_db/index/pattern_match.rb, line 57 def query(query, out: MemDB::Out.new) query.idx_value(@idx).each do |q| query[self] = q @enums&.query(query, out: out) @suffixes&.query(query, out: out) @prefixes&.query(query, out: out) @substrings&.query(query, out: out) query.delete(self) end out end
Private Instance Methods
enums()
click to toggle source
# File lib/mem_db/index/pattern_match.rb, line 74 def enums @enums ||= MemDB::Index::Enum.new( idx: MemDB::Idx::Itself.new(self), bucket: @bucket ) end
prefixes()
click to toggle source
# File lib/mem_db/index/pattern_match.rb, line 81 def prefixes @prefixes ||= MemDB::Index::PrefixTree.new( idx: MemDB::Idx::Bytes.new(self), bucket: @bucket ) end
substrings()
click to toggle source
# File lib/mem_db/index/pattern_match.rb, line 95 def substrings @substrings ||= MemDB::Index::SequenceMatch.new( # reverse somehow make it faster idx: MemDB::Idx::Reverse.new(MemDB::Idx::Bytes.new(self)), bucket: @bucket ) end
suffixes()
click to toggle source
# File lib/mem_db/index/pattern_match.rb, line 88 def suffixes @suffixes ||= MemDB::Index::PrefixTree.new( idx: MemDB::Idx::Reverse.new(MemDB::Idx::Bytes.new(self)), bucket: @bucket ) end