aboutsummaryrefslogtreecommitdiff
path: root/include/tt_llcht.c
diff options
context:
space:
mode:
Diffstat (limited to 'include/tt_llcht.c')
-rw-r--r--include/tt_llcht.c71
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);
}