# hash_table_t

# 概述

哈希表。

用hash_table_init初始化时,用hash_table_deinit释放。如:

hash_table_t hash_table;
hash_table_init(&hash_table, 10, destroy, compare, hash);
...
hash_table_deinit(&hash_table);

用hash_table_create创建时,用hash_table_destroy销毁。如:

hash_table_t* hash_table = hash_table_create(10, destroy, compare, hash);
...
hash_table_destroy(hash_table);

示例

typedef struct _motor_t
{
int id;
int position;
int velocity;
int acceleration;
} motor_t;

motor_t *motor_create(int id)
{
motor_t *motor = new motor_t;
motor->id = id;
motor->position = 0;
motor->velocity = 0;
motor->acceleration = 0;
return motor;
}

ret_t motor_destroy(motor_t *motor)
{
delete motor;
return RET_OK;
}

int motor_compare(const void *a, const void *b)
{
motor_t *motor_a = (motor_t *)a;
motor_t *motor_b = (motor_t *)b;

return motor_a->id - motor_b->id;
}

ret_t visist_motor(void *ctx, const void *data)
{
motor_t *motor = (motor_t *)data;
log_debug("motor id: %d\n", motor->id);
return RET_OK;
}

uint32_t motor_hash(const void *data)
{
motor_t *motor = (motor_t *)data;
return motor->id;
}

void demo(void)
{
hash_table_t motors;
motor_t *motor = NULL;

// 初始化哈希表
hash_table_init(&motors, 10, (tk_destroy_t)motor_destroy, (tk_compare_t)motor_compare, motor_hash);

motor = motor_create(1);
// 将motor添加到哈希表
hash_table_add(&motors, motor, TRUE);
ENSURE(hash_table_find(&motors, NULL, motor) == motor);

motor = motor_create(2);
// 将motor添加到哈希表
hash_table_add(&motors, motor, TRUE);
ENSURE(hash_table_find(&motors, NULL, motor) == motor);

// 遍历哈希表
log_debug("motors size: %d\n", hash_table_size(&motors));
hash_table_foreach(&motors, visist_motor, NULL);

// 释放哈希表
hash_table_deinit(&motors);
}

# 函数

函数名称 说明
hash_table_add 加入一个元素。
hash_table_clear 清除全部元素。
hash_table_count 返回满足条件元素的个数。
hash_table_create 创建hash_table对象。
hash_table_deinit 清除全部元素,并释放elms。
hash_table_destroy 销毁hash_table对象。
hash_table_find 查找第一个满足条件的元素。
hash_table_foreach 遍历元素。
hash_table_hash_int 计算int的hash值。
hash_table_hash_str 计算字符串hash值。
hash_table_init 初始化hash_table对象。
hash_table_remove 删除第一个满足条件的元素。
hash_table_remove_all 删除全部满足条件的元素。
hash_table_size 返回全部元素个数。

# 属性

属性名称 类型 说明
buckets darray_t buckets。
compare tk_compare_t 元素比较函数。
destroy tk_destroy_t 元素销毁函数。
hash tk_hash_t 元素哈希函数。

# hash_table_add 函数

  • 函数功能:

加入一个元素。

  • 函数原型:
ret_t hash_table_add (hash_table_t* hash_table, void* data, bool_t replace_if_exist);
  • 参数说明:
参数 类型 说明
返回值 ret_t 返回RET_OK表示成功,否则表示失败。
hash_table hash_table_t* 哈希表对象。
data void* 数据。
replace_if_exist bool_t 如果存在是否替换。

# hash_table_clear 函数

  • 函数功能:

清除全部元素。

  • 函数原型:
ret_t hash_table_clear (hash_table_t* hash_table);
  • 参数说明:
参数 类型 说明
返回值 ret_t 返回RET_OK表示成功,否则表示失败。
hash_table hash_table_t* 哈希表对象。

# hash_table_count 函数

  • 函数功能:

返回满足条件元素的个数。

  • 函数原型:
int32_t hash_table_count (hash_table_t* hash_table, tk_compare_t cmp, void* ctx);
  • 参数说明:
参数 类型 说明
返回值 int32_t 返回元素个数。
hash_table hash_table_t* 哈希表对象。
cmp tk_compare_t 比较函数,为NULL则使用内置的比较函数。
ctx void* 比较函数的上下文。

# hash_table_create 函数

  • 函数功能:

创建hash_table对象。

  • 函数原型:
hash_table_t* hash_table_create (uint32_t capacity, tk_destroy_t destroy, tk_compare_t compare, tk_hash_t hash);
  • 参数说明:
参数 类型 说明
返回值 hash_table_t* 哈希表对象。
capacity uint32_t 哈希表桶数。
destroy tk_destroy_t 元素销毁函数。
compare tk_compare_t 元素比较函数。
hash tk_hash_t 元素哈希函数。

# hash_table_deinit 函数

  • 函数功能:

清除全部元素,并释放elms。

  • 函数原型:
ret_t hash_table_deinit (hash_table_t* hash_table);
  • 参数说明:
参数 类型 说明
返回值 ret_t 返回RET_OK表示成功,否则表示失败。
hash_table hash_table_t* 哈希表对象。

# hash_table_destroy 函数

  • 函数功能:

销毁hash_table对象。

  • 函数原型:
ret_t hash_table_destroy (hash_table_t* hash_table);
  • 参数说明:
参数 类型 说明
返回值 ret_t 返回RET_OK表示成功,否则表示失败。
hash_table hash_table_t* 哈希表对象。

# hash_table_find 函数

  • 函数功能:

查找第一个满足条件的元素。

  • 函数原型:
void* hash_table_find (hash_table_t* hash_table, tk_compare_t cmp, void* ctx);
  • 参数说明:
参数 类型 说明
返回值 void* 如果找到,返回满足条件的对象,否则返回NULL。
hash_table hash_table_t* 哈希表对象。
cmp tk_compare_t 比较函数,为NULL则使用内置的比较函数。
ctx void* 比较函数的上下文。

# hash_table_foreach 函数

  • 函数功能:

遍历元素。

  • 函数原型:
ret_t hash_table_foreach (hash_table_t* hash_table, tk_visit_t visit, void* ctx);
  • 参数说明:
参数 类型 说明
返回值 ret_t 返回RET_OK表示成功,否则表示失败。
hash_table hash_table_t* 哈希表对象。
visit tk_visit_t 遍历函数。
ctx void* 遍历函数的上下文。

# hash_table_hash_int 函数

  • 函数功能:

计算int的hash值。

  • 函数原型:
uint32_t hash_table_hash_int (const void* data);
  • 参数说明:
参数 类型 说明
返回值 uint32_t 返回hash值。
data const void* 数据。

# hash_table_hash_str 函数

  • 函数功能:

计算字符串hash值。

  • 函数原型:
uint32_t hash_table_hash_str (const void* data);
  • 参数说明:
参数 类型 说明
返回值 uint32_t 返回hash值。
data const void* 数据。

# hash_table_init 函数

  • 函数功能:

初始化hash_table对象。

  • 函数原型:
hash_table_t* hash_table_init (hash_table_t* hash_table, uint32_t capacity, tk_destroy_t destroy, tk_compare_t compare, tk_hash_t hash);
  • 参数说明:
参数 类型 说明
返回值 hash_table_t* 哈希表对象。
hash_table hash_table_t* 哈希表对象。
capacity uint32_t 哈希表桶数。
destroy tk_destroy_t 元素销毁函数。
compare tk_compare_t 元素比较函数。
hash tk_hash_t 元素哈希函数。

# hash_table_remove 函数

  • 函数功能:

删除第一个满足条件的元素。

  • 函数原型:
ret_t hash_table_remove (hash_table_t* hash_table, tk_compare_t cmp, void* ctx);
  • 参数说明:
参数 类型 说明
返回值 ret_t 返回RET_OK表示成功,否则表示失败。
hash_table hash_table_t* 哈希表对象。
cmp tk_compare_t 比较函数,为NULL则使用内置的比较函数。
ctx void* 比较函数的上下文。

# hash_table_remove_all 函数

  • 函数功能:

删除全部满足条件的元素。

  • 函数原型:
ret_t hash_table_remove_all (hash_table_t* hash_table, tk_compare_t cmp, void* ctx);
  • 参数说明:
参数 类型 说明
返回值 ret_t 返回RET_OK表示成功,否则表示失败。
hash_table hash_table_t* 哈希表对象。
cmp tk_compare_t 比较函数,为NULL则使用内置的比较函数。
ctx void* 比较函数的上下文。

# hash_table_size 函数

  • 函数功能:

返回全部元素个数。

  • 函数原型:
int32_t hash_table_size (hash_table_t* hash_table);
  • 参数说明:
参数 类型 说明
返回值 int32_t 返回元素个数。
hash_table hash_table_t* 哈希表对象。

# buckets 属性

buckets。

  • 类型:darray_t
特性 是否支持
可直接读取
可直接修改

# compare 属性

元素比较函数。

  • 类型:tk_compare_t
特性 是否支持
可直接读取
可直接修改

# destroy 属性

元素销毁函数。

  • 类型:tk_destroy_t
特性 是否支持
可直接读取
可直接修改

# hash 属性

元素哈希函数。

  • 类型:tk_hash_t
特性 是否支持
可直接读取
可直接修改