/* This file is part of ct. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Takwrap. If not, see . */ #ifndef HASHTABLE_H #define HASHTABLE_H #include #include // =================================================================== // Types // =================================================================== #define HASHTABLE_SIZE ((uint32_t)((1<<19) - 1)) typedef struct ht_node_s { struct ht_node_s *next; uint64_t key; void* data; } ht_entry_t; typedef struct hashtable_s { ht_entry_t *entries[HASHTABLE_SIZE+1]; uint64_t num_entries; } hashtable_t; // =================================================================== // Methods // =================================================================== hashtable_t* ht_init(void); void ht_free(void data_free(void *), hashtable_t *table); ht_entry_t *ht_seek(const uint64_t key, hashtable_t *table); int ht_insert(const uint64_t key, void* data, hashtable_t *table); #endif