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