#include "hash.h" void hash_table_insert(hash_table_t* hash_table, char* string, size_t length) { if(length == 0) length = strlen(string); //printf("String %s (len: %d)\n", string, length); uint32_t hashstr = hash_table->hash(hash_table, string, length); node_t* node = hash_table->node_get(hash_table, hashstr); if(node == NULL) node = hash_table->node_create(hash_table, hashstr); node->insert(node, string); } node_t* hash_table_node_get(hash_table_t* hash_table, uint32_t index) { return hash_table->nodes[index]; } node_t* hash_table_node_create(hash_table_t* hash_table, uint32_t index) { node_t* tree = tree_create(); hash_table->nodes[index] = tree; //printf("Node by id %d created\n", index); return tree; } uint8_t hash_table_exists(hash_table_t* hash_table, char* string, size_t length) { if(length == 0) length = strlen(string); //printf("String %s (len: %d)\n", string, length); uint32_t hashstr = hash_table->hash(hash_table, string, length); //printf("Node by id %d, finding...\n", hashstr); node_t* node = hash_table->node_get(hash_table, hashstr); return node != NULL && node->exists(node, string); } uint32_t hash_table_hash(hash_table_t* hash_table, char* string, size_t length) { if(length == 0) length = strlen(string); return string[0] + string[length-1]; } hash_table_t* hash_table_create(uint32_t nodes_length) { hash_table_t* hash_table = (hash_table_t*)malloc(sizeof(hash_table_t)); node_t** nodes = (node_t**)calloc(nodes_length,sizeof(node_t*)); hash_table->nodes = nodes; hash_table->insert = hash_table_insert; hash_table->exists = hash_table_exists; hash_table->hash = hash_table_hash; hash_table->node_get = hash_table_node_get; hash_table->node_create = hash_table_node_create; return hash_table; }