Bump black to version 23
[babeltrace.git] / src / bindings / python / bt2 / bt2 / integer_range_set.py
CommitLineData
0235b0db 1# SPDX-License-Identifier: MIT
19bb8b5a
PP
2#
3# Copyright (c) 2017 Philippe Proulx <pproulx@efficios.com>
19bb8b5a
PP
4
5from bt2 import native_bt, object, utils
6import collections.abc
7import bt2
8
9
fc866000 10class _IntegerRangeConst:
7a2a2328 11 def __init__(self, lower, upper=None):
19bb8b5a 12 self._check_type(lower)
7a2a2328
PP
13
14 if upper is None:
15 upper = lower
16
19bb8b5a
PP
17 self._check_type(upper)
18
19 if lower > upper:
cfbd7cf3
FD
20 raise ValueError(
21 "range's lower bound ({}) is greater than its upper bound ({})".format(
22 lower, upper
23 )
24 )
19bb8b5a
PP
25
26 self._lower = lower
27 self._upper = upper
28
29 @property
30 def lower(self):
31 return self._lower
32
33 @property
34 def upper(self):
35 return self._upper
36
37 def contains(self, value):
38 self._check_type(value)
39 return value >= self._lower and value <= self._upper
40
41 def __eq__(self, other):
fc866000 42 if not isinstance(other, _IntegerRangeConst):
19bb8b5a
PP
43 return False
44
45 return self.lower == other.lower and self.upper == other.upper
46
47
fc866000
FD
48class _IntegerRange(_IntegerRangeConst):
49 def __init__(self, lower, upper=None):
50 super().__init__(lower, upper)
51
52
53class _SignedIntegerRangeConst(_IntegerRangeConst):
7a2a2328 54 _is_type = staticmethod(utils._is_int64)
19bb8b5a
PP
55 _check_type = staticmethod(utils._check_int64)
56
57
fc866000
FD
58class SignedIntegerRange(_SignedIntegerRangeConst, _IntegerRange):
59 pass
19bb8b5a
PP
60
61
fc866000
FD
62class _UnsignedIntegerRangeConst(_IntegerRangeConst):
63 _is_type = staticmethod(utils._is_uint64)
64 _check_type = staticmethod(utils._check_uint64)
19bb8b5a 65
19bb8b5a 66
fc866000
FD
67class UnsignedIntegerRange(_UnsignedIntegerRangeConst, _IntegerRange):
68 pass
19bb8b5a 69
19bb8b5a 70
fc866000 71class _IntegerRangeSetConst(object._SharedObject, collections.abc.Set):
19bb8b5a
PP
72 def __len__(self):
73 range_set_ptr = self._as_range_set_ptr(self._ptr)
74 count = native_bt.integer_range_set_get_range_count(range_set_ptr)
75 assert count >= 0
76 return count
77
78 def __contains__(self, other_range):
79 for rg in self:
80 if rg == other_range:
81 return True
82
83 return False
84
85 def __iter__(self):
86 for idx in range(len(self)):
fc866000 87 rg_ptr = self._borrow_range_ptr_by_index(self._ptr, idx)
19bb8b5a
PP
88 assert rg_ptr is not None
89 lower = self._range_get_lower(rg_ptr)
90 upper = self._range_get_upper(rg_ptr)
fc866000 91 yield self._range_pycls(lower, upper)
19bb8b5a
PP
92
93 def __eq__(self, other):
fc866000 94 if not isinstance(other, _IntegerRangeSetConst):
19bb8b5a
PP
95 return False
96
cd933d89 97 return self._is_equal(self._ptr, other._ptr)
19bb8b5a
PP
98
99 def contains_value(self, value):
100 for rg in self:
101 if rg.contains(value):
102 return True
103
104 return False
105
fc866000
FD
106
107class _IntegerRangeSet(_IntegerRangeSetConst, collections.abc.MutableSet):
108 def __init__(self, ranges=None):
109 ptr = self._create_range_set()
110
111 if ptr is None:
f5567ea8 112 raise bt2._MemoryError("cannot create range set object")
fc866000
FD
113
114 super().__init__(ptr)
115
116 if ranges is not None:
117 # will raise if not iterable
118 for rg in ranges:
119 self.add(rg)
120
19bb8b5a 121 def add(self, rg):
fc866000
FD
122 if type(rg) is not self._range_pycls:
123 if self._range_pycls._is_type(rg):
124 rg = self._range_pycls(rg)
7a2a2328
PP
125 else:
126 # assume it's a simple pair (will raise if it's not)
fc866000 127 rg = self._range_pycls(rg[0], rg[1])
19bb8b5a
PP
128
129 status = self._add_range(self._ptr, rg.lower, rg.upper)
f5567ea8 130 utils._handle_func_status(status, "cannot add range to range set object")
19bb8b5a
PP
131
132 def discard(self, rg):
133 raise NotImplementedError
134
135
fc866000 136class _SignedIntegerRangeSetConst(_IntegerRangeSetConst):
9dee90bd
SM
137 @staticmethod
138 def _get_ref(ptr):
139 native_bt.integer_range_set_signed_get_ref(ptr)
140
141 @staticmethod
142 def _put_ref(ptr):
143 native_bt.integer_range_set_signed_put_ref(ptr)
144
cfbd7cf3
FD
145 _as_range_set_ptr = staticmethod(
146 native_bt.integer_range_set_signed_as_range_set_const
147 )
fc866000 148 _borrow_range_ptr_by_index = staticmethod(
cfbd7cf3
FD
149 native_bt.integer_range_set_signed_borrow_range_by_index_const
150 )
19bb8b5a
PP
151 _range_get_lower = staticmethod(native_bt.integer_range_signed_get_lower)
152 _range_get_upper = staticmethod(native_bt.integer_range_signed_get_upper)
cd933d89 153 _is_equal = staticmethod(native_bt.integer_range_set_signed_is_equal)
fc866000 154 _range_pycls = _SignedIntegerRangeConst
19bb8b5a
PP
155
156
fc866000
FD
157class SignedIntegerRangeSet(_SignedIntegerRangeSetConst, _IntegerRangeSet):
158 _create_range_set = staticmethod(native_bt.integer_range_set_signed_create)
159 _add_range = staticmethod(native_bt.integer_range_set_signed_add_range)
160 _range_pycls = SignedIntegerRange
161
162
163class _UnsignedIntegerRangeSetConst(_IntegerRangeSetConst):
9dee90bd
SM
164 @staticmethod
165 def _get_ref(ptr):
166 native_bt.integer_range_set_unsigned_get_ref(ptr)
167
168 @staticmethod
169 def _put_ref(ptr):
170 native_bt.integer_range_set_unsigned_put_ref(ptr)
171
cfbd7cf3
FD
172 _as_range_set_ptr = staticmethod(
173 native_bt.integer_range_set_unsigned_as_range_set_const
174 )
fc866000 175 _borrow_range_ptr_by_index = staticmethod(
cfbd7cf3
FD
176 native_bt.integer_range_set_unsigned_borrow_range_by_index_const
177 )
19bb8b5a
PP
178 _range_get_lower = staticmethod(native_bt.integer_range_unsigned_get_lower)
179 _range_get_upper = staticmethod(native_bt.integer_range_unsigned_get_upper)
cd933d89 180 _is_equal = staticmethod(native_bt.integer_range_set_unsigned_is_equal)
fc866000
FD
181 _range_pycls = _UnsignedIntegerRangeConst
182
183
184class UnsignedIntegerRangeSet(_UnsignedIntegerRangeSetConst, _IntegerRangeSet):
185 _create_range_set = staticmethod(native_bt.integer_range_set_unsigned_create)
186 _add_range = staticmethod(native_bt.integer_range_set_unsigned_add_range)
187 _range_pycls = UnsignedIntegerRange
This page took 0.065235 seconds and 4 git commands to generate.