Class: Async::Redis::RangeMap

Inherits:
Object
  • Object
show all
Defined in:
lib/async/redis/range_map.rb

Overview

A map that associates one or more ranges with a value for efficient lookup.

Instance Method Summary collapse

Constructor Details

#initializeRangeMap

Initialize a new RangeMap.



12
13
14
# File 'lib/async/redis/range_map.rb', line 12

def initialize
	@entries = []
end

Instance Method Details

#add(ranges, value) ⇒ Object

Add one or more ranges associated with a value to the map.



20
21
22
23
24
# File 'lib/async/redis/range_map.rb', line 20

def add(ranges, value)
	ranges = [ranges] if ranges.is_a?(Range)
	@entries << [ranges, value]
	return value
end

#clearObject

Clear all ranges from the map.



58
59
60
# File 'lib/async/redis/range_map.rb', line 58

def clear
	@entries.clear
end

#eachObject

Iterate over each mapped value.



43
44
45
46
47
# File 'lib/async/redis/range_map.rb', line 43

def each
	@entries.each do |_, value|
		yield value
	end
end

#find(key) ⇒ Object

Find the value associated with a key within any range.



30
31
32
33
34
35
36
37
38
# File 'lib/async/redis/range_map.rb', line 30

def find(key)
	@entries.each do |ranges, value|
		return value if ranges.any?{|range| range.include?(key)}
	end
	if block_given?
		return yield
	end
	return nil
end

#sampleObject

Get a random value from the map.



51
52
53
54
55
# File 'lib/async/redis/range_map.rb', line 51

def sample
	return nil if @entries.empty?
	_, value = @entries.sample
	return value
end