diff --git a/hash_table.h b/hash_table.h index 3b3e264..aae9264 100644 --- a/hash_table.h +++ b/hash_table.h @@ -162,7 +162,7 @@ static int PREFIX(_insert)(PREFIX(_table) *table, return 0; } -static void *PREFIX(_table_get)(PREFIX(_table) *table, const void *key) +static void *PREFIX(_table_get_cell)(PREFIX(_table) *table, const void *key) { uint32_t hash = MAP_TABLE_HASH_KEY(key); PREFIX(_table_cell) cell = PREFIX(_table_lookup)(table, hash); @@ -173,7 +173,7 @@ static void *PREFIX(_table_get)(PREFIX(_table) *table, const void *key) } if (MAP_TABLE_COMPARE_FUNCTION(key, cell->value)) { - return cell->value; + return cell; } uint32_t jump = cell->secondMaps; // Look at each offset defined by the jump table to find the displaced location. @@ -182,7 +182,7 @@ static void *PREFIX(_table_get)(PREFIX(_table) *table, const void *key) PREFIX(_table_cell) hopCell = PREFIX(_table_lookup)(table, hash+hop); if (MAP_TABLE_COMPARE_FUNCTION(key, hopCell->value)) { - return hopCell->value; + return hopCell; } // Clear the most significant bit and try again. jump &= ~(1 << (hop-1)); @@ -190,6 +190,26 @@ static void *PREFIX(_table_get)(PREFIX(_table) *table, const void *key) return NULL; } +static void *PREFIX(_table_get)(PREFIX(_table) *table, const void *key) +{ + PREFIX(_table_cell) cell = PREFIX(_table_get_cell)(table, key); + if (NULL == cell) + { + return NULL; + } + return cell->value; +} +static void PREFIX(_table_set)(PREFIX(_table) *table, const void *key, + void *value) +{ + PREFIX(_table_cell) cell = PREFIX(_table_get_cell)(table, key); + if (NULL == cell) + { + PREFIX(_insert)(table, key, value); + } + cell->value = value; +} + void *PREFIX(_next)(PREFIX(_table) *table, struct PREFIX(_table_enumerator) **state) {