Ejemplo n.º 1
0
void hash_add(hash_table *table,uint64_t key,void *data){
	hash_node *hnode = NULL;
	hash_node *newnode =NULL;
	lnodeptr  pnode = NULL;
	linklist *l = NULL;
	lnodeptr node = hash_find_node(table,key);
	if(node != NULL){
		hnode = (hash_node *) node->data;
		hnode->data = data;
	}else
	{
		newnode = hash_node_malloc(key,data);
		pnode = lnode_malloc(newnode);
		l = get_linklist(table,key);
		linklist_push(l,pnode);
	}
}
Ejemplo n.º 2
0
static lnodeptr  hash_find_node(hash_table *table,uint64_t key){
	linklist *l = get_linklist(table,key);
	hash_node *hnode =NULL;
	lnodeptr node = linklist_first(l);
	while(node){
		hnode = (hash_node *)node->data;
		if(hnode->key == key){
			hnode->access_time = time(NULL);
			/* put the lastest item to the head of the link list */
			(void)linklist_remove(node);
			linklist_push(l,node);
			return node;
		}
		node = linklist_get_next(l,node);
	}
	return NULL;
}
Ejemplo n.º 3
0
static void delay_table_delete_obsolete(uint64_t key)
{
	linklist *l = get_linklist(table,key);
	time_t  nowtime = time(0);
	hash_node *hnode1=NULL;
	hash_node *hnode2=NULL;
	lnodeptr node=NULL;

	while(1){
		node = linklist_tail(l);
		if(! node ){
			break;
		}   
		hnode1 = (hash_node *)node->data;
		if(hnode1->access_time+table->timeout < nowtime){
			lnodeptr tail=linklist_pop_tail(l);
			hnode2 = (hash_node *)tail->data;
			if(NULL!=hnode2)
			{   
				if(hnode2->data!=NULL)
				{
					linklist *msg_list=(linklist *)hnode2->data;
					count+=linklist_destory(msg_list);
					free(msg_list);  	
					hnode2->data=NULL;
					lDestroy++;
				}
				free(hnode2);
			}   
			tail->data=NULL;
			free(tail);
		}else{
			break;
		}   
	} 
}