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

cstl_public 公共模块对外定义 更多...

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

浏览源代码.

结构体

struct  CstlMallocFreeFuncPair
 用户内存申请释放函数对 更多...
 
struct  CstlDupFreeFuncPair
 key和value函数原型对 更多...
 

宏定义

#define CSTL_OK   0
 
#define CSTL_ERROR   (-1)
 
#define CSTL_ERRNO_BASE   (uint32_t)0x0a03u
 
#define ERRNO_CSTL_ELEMENT_EMPTY   ((CSTL_ERRNO_BASE << 16u) | ((uint32_t)ERRNO_ELEMENT_EMPTY))
 
#define ERRNO_CSTL_INPUT_INVALID   ((CSTL_ERRNO_BASE << 16u) | ((uint32_t)ERRNO_INPUT_INVALID))
 
#define ERRNO_CSTL_NODE_CREATE_FAIL   ((CSTL_ERRNO_BASE << 16u) | ((uint32_t)ERRNO_NODE_CREATE_FAIL))
 
#define CSTL_CONTAINER_OF(ptr, type, member)    ((type *)((uintptr_t)(ptr) - (uintptr_t)(&(((type *)0)->member))))
 该API通过结构的某个成员变量,得到这个结构的起始地址。
 

类型定义

typedef int32_t(* CstlDataCmpFunc) (const void *data1, const void *data2)
 比较函数原型
 
typedef int32_t(* CstlKeyCmpFunc) (uintptr_t key1, uintptr_t key2)
 比较函数原型
 
typedef bool(* CstlMatchFunc) (const void *node, uintptr_t data)
 匹配函数原型
 
typedef void *(* CstlDupFunc) (void *ptr, size_t size)
 用户数据拷贝函数原型
 
typedef void(* CstlFreeFunc) (void *ptr)
 用户内存释放函数原型
 
typedef void *(* CstlMallocFunc) (size_t size)
 用户内存申请函数原型
 

枚举

enum  { ERRNO_ELEMENT_EMPTY = 1 , ERRNO_INPUT_INVALID = 2 , ERRNO_NODE_CREATE_FAIL = 3 }
 

详细描述

cstl_public 公共模块对外定义

cstl公共定义实现源码

日期
2021-05-14
版本
v0.1.0
修改日志:
Date Version Description
2021-05-14 0.1.0 创建初始版本

宏定义说明

◆ CSTL_CONTAINER_OF

#define CSTL_CONTAINER_OF (   ptr,
  type,
  member 
)     ((type *)((uintptr_t)(ptr) - (uintptr_t)(&(((type *)0)->member))))

该API通过结构的某个成员变量,得到这个结构的起始地址。

描述:
该API通过结构的某个成员变量,得到这个结构的起始地址。该API是一个特殊的宏,输入参数取决于宏的实现。
注意
参数
ptr[IN] 该参数表示结点某成员的地址。取值范围为数据类型。
type[IN] 该参数表示传入的成员所属的结点类型结构。取值范围为数据类型。
member[IN] 该参数表示结构中成员变量的名字。取值范围为数据类型。
返回值
与入参类型相同结构的地址。
参见
无。

◆ CSTL_ERRNO_BASE

#define CSTL_ERRNO_BASE   (uint32_t)0x0a03u

CSTL_ERRNO_BASE 错误码定义

◆ CSTL_ERROR

#define CSTL_ERROR   (-1)

-1 错误。

◆ CSTL_OK

#define CSTL_OK   0

0x0 正确。

◆ ERRNO_CSTL_ELEMENT_EMPTY

#define ERRNO_CSTL_ELEMENT_EMPTY   ((CSTL_ERRNO_BASE << 16u) | ((uint32_t)ERRNO_ELEMENT_EMPTY))

容器不是NULL但是内容为空,该值为十六进制的0xa030001

◆ ERRNO_CSTL_INPUT_INVALID

#define ERRNO_CSTL_INPUT_INVALID   ((CSTL_ERRNO_BASE << 16u) | ((uint32_t)ERRNO_INPUT_INVALID))

容器的入参是非法的,该值为十六进制的0xa030002

◆ ERRNO_CSTL_NODE_CREATE_FAIL

#define ERRNO_CSTL_NODE_CREATE_FAIL   ((CSTL_ERRNO_BASE << 16u) | ((uint32_t)ERRNO_NODE_CREATE_FAIL))

节点创建失败,该值为十六进制的0xa030003

类型定义说明

◆ CstlDataCmpFunc

typedef int32_t(* CstlDataCmpFunc) (const void *data1, const void *data2)

比较函数原型

描述:比较函数原型,用于排序场景。
注意
注意:这里只定义了比较函数原型,由于不知道数据类型和长度,因此钩子函数需要业务自己实现。
参数
data1[IN] 数据1
data2[IN] 数据2
返回值
>0升序排序
=0不做交换
<0降序排序

◆ CstlDupFunc

typedef void *(* CstlDupFunc) (void *ptr, size_t size)

用户数据拷贝函数原型

注意
注意:源缓冲区长度需要调用者获取,由于不知道数据类型和长度,因此钩子函数需要业务自己实现。
参数
ptr[IN] 指向用户数据的指针
size[IN] 用户数据拷贝长度
返回值
目标缓冲区,NULL表示失败。

◆ CstlFreeFunc

typedef void(* CstlFreeFunc) (void *ptr)

用户内存释放函数原型

描述:资源释放函数原型,一般用于机制批量free内存时,内存中可能含有用户私有资源,这是需要用户自行释放
参数
ptr[IN] 指向用户数据的指针
返回值

◆ CstlKeyCmpFunc

typedef int32_t(* CstlKeyCmpFunc) (uintptr_t key1, uintptr_t key2)

比较函数原型

描述:比较函数原型,用于排序场景。
注意
注意:这里只定义了比较函数原型,由于不知道数据类型和长度,因此钩子函数需要业务自己实现。
当前源码内有默认的比较函数:该函数不对外提供,但是用户如果不指定默认比较方法会调用它,对此简单解释: 其比较方式为把当前数据转化为有符号数进行比较,即处理含有负数的场景,比较方式为升序。 如果用户需要存储的数据是无符号整数类型。此时排序结果可能不是预期的。 这种场景下的数据比较,用户需要自定义比较函数来解决这种情况的数据比较。 例如对于大数A = uintptr_t(-1) 和 大数 B = 1ULL << 50,目前的函数会认为A < B,实际上A是大于B的。 综上所述,用户对于使用什么样的比较函数,应该根据自己的数据类型来编写(包括降序或其它比较规则)
参数
key1[IN] key1
key2[IN] key2
返回值
>0升序排序
=0不做交换
<0降序排序

◆ CstlMallocFunc

typedef void *(* CstlMallocFunc) (size_t size)

用户内存申请函数原型

注意
注意:用户内存申请函数原型,需要用户自己实现。
参数
size[IN] 内存申请大小
返回值
指向分配内存空间的指针,NULL表示失败

◆ CstlMatchFunc

typedef bool(* CstlMatchFunc) (const void *node, uintptr_t data)

匹配函数原型

描述:用于匹配查询场景。
注意
注意:这里只定义了函数原型,由于不知道用户查询匹配机制,因此钩子函数需要业务自己实现。
参数
node[IN] 算法结构体节点
data[IN] 关键信息
返回值
true匹配成功
false匹配失败

枚举类型说明

◆ anonymous enum

anonymous enum
枚举值
ERRNO_ELEMENT_EMPTY 
ERRNO_INPUT_INVALID 
ERRNO_NODE_CREATE_FAIL