5 * Generic implementation of hash-based key-value mappings.
6 * See Documentation/technical/api-hashmap.txt.
11 extern unsigned int strhash(const char *buf
);
12 extern unsigned int strihash(const char *buf
);
13 extern unsigned int memhash(const void *buf
, size_t len
);
14 extern unsigned int memihash(const void *buf
, size_t len
);
16 static inline unsigned int sha1hash(const unsigned char *sha1
)
19 * Equivalent to 'return *(unsigned int *)sha1;', but safe on
20 * platforms that don't support unaligned reads.
23 memcpy(&hash
, sha1
, sizeof(hash
));
29 struct hashmap_entry
{
30 struct hashmap_entry
*next
;
34 typedef int (*hashmap_cmp_fn
)(const void *entry
, const void *entry_or_key
,
38 struct hashmap_entry
**table
;
40 unsigned int size
, tablesize
, grow_at
, shrink_at
;
45 struct hashmap_entry
*next
;
46 unsigned int tablepos
;
49 /* hashmap functions */
51 extern void hashmap_init(struct hashmap
*map
, hashmap_cmp_fn equals_function
,
53 extern void hashmap_free(struct hashmap
*map
, int free_entries
);
55 /* hashmap_entry functions */
57 static inline void hashmap_entry_init(void *entry
, unsigned int hash
)
59 struct hashmap_entry
*e
= entry
;
63 extern void *hashmap_get(const struct hashmap
*map
, const void *key
,
65 extern void *hashmap_get_next(const struct hashmap
*map
, const void *entry
);
66 extern void hashmap_add(struct hashmap
*map
, void *entry
);
67 extern void *hashmap_put(struct hashmap
*map
, void *entry
);
68 extern void *hashmap_remove(struct hashmap
*map
, const void *key
,
71 /* hashmap_iter functions */
73 extern void hashmap_iter_init(struct hashmap
*map
, struct hashmap_iter
*iter
);
74 extern void *hashmap_iter_next(struct hashmap_iter
*iter
);
75 static inline void *hashmap_iter_first(struct hashmap
*map
,
76 struct hashmap_iter
*iter
)
78 hashmap_iter_init(map
, iter
);
79 return hashmap_iter_next(iter
);