2016-06-27 18:31:45 +08:00
|
|
|
#include <assert.h>
|
2015-10-10 18:30:12 +08:00
|
|
|
#include <MESA/MESA_htable.h>
|
2016-02-11 13:57:39 +08:00
|
|
|
|
2015-10-10 18:30:12 +08:00
|
|
|
void map_tmp_free(void* ptr)
|
|
|
|
|
{
|
|
|
|
|
free(ptr);
|
|
|
|
|
}
|
2016-02-11 13:57:39 +08:00
|
|
|
|
|
|
|
|
long read_map_val(void *data, const uchar *key, uint size, void *user_arg)
|
|
|
|
|
{
|
|
|
|
|
if(data!=NULL)
|
|
|
|
|
{
|
|
|
|
|
*(int*)user_arg=*(int*)data;
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
2015-10-10 18:30:12 +08:00
|
|
|
MESA_htable_handle map_create(void)
|
|
|
|
|
{
|
|
|
|
|
MESA_htable_handle string2int_map;
|
|
|
|
|
MESA_htable_create_args_t hargs;
|
|
|
|
|
memset(&hargs,0,sizeof(hargs));
|
2016-06-27 18:25:53 +08:00
|
|
|
hargs.thread_safe=0;
|
2016-02-11 13:57:39 +08:00
|
|
|
hargs.hash_slot_size = 4*1024;
|
2015-10-10 18:30:12 +08:00
|
|
|
hargs.max_elem_num = 0;
|
2016-04-03 12:29:41 +08:00
|
|
|
hargs.eliminate_type = HASH_ELIMINATE_ALGO_FIFO;
|
2015-10-10 18:30:12 +08:00
|
|
|
hargs.expire_time = 0;
|
|
|
|
|
hargs.key_comp = NULL;
|
|
|
|
|
hargs.key2index = NULL;
|
2016-02-11 13:57:39 +08:00
|
|
|
hargs.recursive = 1;
|
2015-10-10 18:30:12 +08:00
|
|
|
hargs.data_free = map_tmp_free;
|
|
|
|
|
hargs.data_expire_with_condition = NULL;
|
|
|
|
|
string2int_map=MESA_htable_create(&hargs, sizeof(hargs));
|
|
|
|
|
MESA_htable_print_crtl(string2int_map, 0);
|
|
|
|
|
return string2int_map;
|
|
|
|
|
}
|
|
|
|
|
void map_destroy(MESA_htable_handle p)
|
|
|
|
|
{
|
|
|
|
|
MESA_htable_destroy(p,NULL);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
int map_register(MESA_htable_handle handle,const char* string,int value)
|
|
|
|
|
{
|
|
|
|
|
unsigned int size=strlen(string);
|
|
|
|
|
unsigned char *key=(unsigned char *)string;
|
|
|
|
|
int ret=0;
|
2016-02-11 13:57:39 +08:00
|
|
|
int * data= (int*)malloc(sizeof(int));
|
2015-10-10 18:30:12 +08:00
|
|
|
*data=value;
|
|
|
|
|
ret=MESA_htable_add(handle,key,size,data);
|
2016-02-11 13:57:39 +08:00
|
|
|
if(ret<0)
|
|
|
|
|
{
|
|
|
|
|
free(data);
|
|
|
|
|
}
|
2015-10-10 18:30:12 +08:00
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
int map_str2int(MESA_htable_handle handle,const char* string,int* value)
|
|
|
|
|
{
|
|
|
|
|
int *data=NULL;
|
2016-02-11 13:57:39 +08:00
|
|
|
long cb_ret=0;
|
2015-10-10 18:30:12 +08:00
|
|
|
unsigned int size=strlen(string);
|
2016-02-11 13:57:39 +08:00
|
|
|
|
|
|
|
|
data=(int*)MESA_htable_search_cb(handle,(unsigned char*)string,size,
|
|
|
|
|
read_map_val,value,&cb_ret);
|
|
|
|
|
|
|
|
|
|
// data=(int*)MESA_htable_search(handle,(unsigned char*)string,size);
|
|
|
|
|
if(cb_ret>0)
|
2015-10-10 18:30:12 +08:00
|
|
|
{
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
}
|
2016-09-18 12:44:00 +08:00
|
|
|
int map_unNullstr2int(MESA_htable_handle handle,const char* string,int len,int* value)
|
|
|
|
|
{
|
|
|
|
|
int *data=NULL;
|
|
|
|
|
long cb_ret=0;
|
|
|
|
|
|
|
|
|
|
data=(int*)MESA_htable_search_cb(handle,(unsigned char*)string,len,
|
|
|
|
|
read_map_val,value,&cb_ret);
|
|
|
|
|
|
|
|
|
|
// data=(int*)MESA_htable_search(handle,(unsigned char*)string,len);
|
|
|
|
|
if(cb_ret>0)
|
|
|
|
|
{
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
}
|
2016-06-27 18:25:53 +08:00
|
|
|
void duplicate_func(const uchar * key, uint size, void * data, void * user)
|
|
|
|
|
{
|
|
|
|
|
MESA_htable_handle target=(MESA_htable_handle)user;
|
|
|
|
|
int value=*(int*)data;
|
|
|
|
|
int ret=0;
|
|
|
|
|
char* string=(char*)calloc(sizeof(char),(size+1));
|
|
|
|
|
memcpy(string,key,size);
|
2016-06-27 18:31:45 +08:00
|
|
|
ret=map_register(target,string,value);
|
2016-06-27 18:25:53 +08:00
|
|
|
assert(ret>0);
|
|
|
|
|
}
|
|
|
|
|
MESA_htable_handle map_duplicate(MESA_htable_handle origin_map)
|
|
|
|
|
{
|
|
|
|
|
int ret=0;
|
|
|
|
|
MESA_htable_handle target=NULL;
|
|
|
|
|
target=map_create();
|
|
|
|
|
ret=MESA_htable_iterate(origin_map, duplicate_func, target);
|
|
|
|
|
assert(ret==0);
|
|
|
|
|
return target;
|
|
|
|
|
}
|
2015-10-10 18:30:12 +08:00
|
|
|
|