Class: RangeSet
- Inherits:
-
Object
- Object
- RangeSet
- Defined in:
- lib/range_set.rb,
lib/range_set/version.rb
Constant Summary collapse
- VERSION =
"0.0.2"
Instance Method Summary collapse
- #clone ⇒ Object
- #each ⇒ Object
- #empty? ⇒ Boolean
-
#include?(v) ⇒ Boolean
TODO : need to be more explicit and careful about whether or not a range’s end is inclusive.
-
#initialize(*ranges) ⇒ RangeSet
constructor
A new instance of RangeSet.
- #intersect(r) ⇒ Object (also: #&)
- #intersect!(r) ⇒ Object
- #ranges ⇒ Object
- #subtract(r) ⇒ Object (also: #-)
- #subtract!(r) ⇒ Object
- #union(r) ⇒ Object (also: #|, #+)
- #union!(r) ⇒ Object
Constructor Details
#initialize(*ranges) ⇒ RangeSet
Returns a new instance of RangeSet.
9 10 11 12 13 14 15 |
# File 'lib/range_set.rb', line 9 def initialize(*ranges) @rbtree = RBTree.new ranges.each do |r| union_with_range!(r) end self end |
Instance Method Details
#clone ⇒ Object
17 18 19 20 21 |
# File 'lib/range_set.rb', line 17 def clone result = super result.send(:rbtree=, result.send(:rbtree).clone) result end |
#each ⇒ Object
62 63 64 |
# File 'lib/range_set.rb', line 62 def each @rbtree.each_value {|r| yield r} end |
#empty? ⇒ Boolean
107 108 109 |
# File 'lib/range_set.rb', line 107 def empty? @rbtree.empty? end |
#include?(v) ⇒ Boolean
TODO : need to be more explicit and careful about whether or not a range’s end is inclusive. For now, we just assume that it’s NOT inclusive.
96 97 98 99 100 101 102 103 104 105 |
# File 'lib/range_set.rb', line 96 def include?(v) case v when Range include_range?(v) when RangeSet include_rangeset?(v) else include_scalar?(v) end end |
#intersect(r) ⇒ Object Also known as: &
32 33 34 |
# File 'lib/range_set.rb', line 32 def intersect(r) self.clone.intersect!(r) end |
#intersect!(r) ⇒ Object
23 24 25 26 27 28 29 30 |
# File 'lib/range_set.rb', line 23 def intersect!(r) if r.is_a?(Range) intersect_with_range!(r) elsif r.is_a?(RangeSet) intersect_with_rangeset!(r) end self end |
#ranges ⇒ Object
5 6 7 |
# File 'lib/range_set.rb', line 5 def ranges @rbtree.values end |
#subtract(r) ⇒ Object Also known as: -
45 46 47 |
# File 'lib/range_set.rb', line 45 def subtract(r) self.clone.subtract!(r) end |
#subtract!(r) ⇒ Object
36 37 38 39 40 41 42 43 |
# File 'lib/range_set.rb', line 36 def subtract!(r) if r.is_a?(Range) subtract_range!(r) elsif r.is_a?(RangeSet) subtract_rangeset!(r) end self end |
#union(r) ⇒ Object Also known as: |, +
58 59 60 |
# File 'lib/range_set.rb', line 58 def union(r) self.clone.union!(r) end |
#union!(r) ⇒ Object
49 50 51 52 53 54 55 56 |
# File 'lib/range_set.rb', line 49 def union!(r) if r.is_a?(Range) union_with_range!(r) elsif r.is_a?(RangeSet) union_with_rangeset!(r) end self end |