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