Source code for titan_pylib.data_structures.safe_hash.hash_dict

 1from typing import Any, Iterator
 2from random import Random
 3
 4
[docs] 5class HashDict: 6 7 _r = Random() 8 _xor = _r.randrange(10000000, 1000000000) 9 10 def __init__(self) -> None: 11 self._data: dict[int, Any] = {} 12 13 def __setitem__(self, key: int, val: Any) -> None: 14 self._data[key ^ self._xor] = val 15 16 def __getitem__(self, key: int) -> Any: 17 return self._data[key ^ self._xor] 18 19 def __delitem__(self, key: int) -> None: 20 del self._data[key ^ self._xor] 21 22 def __contains__(self, key: int) -> bool: 23 return key ^ self._xor in self._data 24 25 def __len__(self) -> bool: 26 return len(self._data) 27
[docs] 28 def keys(self) -> Iterator[int]: 29 return (k ^ self._xor for k in self._data.keys())
30
[docs] 31 def values(self) -> Iterator[Any]: 32 return (v for v in self._data.values())
33
[docs] 34 def items(self) -> Iterator[tuple[int, Any]]: 35 return ((k ^ self._xor, v) for k, v in self._data.items())
36 37 def __str__(self) -> str: 38 return "{" + ", ".join(f"{k}: {v}" for k, v in self.items()) + "}" 39 40 def __repr__(self): 41 return f"{self.__class__.__name__}({self})"