|
| size_t | CstlHashCodeCalcInt (uintptr_t key, size_t bktSize) |
| | 默认整型哈希函数。
|
| |
| size_t | CstlHashCodeCalcStr (uintptr_t key, size_t bktSize) |
| | 默认字符串哈希函数。
|
| |
| bool | CstlHashMatchInt (uintptr_t key1, uintptr_t key2) |
| | 默认整型匹配函数。
|
| |
| bool | CstlHashMatchStr (uintptr_t key1, uintptr_t key2) |
| | 默认字符串匹配函数。
|
| |
| CstlHash * | CstlHashCreate (size_t bktSize, CstlHashCodeCalcFunc hashFunc, CstlHashMatchFunc matchFunc, CstlDupFreeFuncPair *keyFunc, CstlDupFreeFuncPair *valueFunc) |
| | 创建一个Hash表,返回Hash表的句柄
|
| |
| int32_t | CstlHashInsert (CstlHash *hash, uintptr_t key, size_t keySize, uintptr_t value, size_t valueSize) |
| | 插入hash数据
|
| |
| int32_t | CstlHashPut (CstlHash *hash, uintptr_t key, size_t keySize, uintptr_t value, size_t valueSize) |
| | 插入或更新hash数据
|
| |
| int32_t | CstlHashAt (const CstlHash *hash, uintptr_t key, uintptr_t *value) |
| | 查找节点,返回节点数据。
|
| |
| CstlHashIterator | CstlHashFind (const CstlHash *hash, uintptr_t key) |
| | 查找key所在迭代器。
|
| |
| bool | CstlHashEmpty (const CstlHash *hash) |
| | 判断当前HASH表是否为空。
|
| |
| size_t | CstlHashSize (const CstlHash *hash) |
| | 获取HASH表的节点数量。
|
| |
| CstlHashIterator | CstlHashErase (CstlHash *hash, uintptr_t key) |
| | 从hash表中移除指定结点。
|
| |
| void | CstlHashClear (CstlHash *hash) |
| | 删除hash表所有节点。
|
| |
| void | CstlHashDestory (CstlHash *hash) |
| | 删除hash表
|
| |
| CstlHashIterator | CstlHashIterBegin (const CstlHash *hash) |
| | 获取hash表中的第一个节点的迭代器。
|
| |
| CstlHashIterator | CstlHashIterEnd (const CstlHash *hash) |
| | 获取hash表中最后一个节点之后预留的迭代器。
|
| |
| CstlHashIterator | CstlHashIterNext (const CstlHash *hash, CstlHashIterator it) |
| | 获取hash表的下一个节点迭代器。
|
| |
| uintptr_t | CstlHashIterKey (const CstlHash *hash, CstlHashIterator it) |
| | 获取迭代器的key。
|
| |
| uintptr_t | CstlHashIterValue (const CstlHash *hash, CstlHashIterator it) |
| | 获取迭代器的value。
|
| |
cstl_hash 对外头文件
- 版权所有
- Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved.
1、遍历过程中,迭代器指向冲突链中节点的位置;但end迭代器指向最后一个保留的hash桶,该桶无数据。 2、关于(key, value)中的value a) 如果key、value是整型数据,且长度 <= sizeof(uintptr_t),则直接记录在node后面紧邻位置; b)其它场景,key或value位置记录的是指针,指向真正的用户key或用户数据; 此时用户必须注册duplicate函数和free函数对。 3、duplicate函数:用户需要先根据源数据长度申请内存,在把用户数拷贝到申请的内存中去,最后返回分配的内存地址。 +-----—+ | 控制块 | +----— + iter—>+---—+ iter-->+---—+ | 0 | <-冲突链-> | prev | | prev | +-----—+ | next | 场景1: | next | 场景2: | 1 | +---—+ key长度<=sizeof(uintptr_t) +---—+ key长度<sizeof(uintptr_t) |-----—+ | key | value长度<=sizeof(uintptr_t) | key | value长度>sizeof(uintptr_t) | + +---—+ +---—+ 或字符串或自定义数据结构 | ... | | value| | data |–+ +-----—+ +---—+ | 指针 | + +---—+ +
- +--—>+-------—+ | userdata | | area | +-------—+ iter-->+---—+ iter-->+---—+ 场景4: | prev | | prev | key长度>sizeof(uintptr_t) | next | 场景3: | next | 或字符串或自定义数据结构 +---—+ key长度>sizeof(uintptr_t)或字符串或自定义数据结构 +---—+ | key |—+ value长度<=sizeof(uintptr_t) | key |—+ value长度>sizeof(uintptr_t) | 指针 | + | 指针 | + 或字符串或自定义数据结构 +---—+ +-—>+-------—+ +---—+ +-—>+-------—+ | data | | userkey | | data |–+ | userkey | +---—+ | area | | 指针 | + | area | +-------—+ +---—+ + +-------—+
+--—>+-------—+ | userdata | | area | +-------—+
- 日期
- 2021-05-14
- 版本
- v0.1.0
- 修改日志:
| Date | Version | Description |
| 2021-05-14 | 0.1.0 | 创建初始版本 |