12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- /*
- * libxlsxwriter
- *
- * Copyright 2014-2018, John McNamara, [email protected]. See LICENSE.txt.
- *
- * hash_table - Hash table functions for libxlsxwriter.
- *
- */
- #ifndef __LXW_HASH_TABLE_H__
- #define __LXW_HASH_TABLE_H__
- #include "common.h"
- /* Macro to loop over hash table elements in insertion order. */
- #define LXW_FOREACH_ORDERED(elem, hash_table) \
- STAILQ_FOREACH((elem), (hash_table)->order_list, lxw_hash_order_pointers)
- /* List declarations. */
- STAILQ_HEAD(lxw_hash_order_list, lxw_hash_element);
- SLIST_HEAD(lxw_hash_bucket_list, lxw_hash_element);
- /* LXW_HASH hash table struct. */
- typedef struct lxw_hash_table {
- uint32_t num_buckets;
- uint32_t used_buckets;
- uint32_t unique_count;
- uint8_t free_key;
- uint8_t free_value;
- struct lxw_hash_order_list *order_list;
- struct lxw_hash_bucket_list **buckets;
- } lxw_hash_table;
- /*
- * LXW_HASH table element struct.
- *
- * The hash elements contain pointers to allow them to be stored in
- * lists in the the hash table buckets and also pointers to track the
- * insertion order in a separate list.
- */
- typedef struct lxw_hash_element {
- void *key;
- void *value;
- STAILQ_ENTRY (lxw_hash_element) lxw_hash_order_pointers;
- SLIST_ENTRY (lxw_hash_element) lxw_hash_list_pointers;
- } lxw_hash_element;
- /* *INDENT-OFF* */
- #ifdef __cplusplus
- extern "C" {
- #endif
- /* *INDENT-ON* */
- lxw_hash_element *lxw_hash_key_exists(lxw_hash_table *lxw_hash, void *key,
- size_t key_len);
- lxw_hash_element *lxw_insert_hash_element(lxw_hash_table *lxw_hash, void *key,
- void *value, size_t key_len);
- lxw_hash_table *lxw_hash_new(uint32_t num_buckets, uint8_t free_key,
- uint8_t free_value);
- void lxw_hash_free(lxw_hash_table *lxw_hash);
- /* Declarations required for unit testing. */
- #ifdef TESTING
- #endif
- /* *INDENT-OFF* */
- #ifdef __cplusplus
- }
- #endif
- /* *INDENT-ON* */
- #endif /* __LXW_HASH_TABLE_H__ */
|