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