diff options
Diffstat (limited to 'src/libsok/sok-ctx-hash.c')
-rw-r--r-- | src/libsok/sok-ctx-hash.c | 41 |
1 files changed, 0 insertions, 41 deletions
diff --git a/src/libsok/sok-ctx-hash.c b/src/libsok/sok-ctx-hash.c deleted file mode 100644 index 61689ea..0000000 --- a/src/libsok/sok-ctx-hash.c +++ /dev/null @@ -1,41 +0,0 @@ -#include <stdint.h> // uint16_t -#include "sok.h" - -// fnv64 -// src: https://en.wikipedia.org/wiki/Fowler–Noll–Vo_hash_function -#define FNV_OFFSET 1099511628211 -#define FNV_PRIME 0xcbf29ce484222325 - -static uint64_t -fnv1a( - const uint8_t * const buf, - const size_t len -) { - uint64_t hash = FNV_OFFSET; - - for (size_t i = 0; i < len; i++) { - hash ^= buf[i]; - hash *= FNV_PRIME; - } - - return hash; -} - -uint64_t -sok_ctx_hash( - const sok_ctx_t * const ctx -) { - uint16_t buf[512] = {ctx->home.x, ctx->home.y, 0}; - const size_t BUF_MASK = (sizeof(buf) / sizeof(uint16_t) - 1); - - for (size_t i = 0; i < ctx->level.num_boxes; i++) { - buf[(2 * (i + 1) + 0) & BUF_MASK] = ctx->boxes[i].x; - buf[(2 * (i + 1) + 1) & BUF_MASK] = ctx->boxes[i].y; - } - - // calculate buffer length - const size_t used = 2 * (ctx->level.num_boxes + 1) * sizeof(uint16_t); - const size_t len = (used < sizeof(buf)) ? used : sizeof(buf); - - return fnv1a((uint8_t*) buf, len); -} |