fast_interval_tree 0.2.0 → 0.2.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/interval_tree.rb +8 -9
- data/lib/interval_tree/version.rb +1 -1
- 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: 76c2158339521afbea402854c53dbf41efd4e73ebec8e629e65a50a936caea52
|
4
|
+
data.tar.gz: 7566ffd399bd3c3326f225293e57b6b3f51ad65251be37139b193e97d6839a0d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d643a594d55ca5d04feffacb70a77e6aacc1eb0ed220c129d2b4cab60d865b9608f2dbd1fbe870f895f5c5488dec140582baa3db27c68f81899cc2a9ddaf3a68
|
7
|
+
data.tar.gz: 90c68303fe996c0b24d130baa2d1af50462e547e05ef8d9b7920737ad1317cabb6c630b085583659e231b3be2cbb82659f1fd590a9f8e0c4d25ddea90a73ffc7
|
data/Gemfile.lock
CHANGED
data/lib/interval_tree.rb
CHANGED
@@ -19,9 +19,9 @@ module IntervalTree
|
|
19
19
|
|
20
20
|
intervals.each do |k|
|
21
21
|
case
|
22
|
-
when k.last < x_center
|
22
|
+
when k.last.to_r < x_center
|
23
23
|
s_left << k
|
24
|
-
when k.first > x_center
|
24
|
+
when k.first.to_r > x_center
|
25
25
|
s_right << k
|
26
26
|
else
|
27
27
|
s_center << k
|
@@ -66,11 +66,10 @@ module IntervalTree
|
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
|
-
# Note: Floors the result
|
70
69
|
def center(intervals)
|
71
70
|
(
|
72
|
-
intervals.map(&:begin).min +
|
73
|
-
intervals.map(&:end).max
|
71
|
+
intervals.map(&:begin).min.to_r +
|
72
|
+
intervals.map(&:end).max.to_r
|
74
73
|
) / 2
|
75
74
|
end
|
76
75
|
|
@@ -80,10 +79,10 @@ module IntervalTree
|
|
80
79
|
result << k
|
81
80
|
end
|
82
81
|
end
|
83
|
-
if node.left_node && ( point < node.x_center )
|
82
|
+
if node.left_node && ( point.to_r < node.x_center )
|
84
83
|
point_search(node.left_node, point, []).each{|k|result << k}
|
85
84
|
end
|
86
|
-
if node.right_node && ( point >= node.x_center )
|
85
|
+
if node.right_node && ( point.to_r >= node.x_center )
|
87
86
|
point_search(node.right_node, point, []).each{|k|result << k}
|
88
87
|
end
|
89
88
|
if unique
|
@@ -113,8 +112,8 @@ module IntervalTree
|
|
113
112
|
# Search by range only
|
114
113
|
def search(query)
|
115
114
|
search_s_center(query) +
|
116
|
-
(query.begin < x_center && left_node&.search(query) || []) +
|
117
|
-
(query.end > x_center && right_node&.search(query) || [])
|
115
|
+
(query.begin.to_r < x_center && left_node&.search(query) || []) +
|
116
|
+
(query.end.to_r > x_center && right_node&.search(query) || [])
|
118
117
|
end
|
119
118
|
|
120
119
|
private
|