Author | Jakob Wakeling <[email protected]> |
Date | 2021-09-04 02:55:32 |
Commit | 382d4166479634b66a754f1050d20edd66e4b553 |
Parent | 06acb15b8d6653109bf4c867e2bf63b12669dc5f |
meta: Add cll/fnv
Diffstat
M | CMakeLists.txt | | | 2 | +- |
A | src/cll/fnv.c | | | 38 | ++++++++++++++++++++++++++++++++++++++ |
A | src/cll/fnv.h | | | 23 | +++++++++++++++++++++++ |
M | src/compile.c | | | 2 | +- |
M | src/lexer.c | | | 2 | +- |
R | src/lib/error.c -> src/cll/error.c | | | 0 | |
R | src/lib/error.h -> src/cll/error.h | | | 0 | |
R | src/lib/optget.c -> src/cll/optget.c | | | 0 | |
R | src/lib/optget.h -> src/cll/optget.h | | | 0 | |
M | src/main.c | | | 2 | ++ |
M | src/parser.c | | | 1 | + |
11 files changed, 67 insertions, 3 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 3484dba..5fce0cf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,4 +6,4 @@ ADD_COMPILE_DEFINITIONS(PROJECT_VERSION="${PROJECT_VERSION}") FILE(GLOB SRC ${PROJECT_SOURCE_DIR}/src/*.c ${PROJECT_SOURCE_DIR}/src/**/*.c) -ADD_EXECUTABLE(g ${SRC} ${LIB}) +ADD_EXECUTABLE(g ${SRC}) diff --git a/src/lib/error.c b/src/cll/error.c similarity index 100% rename from src/lib/error.c rename to src/cll/error.c diff --git a/src/lib/error.h b/src/cll/error.h similarity index 100% rename from src/lib/error.h rename to src/cll/error.h diff --git a/src/cll/fnv.c b/src/cll/fnv.c new file mode 100644 index 0000000..f2eb831 --- /dev/null +++ b/src/cll/fnv.c @@ -0,0 +1,38 @@ +// fnv.c +// FNV hash source file for libcll +// Copyright (C) 2021, Jakob Wakeling +// All rights reserved. + + + +#include "fnv.h" + +#include <stddef.h> +#include <stdint.h> + +static const uint32_t FNV_PRIME_32 = 0x01000193; +static const uint32_t FNV_BASIS_32 = 0x811C9DC5; +static const uint64_t FNV_PRIME_64 = 0x00000100000001B3; +static const uint64_t FNV_BASIS_64 = 0xCBF29CE484222325; + +/* Compute the FNV1a-32 hash of some data. */ +uint32_t fnv1a32(uint8_t *dat, size_t len) { + register uint32_t fnv = FNV_BASIS_32; + for (; len; --len, ++dat) { fnv ^= *dat; fnv *= FNV_PRIME_32; } return fnv; +} + +/* Compute the FNV1a-64 hash of some data. */ +uint64_t fnv1a64(uint8_t *dat, size_t len) { + register uint64_t fnv = FNV_BASIS_64; + for (; len; --len, ++dat) { fnv ^= *dat; fnv *= FNV_PRIME_64; } return fnv; +} + +void fnv1a32_init(uint32_t *ctx) { *ctx = FNV_BASIS_32; } +void fnv1a32_hash(uint32_t *ctx, uint8_t *dat, size_t len) { + for (; len; --len, ++dat) { *ctx ^= *dat; *ctx *= FNV_PRIME_32; } +} + +void fnv1a64_init(uint64_t *ctx) { *ctx = FNV_BASIS_64; } +void fnv1a64_hash(uint64_t *ctx, uint8_t *dat, size_t len) { + for (; len; --len, ++dat) { *ctx ^= *dat; *ctx *= FNV_PRIME_64; } +} diff --git a/src/cll/fnv.h b/src/cll/fnv.h new file mode 100644 index 0000000..b087071 --- /dev/null +++ b/src/cll/fnv.h @@ -0,0 +1,23 @@ +// fnv.h +// FNV hash header file for libcll +// Copyright (C) 2021, Jakob Wakeling +// All rights reserved. + + + +#ifndef OMKOV_LIBCLL_FNV_H_O4TYU6Q1 +#define OMKOV_LIBCLL_FNV_H_O4TYU6Q1 + +#include <stddef.h> +#include <stdint.h> + +extern uint32_t fnv1a32(uint8_t *dat, size_t len); +extern uint64_t fnv1a64(uint8_t *dat, size_t len); + +extern void fnv1a32_init(uint32_t *ctx); +extern void fnv1a32_hash(uint32_t *ctx, uint8_t *dat, size_t len); + +extern void fnv1a64_init(uint64_t *ctx); +extern void fnv1a64_hash(uint64_t *ctx, uint8_t *dat, size_t len); + +#endif // OMKOV_LIBCLL_FNV_H_O4TYU6Q1 diff --git a/src/lib/optget.c b/src/cll/optget.c similarity index 100% rename from src/lib/optget.c rename to src/cll/optget.c diff --git a/src/lib/optget.h b/src/cll/optget.h similarity index 100% rename from src/lib/optget.h rename to src/cll/optget.h diff --git a/src/compile.c b/src/compile.c index 4126d2f..f4dd99d 100644 --- a/src/compile.c +++ b/src/compile.c @@ -11,7 +11,7 @@ #include "parser.h" #include "util/ast.h" -#include "lib/error.h" +#include "cll/error.h" #include <stdio.h> #include <stdlib.h> diff --git a/src/lexer.c b/src/lexer.c index 09b62cc..2fa1bbf 100644 --- a/src/lexer.c +++ b/src/lexer.c @@ -9,7 +9,7 @@ #include "map.h" #include "type.h" -#include "lib/error.h" +#include "cll/error.h" #include <ctype.h> #include <stddef.h> diff --git a/src/main.c b/src/main.c index 501f641..75d19a6 100644 --- a/src/main.c +++ b/src/main.c @@ -8,8 +8,8 @@ #include "compile.h" #include "misc.h" -#include "lib/error.h" -#include "lib/optget.h" +#include "cll/error.h" +#include "cll/optget.h" #include <stdbool.h> #include <stddef.h> diff --git a/src/parser.c b/src/parser.c index e08d5f9..fd850a9 100644 --- a/src/parser.c +++ b/src/parser.c @@ -12,7 +12,7 @@ #include "util/stack.h" #include "value.h" -#include "lib/error.h" +#include "cll/error.h" #include <stdio.h> #include <stdlib.h>