G

G Programming Language
git clone http://git.omkov.net/G
Log | Tree | Refs | README | Download

AuthorJakob Wakeling <[email protected]>
Date2021-09-04 02:55:32
Commit382d4166479634b66a754f1050d20edd66e4b553
Parent06acb15b8d6653109bf4c867e2bf63b12669dc5f

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>