98 lines
2.9 KiB
C++
98 lines
2.9 KiB
C++
/*************************************************************************
|
|
> File Name: uthash.cpp
|
|
> Author: pxz
|
|
> Created Time: Fri 18 Sep 2020 04:26:09 PM CST
|
|
************************************************************************/
|
|
#include "hos_hash.h"
|
|
|
|
void add_fd_context(hos_fd_context_t **handle, hos_fd_context_t *input)
|
|
{
|
|
hos_fd_context_t *value = NULL;
|
|
HASH_FIND(hh,*handle,&input->fd,sizeof(input->fd),value);
|
|
if (value == NULL)
|
|
{
|
|
value = (hos_fd_context_t *)malloc(sizeof(hos_fd_context_t));
|
|
memcpy(value, input, sizeof(hos_fd_context_t));
|
|
value->object = (char *)calloc(1, strlen(input->object) + 1);
|
|
value->bucket = (char *)calloc(1, strlen(input->bucket) + 1);
|
|
memcpy(value->bucket, input->bucket, strlen(input->bucket));
|
|
memcpy(value->object, input->object, strlen(input->object));
|
|
HASH_ADD(hh,*handle,fd,sizeof(long),value);
|
|
}
|
|
else
|
|
{
|
|
value->mode = input->mode;
|
|
if (value->object != NULL)
|
|
{
|
|
free(value->object);
|
|
value->object = NULL;
|
|
}
|
|
if (value->bucket != NULL)
|
|
{
|
|
free(value->bucket);
|
|
value->bucket = NULL;
|
|
}
|
|
value->object = (char *)calloc(1, strlen(input->object) + 1);
|
|
value->bucket = (char *)calloc(1, strlen(input->bucket) + 1);
|
|
memcpy(value->bucket, input->bucket, strlen(input->bucket));
|
|
memcpy(value->object, input->object, strlen(input->object));
|
|
value->callback = input->callback;
|
|
value->userdata = input->userdata;
|
|
value->cache = input->cache;
|
|
value->cache_count = input->cache_count;
|
|
value->cache_rest = input->cache_rest;
|
|
value->position = input->position;
|
|
value->recive_cnt = input->recive_cnt;
|
|
value->fd_status = value->fd_status;
|
|
}
|
|
}
|
|
|
|
hos_fd_context_t *find_context_by_fd(hos_fd_context_t *handle, size_t fd)
|
|
{
|
|
hos_fd_context_t *value = NULL;
|
|
HASH_FIND(hh,handle,&fd,sizeof(long),value);
|
|
return value;
|
|
}
|
|
|
|
void delete_context_by_fd(hos_fd_context_t **handle, size_t fd)
|
|
{
|
|
hos_fd_context_t *value = NULL;
|
|
|
|
HASH_FIND(hh,*handle,&fd,sizeof(long),value);
|
|
if (value)
|
|
{
|
|
if (value->bucket)
|
|
{
|
|
free(value->bucket);
|
|
value->bucket = NULL;
|
|
}
|
|
if (value->object)
|
|
{
|
|
free(value->object);
|
|
value->object = NULL;
|
|
}
|
|
HASH_DEL(*handle, value);
|
|
free(value);
|
|
}
|
|
}
|
|
|
|
void delete_all(hos_fd_context_t **handle)
|
|
{
|
|
hos_fd_context_t *current, *tmp;
|
|
HASH_ITER(hh, *handle, current, tmp)
|
|
{
|
|
if (current->bucket)
|
|
{
|
|
free(current->bucket);
|
|
current->bucket = NULL;
|
|
}
|
|
if (current->object)
|
|
{
|
|
free(current->object);
|
|
current->object = NULL;
|
|
}
|
|
HASH_DEL(*handle, current);
|
|
free(current);
|
|
}
|
|
}
|