static void test_Hash_Sum(TestBatch *batch) { Obj *testobj = S_new_testobj(); int64_t address64 = PTR_TO_I64(testobj); int32_t address32 = (int32_t)address64; TEST_TRUE(batch, (Obj_Hash_Sum(testobj) == address32), "Hash_Sum uses memory address"); DECREF(testobj); }
Obj* Hash_Delete_IMP(Hash *self, Obj *key) { HashEntry *entry = SI_fetch_entry(self, key, Obj_Hash_Sum(key)); if (entry) { Obj *value = entry->value; DECREF(entry->key); entry->key = (Obj*)TOMBSTONE; entry->value = NULL; entry->hash_sum = 0; self->size--; self->threshold--; // limit number of tombstones return value; } else { return NULL; } }
Obj* Hash_Fetch_IMP(Hash *self, Obj *key) { HashEntry *entry = SI_fetch_entry(self, key, Obj_Hash_Sum(key)); return entry ? entry->value : NULL; }
void Hash_Store_IMP(Hash *self, Obj *key, Obj *value) { Hash_do_store(self, key, value, Obj_Hash_Sum(key), false); }