21class OpenAddressingHashTable {
23 OpenAddressingHashTable();
24 virtual ~OpenAddressingHashTable();
25 virtual uint32_t getKeyFromAddress(
void* address) = 0;
26 virtual void setKeyAtAddress(uint32_t key,
void* address) = 0;
27 virtual bool doesKeyIndicateEmptyBucket(uint32_t key) = 0;
29 int32_t getBucketIndex(uint32_t key);
30 void* getBucketAddress(int32_t b);
31 void* secondaryMemoryGetBucketAddress(int32_t b);
32 void* insert(uint32_t key,
bool* onlyIfNotAlreadyPresent =
nullptr);
33 void* lookup(uint32_t key);
34 bool remove(uint32_t key);
35 void empty(
bool destructing =
false);
41 void* secondaryMemory;
42 int32_t secondaryMemoryNumBuckets;
43 uint32_t secondaryMemoryFunctionCurrentIteration;
44 uint8_t secondaryMemoryCurrentFunction;
47 int8_t initialNumBuckets;
50class OpenAddressingHashTableWith32bitKey final :
public OpenAddressingHashTable {
52 OpenAddressingHashTableWith32bitKey();
53 uint32_t getKeyFromAddress(
void* address)
override;
54 void setKeyAtAddress(uint32_t key,
void* address)
override;
55 bool doesKeyIndicateEmptyBucket(uint32_t key)
override;
58class OpenAddressingHashTableWith16bitKey final :
public OpenAddressingHashTable {
60 OpenAddressingHashTableWith16bitKey();
61 uint32_t getKeyFromAddress(
void* address)
override;
62 void setKeyAtAddress(uint32_t key,
void* address)
override;
63 bool doesKeyIndicateEmptyBucket(uint32_t key)
override;
66class OpenAddressingHashTableWith8bitKey final :
public OpenAddressingHashTable {
68 OpenAddressingHashTableWith8bitKey();
69 uint32_t getKeyFromAddress(
void* address)
override;
70 void setKeyAtAddress(uint32_t key,
void* address)
override;
71 bool doesKeyIndicateEmptyBucket(uint32_t key)
override;