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})"