#ifndef HASHING_ALGORITHMS_H #define HASHING_ALGORITHMS_H #include "hashed_string.hpp" #include // p is prime. p > m > 1, p > a > 0, p > b >= 0 uint64_t multiply_mod_prime(uint64_t x, uint64_t a, uint64_t b, uint64_t p, uint64_t m); // p is a Mersenne prime. p > m > 1, p > a > 0, p > b >= 0 uint64_t multiply_mod_prime_mersenne(uint64_t x, uint64_t a, uint64_t b, uint64_t p, uint64_t m); // p is a Mersenne prime. m=2^q. p > m > 1, p > a > 0, p > b >= 0 uint64_t multiply_mod_prime_mersenne_overflow(uint64_t x, uint64_t a, uint64_t b, uint64_t p, char q); // p is a Mersenne prime. m=2^q. p > m > 1, p > a > 0 uint64_t multiply_mod_prime_mersenne_overflow_no_b(uint64_t x, uint64_t a, uint64_t p, char q); // p=2^89-1 is a Mersenne prime. m=2^l. 32 >= l > 0. p > a > 0, p > b >= 0. x is an 64 bit integer. We assume x, a, and b are arrays of 32 bit integers. uint32_t multiply_mod_prime_mersenne_overflow_high_bitcount(uint32_t * x, uint32_t * a, uint32_t * b, char l); uint64_t multiply_shift_c_universal(uint32_t x, uint64_t a, char l); uint64_t multiply_shift_strongly_universal(uint32_t x, uint64_t a, uint64_t b, char l); uint64_t multiply_shift_vector(uint32_t * x, uint64_t * seed, size_t d, char l); // requires x to be of size D and the seed to be of size D uint64_t multiply_shift_string(const My_string * string, const uint64_t * seed, uint64_t * x, size_t l); // p=2^89-1 is a Mersenne prime. // p > a >= 0. p > b >= 0. p > c >= 0. x is a size 2d list of 64 bit integers split into 32 bit integers. // We assume a, b, and c are size 3 arrays of 32 bit integers. uint32_t polynomial_vector(uint32_t * x, uint32_t * a, uint32_t * b, uint32_t * c, size_t d, char l); // p=2^89-1 is a Mersenne prime. // p > a >= 0. p > b >= 0. p > c >= 0. x is a size 2d list of 64 bit integers split into 32 bit integers. // We assume a, b, and c are size 3 arrays of 32 bit integers. // we assume the seed to be of size 4 (at minimum). uint32_t polynomial_vector_tuned(uint32_t * x, uint32_t * a, uint32_t * b, uint32_t * c, size_t d, char l, const uint64_t * seed); #endif