123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- #ifndef _LSUP_HTABLE_H
- #define _LSUP_HTABLE_H
- #include <inttypes.h>
- #include <stdbool.h>
- #include "core.h"
- #ifdef HTABLE_BIG_SIZE
- typedef size_t htsize_t;
- #define HTSIZE_MAX SIZE_MAX
- #else
- typedef uint32_t htsize_t;
- #define HTSIZE_MAX UINT32_MAX
- #endif
- #ifdef HTABLE_BIG_KEY
- typedef uint16_t ksize_t;
- #else
- typedef uint8_t ksize_t;
- #endif
- #ifdef HTABLE_BIG_VAL
- typedef uint16_t vsize_t;
- #else
- typedef uint8_t vsize_t;
- #endif
- typedef enum {
- HTABLE_NOCOPY = 1 << 0,
- HTABLE_IS_SET = 1 << 1,
- } LSUP_HTFlag;
- typedef uint64_t (*key_hash_fn_t)(
- const void *key, ksize_t size, uint64_t seed);
- typedef bool (*key_eq_fn_t)(const void *a, const void *b, ksize_t size);
- typedef struct htable_t LSUP_HTable;
- extern LSUP_HTable *LSUP_htable_new(
- htsize_t size, ksize_t ksize, vsize_t vsize,
- key_hash_fn_t key_hash_fn, key_eq_fn_t key_eq_fn, unsigned flags);
- extern int LSUP_htable_resize(LSUP_HTable *ht, htsize_t newsize);
- extern htsize_t LSUP_htable_capacity(LSUP_HTable *ht);
- extern htsize_t LSUP_htable_size(LSUP_HTable *ht);
- extern int LSUP_htable_insert(LSUP_HTable *ht, const void *key, void *val);
- extern int LSUP_htable_put(LSUP_HTable *ht, const void *key, void *val);
- extern int LSUP_htable_get(
- const LSUP_HTable *ht, const void *key, void **valp);
- extern int LSUP_htable_del(LSUP_HTable *ht, const void *key);
- extern int LSUP_htable_iter(
- LSUP_HTable *ht, htsize_t *cur, void **keyp, void **valp);
- extern void LSUP_htable_done(LSUP_HTable *ht);
- extern void LSUP_htable_free(LSUP_HTable *ht);
- #endif
|