Class: Async::Redis::RangeMap
- Inherits:
-
Object
- Object
- Async::Redis::RangeMap
- 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
-
#add(ranges, value) ⇒ Object
Add one or more ranges associated with a value to the map.
-
#clear ⇒ Object
Clear all ranges from the map.
-
#each ⇒ Object
Iterate over each mapped value.
-
#find(key) ⇒ Object
Find the value associated with a key within any range.
-
#initialize ⇒ RangeMap
constructor
Initialize a new RangeMap.
-
#sample ⇒ Object
Get a random value from the map.
Constructor Details
#initialize ⇒ RangeMap
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 |
#clear ⇒ Object
Clear all ranges from the map.
58 59 60 |
# File 'lib/async/redis/range_map.rb', line 58 def clear @entries.clear end |
#each ⇒ Object
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 |
#sample ⇒ Object
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 |