Class: TestIds::BinArray
- Inherits:
-
Object
- Object
- TestIds::BinArray
- Defined in:
- lib/test_ids/bin_array.rb
Instance Method Summary collapse
- #<<(val) ⇒ Object
- #empty? ⇒ Boolean
- #freeze ⇒ Object
-
#include?(bin) ⇒ Boolean
Returns true if the array contains the given bin number.
-
#initialize ⇒ BinArray
constructor
A new instance of BinArray.
- #max ⇒ Object
- #min ⇒ Object
-
#next(after = nil) ⇒ Object
Returns the next bin in the array, starting from the first and remembering the last bin when called the next time.
Constructor Details
#initialize ⇒ BinArray
Returns a new instance of BinArray.
3 4 5 |
# File 'lib/test_ids/bin_array.rb', line 3 def initialize @store = [] end |
Instance Method Details
#<<(val) ⇒ Object
7 8 9 10 11 12 13 14 15 |
# File 'lib/test_ids/bin_array.rb', line 7 def <<(val) @store += Array(val) @store = @store.sort do |a, b| a = a.min if a.is_a?(Range) b = b.min if b.is_a?(Range) a <=> b end nil end |
#empty? ⇒ Boolean
17 18 19 |
# File 'lib/test_ids/bin_array.rb', line 17 def empty? @store.empty? end |
#freeze ⇒ Object
21 22 23 |
# File 'lib/test_ids/bin_array.rb', line 21 def freeze @store.freeze end |
#include?(bin) ⇒ Boolean
Returns true if the array contains the given bin number
26 27 28 29 30 |
# File 'lib/test_ids/bin_array.rb', line 26 def include?(bin) @store.any? do |v| v == bin || (v.is_a?(Range) && bin >= v.min && bin <= v.max) end end |
#max ⇒ Object
94 95 96 97 98 99 100 101 |
# File 'lib/test_ids/bin_array.rb', line 94 def max v = @store.last if v.is_a?(Range) v.max else v end end |
#min ⇒ Object
85 86 87 88 89 90 91 92 |
# File 'lib/test_ids/bin_array.rb', line 85 def min v = @store.first if v.is_a?(Range) v.min else v end end |
#next(after = nil) ⇒ Object
Returns the next bin in the array, starting from the first and remembering the last bin when called the next time. A bin can optionally be supplied in which case the internal pointer will be reset and the next bin that occurs after the given number will be returned.
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/test_ids/bin_array.rb', line 36 def next(after = nil) if after # Need to work out the pointer here as it is probably out of sync with the # last value now @pointer = nil i = 0 until @pointer v = @store[i] if v if after == v || (v.is_a?(Range) && after >= v.min && after <= v.max) @pointer = i @next = after elsif after < min_val(v) @pointer = previous_pointer(i) @next = min_val(v) - 1 end else # Gone past the end of the array @pointer = @store.size - 1 @next = min_val(@store[0]) - 1 end i += 1 end end if @next @pointer ||= 0 if @store[@pointer].is_a?(Range) && @next != @store[@pointer].max @next += 1 else @pointer += 1 # Return nil when we get to the end of the array if @pointer == @store.size @pointer -= 1 return nil end @next = @store[@pointer] @next = @next.min if @next.is_a?(Range) end else v = @store.first if v.is_a?(Range) @next = v.min else @next = v end end @next end |