range_list 1.3.0 → 1.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/range_list/version.rb +1 -1
- data/lib/range_list.rb +12 -11
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bac3ba3fced62c57e3d3fafa0f1999667172d7083defe6ec6404ca8ecfb83af0
|
4
|
+
data.tar.gz: 12708960354b2930dd49ff8ee80e8b809340c8b8447953baac65351a914ad73b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ebfdde12a2eca743326ffd44db017c23ff1ed796af325b4c0c0b1953cee76c427dd1a0ebf3d91e3a5674a2767332925881978292569fed01fca9ee30f5f55c28
|
7
|
+
data.tar.gz: dc711a4f3cf7a4157b11d9b0d7976f5411801f330daf7d501c427518434b3d3eb113f6d7aa3a65f019662bf230cf7f50f67b18266e4cc217ff3d6b2315d2c28b
|
data/Gemfile.lock
CHANGED
data/lib/range_list/version.rb
CHANGED
data/lib/range_list.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative "range_list/version"
|
4
3
|
require_relative "range_list/errors"
|
5
4
|
require_relative "range_list/avl_tree/rbtree_adapter"
|
6
5
|
|
@@ -18,8 +17,6 @@ class RangeList
|
|
18
17
|
# @raise [ArgumentError] when argement invalid
|
19
18
|
def add(range)
|
20
19
|
validate_range!(range)
|
21
|
-
|
22
|
-
# Return when range is empty.
|
23
20
|
return self if empty_range?(range)
|
24
21
|
|
25
22
|
# Get real range start.
|
@@ -54,8 +51,6 @@ class RangeList
|
|
54
51
|
# @raise (see #add)
|
55
52
|
def remove(range)
|
56
53
|
validate_range!(range)
|
57
|
-
|
58
|
-
# Return when range is empty.
|
59
54
|
return self if empty_range?(range)
|
60
55
|
|
61
56
|
# Insert end lower range, `-1` means not include.
|
@@ -91,8 +86,6 @@ class RangeList
|
|
91
86
|
# @raise (see #add)
|
92
87
|
def contains_all?(range)
|
93
88
|
validate_range!(range)
|
94
|
-
|
95
|
-
# Return false when range is empty.
|
96
89
|
return false if empty_range?(range)
|
97
90
|
|
98
91
|
start_lower_range = avl_tree.lower_entry(range[0])
|
@@ -106,8 +99,6 @@ class RangeList
|
|
106
99
|
# @raise (see #add)
|
107
100
|
def contains_any?(range)
|
108
101
|
validate_range!(range)
|
109
|
-
|
110
|
-
# Return false when range is empty.
|
111
102
|
return false if empty_range?(range)
|
112
103
|
|
113
104
|
# `-1` means not include.
|
@@ -120,17 +111,19 @@ class RangeList
|
|
120
111
|
# @return [Boolean]
|
121
112
|
# @raise (see #add)
|
122
113
|
def contains?(element)
|
123
|
-
|
114
|
+
validate_element!(element)
|
124
115
|
|
125
116
|
lower_entry = avl_tree.lower_entry(element)
|
126
117
|
!lower_entry.nil? && lower_entry[1] > element
|
127
118
|
end
|
128
119
|
|
129
120
|
# Give RangeList iterative ability.
|
121
|
+
# @return [RangeList, Enumerator]
|
130
122
|
# @yield [range_start, range_end] give the range element to the block
|
131
123
|
def each(&block)
|
132
124
|
if block
|
133
125
|
avl_tree.each(&block)
|
126
|
+
self
|
134
127
|
else
|
135
128
|
enum_for(:each)
|
136
129
|
end
|
@@ -138,9 +131,13 @@ class RangeList
|
|
138
131
|
|
139
132
|
# @!visibility private
|
140
133
|
def inspect
|
141
|
-
|
134
|
+
data = map { |k, v| "[#{k}, #{v})" }.join(", ")
|
135
|
+
"[#{data}]"
|
142
136
|
end
|
143
137
|
|
138
|
+
# @!visibility private
|
139
|
+
alias_method :to_s, :inspect
|
140
|
+
|
144
141
|
private
|
145
142
|
|
146
143
|
attr_reader :avl_tree
|
@@ -151,6 +148,10 @@ class RangeList
|
|
151
148
|
raise ArgumentError, "All elements of `range` should be `Integer`." unless range.all? { |item| item.is_a?(Integer) }
|
152
149
|
end
|
153
150
|
|
151
|
+
def validate_element!(element)
|
152
|
+
raise ArgumentError, "`element` should be `Integer` type." unless element.is_a?(Integer)
|
153
|
+
end
|
154
|
+
|
154
155
|
def empty_range?(range)
|
155
156
|
range[0] >= range[1]
|
156
157
|
end
|