summaryrefslogtreecommitdiff
path: root/src/dged/hash.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/dged/hash.c')
-rw-r--r--src/dged/hash.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/dged/hash.c b/src/dged/hash.c
new file mode 100644
index 0000000..fce61af
--- /dev/null
+++ b/src/dged/hash.c
@@ -0,0 +1,20 @@
+#include "hash.h"
+
+uint32_t hash_name(const char *s) {
+ unsigned long hash = 5381;
+ int c;
+
+ while ((c = *s++))
+ hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
+
+ return hash;
+}
+
+uint32_t hash_name_s8(struct s8 s) {
+ unsigned long hash = 5381;
+
+ for (uint64_t i = 0; i < s.l; ++i)
+ hash = ((hash << 5) + hash) + s.s[i]; /* hash * 33 + c */
+
+ return hash;
+}