aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rpkid/rpki/resource_set.py23
1 files changed, 16 insertions, 7 deletions
diff --git a/rpkid/rpki/resource_set.py b/rpkid/rpki/resource_set.py
index ce6be33d..1ed65c3b 100644
--- a/rpkid/rpki/resource_set.py
+++ b/rpkid/rpki/resource_set.py
@@ -334,14 +334,23 @@ class resource_set(list):
Set membership test for resource sets.
"""
assert not self.inherit
- for i in self:
- if isinstance(item, type(i)) and i.min <= item.min and i.max >= item.max:
- return True
- elif isinstance(item, type(i.min)) and i.min <= item and i.max >= item:
- return True
+ if not self:
+ return False
+ if type(item) is type(self[0]):
+ min = item.min
+ max = item.max
+ else:
+ min = item
+ max = item
+ lo = 0
+ hi = len(self)
+ while lo < hi:
+ mid = (lo + hi) / 2
+ if self[mid].max < max:
+ lo = mid + 1
else:
- assert isinstance(item, (type(i), type(i.min)))
- return False
+ hi = mid
+ return lo < len(self) and self[lo].min <= min and self[lo].max >= max
def issubset(self, other):
"""