#include #include "hashtable.h" const unsigned int fnvPrime = 16777619; const unsigned int fnvOffset = 2166136261U; //FNV-1a hash unsigned int get_hash(char* str) { unsigned int hash = fnvOffset; while (*str != '\0') { hash = (hash ^ *str) * fnvPrime; str++; } return hash; } hashtable_t* init_hashtable(unsigned int capacity) { hashtable_t* ht = malloc(sizeof(hashtable_t)); ht->pairs = calloc(capacity, sizeof(pair_t*)); ht->capacity = capacity; return ht; } /* TODO: handle collision TODO: return 0 if something goes wrong */ unsigned int hashtable_add_pair(hashtable_t* hashtable, pair_t pair) { unsigned int hash = get_hash(pair.key); pair_t* memPair = malloc(sizeof(pair_t)); *memPair = pair; hashtable->pairs[hash % hashtable->capacity] = memPair; return hash; } pair_t* hashtable_get_pair(hashtable_t* hashtable, char* key) { unsigned int hash = get_hash(key); return hashtable->pairs[hash % hashtable->capacity]; }