#ifndef __HASHTABLE_H__
|
#define __HASHTABLE_H__
|
|
#include <sys/queue.h>
|
#include <set>
|
|
#define MAPSIZE 100
|
|
typedef struct hashtable_t
|
{
|
struct tailq_header_t* array[MAPSIZE];
|
int mutex;
|
int wlock;
|
int cond;
|
size_t readcnt;
|
|
} hashtable_t;
|
typedef void (*hashtable_foreach_cb)(int key, void *value);
|
|
void hashtable_init(hashtable_t *hashtable);
|
void *hashtable_get(hashtable_t *hashtable, int key);
|
void hashtable_put(hashtable_t *hashtable, int key, void *value);
|
void *hashtable_remove(hashtable_t *hashtable, int key);
|
void hashtable_removeall(hashtable_t *hashtable);
|
|
/**
|
* 遍历hash_table
|
* @demo
|
* hashtable_foreach(&hashtable, [&](int key, void * value){
|
* printf("%d, %p\n", key, value);
|
* });
|
*
|
*/
|
void hashtable_foreach(hashtable_t *hashtable, hashtable_foreach_cb cb);
|
|
// void hashtable_printall(hashtable_t *hashtable);
|
|
int hashtable_alloc_key(hashtable_t *hashtable);
|
|
std::set<int> * hashtable_keyset(hashtable_t *hashtable) ;
|
#endif
|