NeoMutt  2025-12-11-911-gd8d604
Teaching an old dog new tricks
DOXYGEN
Loading...
Searching...
No Matches
hash.h
Go to the documentation of this file.
1
22
23#ifndef MUTT_MUTT_HASH_H
24#define MUTT_MUTT_HASH_H
25
26#include <stdbool.h>
27#include <stdint.h>
28#include <stdlib.h>
29#include "array.h"
30
35{
36 const char *strkey;
37 unsigned int intkey;
38};
39
44{
45 int type;
46 union HashKey key;
47 void *data;
48 struct HashElem *next;
49};
50ARRAY_HEAD(HashElemArray, struct HashElem *);
51
63typedef void (*hash_hdata_free_t)(int type, void *obj, intptr_t data);
64
76typedef size_t (*hash_gen_hash_t)(union HashKey key, size_t num_elems);
77
91typedef int (*hash_cmp_key_t)(union HashKey a, union HashKey b);
92
109
120typedef uint8_t HashFlags;
121
122void mutt_hash_delete (struct HashTable *table, const char *strkey, const void *data);
123struct HashElem * mutt_hash_find_bucket (const struct HashTable *table, const char *strkey);
124void * mutt_hash_find (const struct HashTable *table, const char *strkey);
125struct HashElem * mutt_hash_find_elem (const struct HashTable *table, const char *strkey);
126void mutt_hash_free (struct HashTable **ptr);
127struct HashElem * mutt_hash_insert (struct HashTable *table, const char *strkey, void *data);
128void mutt_hash_int_delete (struct HashTable *table, unsigned int intkey, const void *data);
129void * mutt_hash_int_find (const struct HashTable *table, unsigned int intkey);
130struct HashElem * mutt_hash_int_insert (struct HashTable *table, unsigned int intkey, void *data);
131struct HashTable *mutt_hash_int_new (size_t num_elems, HashFlags flags);
132struct HashTable *mutt_hash_new (size_t num_elems, HashFlags flags);
133void mutt_hash_set_destructor(struct HashTable *table, hash_hdata_free_t fn, intptr_t fn_data);
134struct HashElem * mutt_hash_typed_insert (struct HashTable *table, const char *strkey, int type, void *data);
135
140{
141 size_t index;
142 struct HashElem *last;
143};
144
145struct HashElem *mutt_hash_walk(const struct HashTable *table, struct HashWalkState *state);
146
147#endif /* MUTT_MUTT_HASH_H */
Linear Array data structure.
#define ARRAY_HEAD(name, T)
Define a named struct for arrays of elements of a certain type.
Definition array.h:47
HashFlag
Flags for mutt_hash_new(), e.g.
Definition hash.h:114
@ MUTT_HASH_NONE
No flags are set.
Definition hash.h:115
@ MUTT_HASH_ALLOW_DUPS
allow duplicate keys to be inserted
Definition hash.h:118
@ MUTT_HASH_STRCASECMP
use strcasecmp() to compare keys
Definition hash.h:116
@ MUTT_HASH_STRDUP_KEYS
make a copy of the keys
Definition hash.h:117
uint8_t HashFlags
Definition hash.h:120
struct HashElem * mutt_hash_insert(struct HashTable *table, const char *strkey, void *data)
Add a new element to the Hash Table (with string keys)
Definition hash.c:337
void mutt_hash_delete(struct HashTable *table, const char *strkey, const void *data)
Remove an element from a Hash Table.
Definition hash.c:429
void * mutt_hash_find(const struct HashTable *table, const char *strkey)
Find the HashElem data in a Hash Table element using a key.
Definition hash.c:364
int(* hash_cmp_key_t)(union HashKey a, union HashKey b)
Definition hash.h:91
void mutt_hash_int_delete(struct HashTable *table, unsigned int intkey, const void *data)
Remove an element from a Hash Table.
Definition hash.c:446
struct HashElem * mutt_hash_find_bucket(const struct HashTable *table, const char *strkey)
Find the HashElem in a Hash Table element using a key.
Definition hash.c:411
struct HashTable * mutt_hash_int_new(size_t num_elems, HashFlags flags)
Create a new Hash Table (with integer keys)
Definition hash.c:287
struct HashElem * mutt_hash_typed_insert(struct HashTable *table, const char *strkey, int type, void *data)
Insert a string with type info into a Hash Table.
Definition hash.c:319
struct HashElem * mutt_hash_walk(const struct HashTable *table, struct HashWalkState *state)
Iterate through all the HashElem's in a Hash Table.
Definition hash.c:491
struct HashTable * mutt_hash_new(size_t num_elems, HashFlags flags)
Create a new Hash Table (with string keys)
Definition hash.c:261
struct HashElem * mutt_hash_find_elem(const struct HashTable *table, const char *strkey)
Find the HashElem in a Hash Table element using a key.
Definition hash.c:379
void mutt_hash_set_destructor(struct HashTable *table, hash_hdata_free_t fn, intptr_t fn_data)
Set the destructor for a Hash Table.
Definition hash.c:303
size_t(* hash_gen_hash_t)(union HashKey key, size_t num_elems)
Definition hash.h:76
void(* hash_hdata_free_t)(int type, void *obj, intptr_t data)
Definition hash.h:63
void * mutt_hash_int_find(const struct HashTable *table, unsigned int intkey)
Find the HashElem data in a Hash Table element using a key.
Definition hash.c:394
struct HashElem * mutt_hash_int_insert(struct HashTable *table, unsigned int intkey, void *data)
Add a new element to the Hash Table (with integer keys)
Definition hash.c:349
void mutt_hash_free(struct HashTable **ptr)
Free a hash table.
Definition hash.c:459
The item stored in a Hash Table.
Definition hash.h:44
struct HashElem * next
Linked List.
Definition hash.h:48
union HashKey key
Key representing the data.
Definition hash.h:46
int type
Type of data stored in Hash Table, e.g. DT_STRING.
Definition hash.h:45
void * data
User-supplied data.
Definition hash.h:47
A Hash Table.
Definition hash.h:99
hash_gen_hash_t gen_hash
Function to generate hash id from the key.
Definition hash.h:104
struct HashElem ** table
Array of Hash keys.
Definition hash.h:103
hash_cmp_key_t cmp_key
Function to compare two Hash keys.
Definition hash.h:105
bool allow_dups
if set, duplicate keys are allowed
Definition hash.h:102
size_t num_elems
Number of buckets in the Hash Table.
Definition hash.h:100
bool strdup_keys
if set, the key->strkey is strdup()'d
Definition hash.h:101
intptr_t hdata
Data to pass to the hdata_free() function.
Definition hash.h:106
hash_hdata_free_t hdata_free
Function to free a Hash element.
Definition hash.h:107
Cursor to iterate through a Hash Table.
Definition hash.h:140
size_t index
Current position in table.
Definition hash.h:141
struct HashElem * last
Current element in linked list.
Definition hash.h:142
The data item stored in a HashElem.
Definition hash.h:35
const char * strkey
String key.
Definition hash.h:36
unsigned int intkey
Integer key.
Definition hash.h:37