diff --git a/bfilter.c b/bfilter.c index 7a01dce..4cafd5f 100644 --- a/bfilter.c +++ b/bfilter.c @@ -88,14 +88,23 @@ unsetbit(bit_array_t* arr, int k) { return 0; } -uint64_t -get_index(int size, const char* value) { +bfilter_hashes_t +hash(const char* value) { uint64_t hval; + bfilter_hashes_t hashes; + fnv64Init(&hval); fnv64UpdateBuffer(&hval, value, strlen(value)); - return hval % size; + + uint32_t n_0 = hval >> 32; + uint32_t n_1 = hval & 0x00000000ffffffff; + + hashes.hash_1 = n_0; + hashes.hash_2 = n_1; + + return hashes; } int @@ -107,8 +116,9 @@ main (void) { setbit(test, 127); print_barray(test); - const char *test_string = "what is this I can't even, lololol"; - printf("%zu\n", get_index(5*32, test_string)); + const char *test_string = "what blah is this I can't even, lololol"; + printf("%zu\n", hash(test_string).hash_1); + printf("%zu\n", hash(test_string).hash_2); return EXIT_SUCCESS; } diff --git a/bfilter.h b/bfilter.h index 2efd1c0..1266d63 100644 --- a/bfilter.h +++ b/bfilter.h @@ -6,13 +6,20 @@ typedef } bit_array_t; +typedef + struct { + uint32_t hash_1; + uint32_t hash_2; + } + bfilter_hashes_t; + int printbits(uint32_t, size_t); int print_barray(bit_array_t*); bit_array_t* new_bitarray(int); -uint64_t get_index(int, const char*); +bfilter_hashes_t hash(const char*); int setbit(bit_array_t*, int); int unsetbit(bit_array_t*, int);