Class: SBSM::Index

Inherits:
Object
  • Object
show all
Defined in:
lib/sbsm/index.rb

Instance Method Summary collapse

Constructor Details

#initializeIndex

Returns a new instance of Index.



29
30
31
32
# File 'lib/sbsm/index.rb', line 29

def initialize
  @values = []
  @children = []
end

Instance Method Details

#delete(key, value) ⇒ Object



33
34
35
36
37
38
39
# File 'lib/sbsm/index.rb', line 33

def delete(key, value)
  if (key.size == 0)
    @values.delete(value)
  elsif (child = @children.at(key.chars.first.ord))
    child.delete(key[1..-1], value)
  end
end

#fetch(key) ⇒ Object Also known as: []



40
41
42
43
44
45
46
47
48
# File 'lib/sbsm/index.rb', line 40

def fetch(key)
  if(key.size == 1)
    @values + @children[key.chars.first.ord].to_a
  elsif(key.size > 1 && @children.at(key.chars.first.ord))
    @children.at(key.chars.first.ord)[key[1..-1]]
  else
    []
  end
end

#replace(oldkey, newkey, value) ⇒ Object



49
50
51
52
# File 'lib/sbsm/index.rb', line 49

def replace(oldkey, newkey, value)
  delete(oldkey, value)
  store(newkey, value)
end

#store(key, *values) ⇒ Object Also known as: []=



53
54
55
56
57
58
59
60
# File 'lib/sbsm/index.rb', line 53

def store(key, *values)
  if(key.size == 0)
    @values += values
  else
    @children[key.chars.first.ord] ||= self.class.new
    @children.at(key.chars.first.ord).store(key[1..-1], *values)
  end
end

#to_aObject



61
62
63
# File 'lib/sbsm/index.rb', line 61

def to_a
  @values + @children.inject([]) { |inj, child| inj += child.to_a.compact }
end