cctools
hash_table.h
Go to the documentation of this file.
1 /*
2 Copyright (C) 2003-2004 Douglas Thain and the University of Wisconsin
3 Copyright (C) 2022 The University of Notre Dame
4 This software is distributed under the GNU General Public License.
5 See the file COPYING for details.
6 */
7 
8 #ifndef HASH_TABLE_H
9 #define HASH_TABLE_H
10 
41 typedef unsigned (*hash_func_t) (const char *key);
42 
49 struct hash_table *hash_table_create(int buckets, hash_func_t func);
50 
56 void hash_table_clear(struct hash_table *h, void (*delete_func)( void *) );
57 
58 
64 void hash_table_delete(struct hash_table *h);
65 
71 int hash_table_size(struct hash_table *h);
72 
83 int hash_table_insert(struct hash_table *h, const char *key, const void *value);
84 
91 void *hash_table_lookup(struct hash_table *h, const char *key);
92 
99 void *hash_table_remove(struct hash_table *h, const char *key);
100 
108 void hash_table_firstkey(struct hash_table *h);
109 
118 int hash_table_nextkey(struct hash_table *h, char **key, void **value);
119 
128 void hash_table_randomkey(struct hash_table *h, int *offset_bookkeep);
129 
139 int hash_table_nextkey_with_offset(struct hash_table *h, int offset_bookkeep, char **key, void **value);
140 
150 int hash_table_fromkey(struct hash_table *h, const char *key);
151 
157 unsigned hash_string(const char *s);
158 
173 #define HASH_TABLE_ITERATE( table, key, value ) hash_table_firstkey(table); while(hash_table_nextkey(table,&key,(void**)&value))
174 
175 #define HASH_TABLE_ITERATE_RANDOM_START( table, offset_bookkeep, key, value ) hash_table_randomkey(table, &offset_bookkeep); while(hash_table_nextkey_with_offset(table, offset_bookkeep, &key, (void **)&value))
176 
177 #define HASH_TABLE_ITERATE_FROM_KEY( table, iter_control, iter_count_var, key_start, key, value ) \
178  iter_control = 0; \
179  iter_count_var = 0; \
180  hash_table_fromkey(table, key_start); \
181  while(iter_count_var < hash_table_size(table) && (iter_count_var+=1 && (hash_table_nextkey(table, &key, (void **)&value) || (!iter_control && (iter_control+=1) && hash_table_fromkey(table, NULL) && hash_table_nextkey(table, &key, (void **)&value)))))
182 
183 #endif
hash_table_remove
void * hash_table_remove(struct hash_table *h, const char *key)
Remove a value by key.
hash_table_nextkey_with_offset
int hash_table_nextkey_with_offset(struct hash_table *h, int offset_bookkeep, char **key, void **value)
Continue iteration over all keys from an arbitray offset.
hash_table_nextkey
int hash_table_nextkey(struct hash_table *h, char **key, void **value)
Continue iteration over all keys.
hash_func_t
unsigned(* hash_func_t)(const char *key)
The type signature for a hash function given to hash_table_create.
Definition: hash_table.h:41
hash_table_size
int hash_table_size(struct hash_table *h)
Count the entries in a hash table.
hash_table_lookup
void * hash_table_lookup(struct hash_table *h, const char *key)
Look up a value by key.
hash_table_delete
void hash_table_delete(struct hash_table *h)
Delete a hash table.
hash_table_randomkey
void hash_table_randomkey(struct hash_table *h, int *offset_bookkeep)
Begin iteration over all keys from a random offset.
hash_table_clear
void hash_table_clear(struct hash_table *h, void(*delete_func)(void *))
Remove all entries from an hash table.
hash_string
unsigned hash_string(const char *s)
A default hash function.
hash_table_firstkey
void hash_table_firstkey(struct hash_table *h)
Begin iteration over all keys.
hash_table_fromkey
int hash_table_fromkey(struct hash_table *h, const char *key)
Begin iteration at the given key.
hash_table_create
struct hash_table * hash_table_create(int buckets, hash_func_t func)
Create a new hash table.
hash_table_insert
int hash_table_insert(struct hash_table *h, const char *key, const void *value)
Insert a key and value.