diff options
Diffstat (limited to 'include/tt_llcht.c')
| -rw-r--r-- | include/tt_llcht.c | 71 |
1 files changed, 19 insertions, 52 deletions
diff --git a/include/tt_llcht.c b/include/tt_llcht.c index 1ea8767..6a0487e 100644 --- a/include/tt_llcht.c +++ b/include/tt_llcht.c @@ -21,77 +21,44 @@ // Variables // =================================================================== -static tt_entry_t *table[TT_LLCHT_SIZE+1]; - -// =================================================================== -// Helper declarations -// =================================================================== - -tt_entry_t * new_ll_node(const uint64_t key, const enum TT_FLAG flag, - const uint8_t depth, const float value, - const action_t action); - +static hashtable_t table; // =================================================================== // Exported functions // =================================================================== -int tt_init(void) { - for (uint32_t k=0; k<=TT_LLCHT_SIZE; k++) - table[k] = NULL; +inline int +tt_init(void) { + table.num_entries = 0; return EXIT_SUCCESS; } -void tt_free(void) { - tt_entry_t *n, *nn; - for (uint32_t k=0; k<=TT_LLCHT_SIZE; k++) { - n = table[k]; - while (n) { - nn = n->next; - free(n); - n = nn; - } - } +inline void +tt_free(void) { + ht_free(free, &table); } +inline tt_entry_t *tt_seek(const uint64_t key) { - tt_entry_t *lookup = table[key & TT_LLCHT_SIZE]; - while (lookup && lookup->key != key) - lookup = lookup->next; - return lookup; -} - -int tt_insert(const uint64_t key, const enum TT_FLAG flag, - const uint8_t depth, const float value, - const action_t action) { - tt_entry_t *new = new_ll_node(key, flag, depth, value, action), *n; - // TODO: trap - - const uint32_t idx = key & TT_LLCHT_SIZE; - if ((n = table[idx]) != NULL) { - for (; n->next != NULL; n = n->next); - n->next = new; + ht_entry_t *entry = ht_seek(key, &table); + if (entry) { + return entry->data; } else { - table[idx] = new; + return NULL; } - - return EXIT_SUCCESS; } -// =================================================================== -// Helper function implementations -// =================================================================== - -tt_entry_t * new_ll_node(const uint64_t key, const enum TT_FLAG flag, - const uint8_t depth, const float value, - const action_t action) { - tt_entry_t *new = malloc(sizeof(struct tt_node_s)); +inline int +tt_insert(const uint64_t key, const enum TT_FLAG flag, + const uint8_t depth, const float value, + const action_t action) { + tt_entry_t *new = malloc(sizeof(struct tt_entry_s)); // TODO: trap errno new->key = key; - new->next = NULL; new->flag = flag; new->depth = depth; new->value = value; new->action = action; - return new; + + return ht_insert(key, new, &table); } |
