libdatatypes 0.3.2
Abstract datatypes for C.
Loading...
Searching...
No Matches
hashtable.h
Go to the documentation of this file.
1/***************************************************************************
2 begin........: May 2012
3 copyright....: Sebastian Fedrau
4 email........: sebastian.fedrau@gmail.com
5 ***************************************************************************/
6
7/***************************************************************************
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License v3 as published by
10 the Free Software Foundation.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 General Public License v3 for more details.
16 ***************************************************************************/
22#ifndef HASHTABLE_H
23#define HASHTABLE_H
24
25#include <stddef.h>
26#include <stdbool.h>
27
28#include "datatypes.h"
29#include "pool.h"
30
32#define HASHTABLE_AUTO_RESIZE 0
33
38typedef struct _HashTable
39{
49 size_t size;
51 const size_t *sizeptr;
53 bool grow;
61 struct _Bucket
62 {
64 void *key;
66 void *data;
68 struct _Bucket *next;
69 } **buckets;
71 size_t count;
88} HashTable;
89
91typedef struct _HashTablePair HashTablePair;
92
97typedef struct
98{
102 size_t offset;
104 struct _Bucket *liter;
108
122
133HashTable *hashtable_new(size_t size, HashFunc hash_func, EqualFunc compare_keys, FreeFunc free_key, FreeFunc free_value);
134
145void hashtable_init(HashTable *table, size_t size, HashFunc hash_func, EqualFunc compare_keys, FreeFunc free_key, FreeFunc free_value);
146
152void hashtable_destroy(HashTable *table);
153
159void hashtable_free(HashTable *table);
160
166void hashtable_clear(HashTable *table);
167
178HashTableInsertResult hashtable_set(HashTable *table, void *key, void *value, bool overwrite_key);
179
186void hashtable_remove(HashTable *table, const void *key);
187
195HashTablePair *hashtable_lookup(HashTable *table, const void *key);
196
203void *hashtable_pair_get_key(const HashTablePair *pair);
204
206#define hashtable_pair_key(p) p->bucket->key
207
214void *hashtable_pair_get_value(const HashTablePair *pair);
215
217#define hashtable_pair_value(p) p->bucket->data
218
225void hashtable_pair_set_value(HashTablePair *pair, void *value);
226
234bool hashtable_key_exists(const HashTable *table, const void *key);
235
242size_t hashtable_count(const HashTable *table);
243
251void hashtable_iter_init(const HashTable *table, HashTableIter *iter);
252
260
267void *hashtable_iter_get_key(const HashTableIter *iter);
268
270#define hashtable_iter_key(iter) iter.liter->key
271
278void *hashtable_iter_get_value(const HashTableIter *iter);
279
281#define hashtable_iter_value(iter) iter.liter->data
282
283#endif
284
bool(* EqualFunc)(const void *a, const void *b)
Definition compare.h:33
General declarations.
void(* FreeFunc)(void *p)
Definition datatypes.h:33
uint32_t(* HashFunc)(const void *ptr)
Definition hash.h:28
void hashtable_clear(HashTable *table)
Definition hashtable.c:218
void * hashtable_pair_get_key(const HashTablePair *pair)
Definition hashtable.c:435
void * hashtable_pair_get_value(const HashTablePair *pair)
Definition hashtable.c:445
void hashtable_iter_init(const HashTable *table, HashTableIter *iter)
Definition hashtable.c:489
HashFunc hash
Definition hashtable.h:47
const HashTable * table
Definition hashtable.h:100
void * hashtable_iter_get_value(const HashTableIter *iter)
Definition hashtable.c:545
FreeFunc free_key
Definition hashtable.h:43
FreeFunc free_value
Definition hashtable.h:45
size_t hashtable_count(const HashTable *table)
Definition hashtable.c:481
struct _Bucket * next
Definition hashtable.h:68
void * hashtable_iter_get_key(const HashTableIter *iter)
Definition hashtable.c:537
bool grow
Definition hashtable.h:53
HashTable * hashtable_new(size_t size, HashFunc hash_func, EqualFunc compare_keys, FreeFunc free_key, FreeFunc free_value)
Definition hashtable.c:100
size_t size
Definition hashtable.h:49
bool hashtable_key_exists(const HashTable *table, const void *key)
Definition hashtable.c:470
size_t count
Definition hashtable.h:71
void hashtable_remove(HashTable *table, const void *key)
Definition hashtable.c:367
void hashtable_pair_set_value(HashTablePair *pair, void *value)
Definition hashtable.c:455
bool hashtable_iter_next(HashTableIter *iter)
Definition hashtable.c:513
void hashtable_init(HashTable *table, size_t size, HashFunc hash_func, EqualFunc compare_keys, FreeFunc free_key, FreeFunc free_value)
Definition hashtable.c:120
void hashtable_free(HashTable *table)
Definition hashtable.c:208
struct _Bucket * bucket
Definition hashtable.h:86
HashTableInsertResult
result of hashtable_set() method.
Definition hashtable.h:114
@ HASHTABLE_INSERT_RESULT_NEW
Definition hashtable.h:116
@ HASHTABLE_INSERT_RESULT_REPLACED
Definition hashtable.h:118
@ HASHTABLE_INSERT_RESULT_FAILED
Definition hashtable.h:120
struct _HashTablePair HashTablePair
Definition hashtable.h:91
void hashtable_destroy(HashTable *table)
Definition hashtable.c:167
EqualFunc compare_keys
Definition hashtable.h:41
size_t offset
Definition hashtable.h:102
HashTableInsertResult hashtable_set(HashTable *table, void *key, void *value, bool overwrite_key)
Definition hashtable.c:308
HashTablePair * hashtable_lookup(HashTable *table, const void *key)
Definition hashtable.c:416
struct _Bucket * liter
Definition hashtable.h:104
Pool * pool
Definition hashtable.h:73
const size_t * sizeptr
Definition hashtable.h:51
Table containing lists of buckets to create associations between keys and values.
Definition hashtable.h:39
Structure to iterate over the elements of a HashTable.
Definition hashtable.h:98
Singly-linked list implementation storing keys & values.
Definition hashtable.h:62
Found key-value pair.
Definition hashtable.h:82
Allocate memory blocks of same sizes.
Allocate groups of equal-sized chunks of memory.
Definition pool.h:33