You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

54 lines
1.1 KiB
C

#ifndef _UTILS_H
#define _UTILS_H
#include <stdint.h>
#include "skynet_malloc.h"
typedef struct hashtbl_node
{
uint64_t key;
void *value;
struct hashtbl_node *next;
} HashTableNode;
typedef struct hashtbl
{
int hash_sz;
int count;
int max_resize_cnt;
int min_resize_cnt;
HashTableNode **nodes;
} HashTable;
typedef struct hashtbl_iter
{
int hash_sz;
int count;
HashTableNode *node;
} HashTableIter;
typedef void (*HashTableIterFunc)(void *ud, uint64_t key, void *value);
HashTable *hashtbl_create();
void hashtbl_destroy(HashTable *tbl);
int hashtbl_has(HashTable *tbl, uint64_t key);
void *hashtbl_get(HashTable *tbl, uint64_t key);
int hashtbl_insert(HashTable *tbl, uint64_t key, void *value);
int hashtbl_upsert(HashTable *tbl, uint64_t key, void *value);
int hashtbl_remove(HashTable *tbl, uint64_t key);
int hashtbl_resize(HashTable *tbl, int new_hash_size);
void hashtbl_iter_reset(HashTableIter *iter);
int hashtbl_iter(HashTable *tbl, HashTableIter *iter);
void hashtbl_foreach(HashTable *tbl, HashTableIterFunc func, void *ud);
#endif