commit 165c16127dbb1a25de99062b0c36d981804c6ab2
parent c9418c101c9c55c40b45e135a4e387b56195415a
Author: Remy Noulin <loader2x@gmail.com>
Date: Fri, 9 Nov 2018 17:01:39 -0500
add fnv 1a 64 bit hash
hashfunctions.c | 11 +++++++++++
hashfunctions.h | 1 +
main.c | 3 +++
package.yml | 2 +-
4 files changed, 16 insertions(+), 1 deletion(-)
Diffstat:
4 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/hashfunctions.c b/hashfunctions.c
@@ -14,6 +14,17 @@ u32 strHashFNV1A(char *k) {
}
/**
+ * FNV 1-a string 64 bit hash.
+ */
+u64 strHashFNV1A64(char *k) {
+ u64 hash = 14695981039346656073ULL;
+ for (const u8* ptr = (const u8*)k; *ptr; ptr++) {
+ hash = (hash ^ *ptr) * 1099511628211ULL;
+ }
+ return hash;
+}
+
+/**
* Integer reversible hash function for 32 bits.
* Implementation of the Robert Jenkins "4-byte Integer Hashing",
* from http://burtleburtle.net/bob/hash/integer.html
diff --git a/hashfunctions.h b/hashfunctions.h
@@ -5,6 +5,7 @@
#include "md5.h"
u32 strHashFNV1A(char *k);
+u64 strHashFNV1A64(char *k);
u32 u32Hash(u32 k);
u64 u64Hash(u64 k);
diff --git a/main.c b/main.c
@@ -30,6 +30,9 @@ int main(int ARGC, char** ARGV) {
// 32bit string hash
logVarG(strHashFNV1A("the key"));
+ // 64bit string hash
+ logVarG(strHashFNV1A64("the key"));
+
// siphash
logVarG(siphash("the key",strlen("the key"),hash_function_seed));
diff --git a/package.yml b/package.yml
@@ -1,6 +1,6 @@
---
name: hashfunctions
- version: 0.0.4
+ version: 0.0.5
description: "generic hash functions and PRFs: Jenkins, FNV, siphash, murmur2, murmur3, md5"
bin: ./hashfunctions.c
cflags: -O3 -std=gnu11 -fPIC -pipe