litespeed-quic/src/liblsquic/lsquic_hash.h

62 lines
1.5 KiB
C

/* Copyright (c) 2017 - 2022 LiteSpeed Technologies Inc. See LICENSE. */
/*
* lsquic_hash.c -- A generic hash
*/
#ifndef LSQUIC_HASH_H
#define LSQUIC_HASH_H
struct lsquic_hash;
struct lsquic_hash_elem
{
TAILQ_ENTRY(lsquic_hash_elem)
qhe_next_bucket,
qhe_next_all;
const void *qhe_key_data;
void *qhe_value;
unsigned qhe_key_len;
unsigned qhe_hash_val;
enum {
QHE_HASHED = 1 << 0,
} qhe_flags;
};
struct lsquic_hash *
lsquic_hash_create (void);
struct lsquic_hash *
lsquic_hash_create_ext (int (*cmp)(const void *, const void *, size_t),
unsigned (*hash)(const void *, size_t, unsigned seed));
void
lsquic_hash_destroy (struct lsquic_hash *);
struct lsquic_hash_elem *
lsquic_hash_insert (struct lsquic_hash *, const void *key, unsigned key_sz,
void *value, struct lsquic_hash_elem *);
struct lsquic_hash_elem *
lsquic_hash_find (struct lsquic_hash *, const void *key, unsigned key_sz);
#define lsquic_hashelem_getdata(el) ((el)->qhe_value)
void
lsquic_hash_erase (struct lsquic_hash *, struct lsquic_hash_elem *);
void
lsquic_hash_reset_iter (struct lsquic_hash *);
struct lsquic_hash_elem *
lsquic_hash_first (struct lsquic_hash *);
struct lsquic_hash_elem *
lsquic_hash_next (struct lsquic_hash *);
unsigned
lsquic_hash_count (struct lsquic_hash *);
size_t
lsquic_hash_mem_used (const struct lsquic_hash *);
#endif