Source code for titan_pylib.data_structures.safe_hash.hash_set
1from typing import Iterable
2from random import Random
3
4
[docs]
5class HashSet:
6
7 _r = Random()
8 _xor = _r.randrange(10000000, 1000000000)
9
10 def __init__(self, a: Iterable[int] = []):
11 self._data: set[int] = set(x ^ self._xor for x in a)
12
[docs]
13 def add(self, key: int) -> None:
14 self._data.add(key ^ self._xor)
15
[docs]
16 def discard(self, key: int) -> None:
17 self._data.discard(key ^ self._xor)
18
[docs]
19 def remove(self, key: int) -> None:
20 self._data.remove(key ^ self._xor)
21
22 def __contains__(self, key: int):
23 return key ^ self._xor in self._data
24
25 def __len__(self):
26 return len(self._data)
27
28 def __iter__(self):
29 return (k ^ self._xor for k in self._data.__iter__())
30
31 def __str__(self):
32 return "{" + ", ".join(sorted(map(str, self))) + "}"
33
34 def __repr__(self):
35 return f"{self.__class__.__name__}({self})"