WS63 SDK 文档 7021f4f@fbb_ws63
ws63 和 ws63e 解决方案的 SDK 文档
载入中...
搜索中...
未找到
cstl_hash.h 文件参考

cstl_hash 对外头文件 更多...

#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include "cstl_public.h"
#include "securec.h"
cstl_hash.h 的引用(Include)关系图:
此图展示该文件直接或间接的被哪些文件引用了:

浏览源代码.

类型定义

typedef struct CstlHashInfo CstlHash
 hash表句柄
 
typedef struct TagHashNodeCstlHashIterator
 hash表迭代器定义,指向hash节点
 
typedef size_t(* CstlHashCodeCalcFunc) (uintptr_t key, size_t bktSize)
 根据输入的Key生成hash表索引。
 
typedef bool(* CstlHashMatchFunc) (uintptr_t key1, uintptr_t key2)
 该函数把输入数据与Key进行匹配比较。第一个哈希表中保存的key,第二个是用户需要匹配的Key。如果不匹配,返回值为false。
 

函数

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)
 默认字符串匹配函数。
 
CstlHashCstlHashCreate (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 对外头文件

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 创建初始版本