diff options
Diffstat (limited to 'include/cnn1986_cache.c')
| -rw-r--r-- | include/cnn1986_cache.c | 77 |
1 files changed, 0 insertions, 77 deletions
diff --git a/include/cnn1986_cache.c b/include/cnn1986_cache.c deleted file mode 100644 index 303ef57..0000000 --- a/include/cnn1986_cache.c +++ /dev/null @@ -1,77 +0,0 @@ -#include "cnn1986_cache.h" - -#define DATA_STONE_SHIFT 6 -#define DATA_COUNT_SHIFT (DATA_STONE_SHIFT+2) -#define COLOUR_MASK 0x3F // 0b00111111 - -uint32_t cnn1986_num_cached, cnn1986_max_num_cached = 1000000; -node_t *head = NULL, *tail = NULL; - -int cnn1986_cache_init(void) { return EXIT_SUCCESS; } - -void cnn1986_cache_free(void) { - node_t *c = head, *n; - while (c) { - n = c->next; - free(c); - c = n; - } - head = NULL; - tail = NULL; -} - -int cnn1986_cache_seek(const uint64_t key[4], - float *out_result) { - node_t *c = head; - while (c != NULL) { - // Either seek next or move to front and return - uint8_t fail = 0; - for (int k=0; k<4; k++) { - if (c->key[k] != key[k]) { - fail = 1; break; - } - } - - if (fail == 1) { - c = c->next; - } else { - *out_result = c->result; - // Move to front - if (c != head) { - if (tail == c) tail=c->prev; - if (c->next) c->next->prev = c->prev; - c->prev->next = c->next; - c->prev = NULL; - c->next = head; - head->prev = c; - head = c; - } - return EXIT_SUCCESS; - } - } - // Failed to find it - return EXIT_FAILURE; -} - -int cnn1986_cache_insert(const uint64_t key[4], float in_result) { - node_t *new = malloc(sizeof(node_t)); - if (new == NULL) return EXIT_FAILURE; - // TODO: check errno - new->prev = NULL; - new->next = head; - if (head) head->prev = new; - head = new; - for (int k=0; k<4; k++) new->key[k] = key[k]; - new->result = in_result; - if (cnn1986_num_cached == 0) tail = new; - cnn1986_num_cached++; - - if (cnn1986_num_cached > cnn1986_max_num_cached) { - tail = tail->prev; - free(tail->next); - tail->next = NULL; - cnn1986_num_cached--; - } - - return EXIT_SUCCESS; -} |
