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.



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

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

Instance Method Details

#delete(key, value) ⇒ Object



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

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: []



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

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



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

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

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



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

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



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

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