/* This file is part of ct. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with ct. If not, see . */ #include "tt_llcht.h" // =================================================================== // 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 best); // =================================================================== // Exported functions // =================================================================== int tt_init(void) { for (uint32_t k=0; k<=TT_LLCHT_SIZE; k++) table[k] = NULL; 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; } } } 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 best) { tt_entry_t *n, *new = new_ll_node(key, flag, depth, value, best); // 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; } else { table[idx] = new; } 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 best) { tt_entry_t *new = malloc(sizeof(struct tt_node_s)); // TODO: trap errno new->key = key; new->best = best; new->next = NULL; new->flag = flag; new->depth = depth; new->value = value; return new; }