HCoreBase/include/HSendBuffer.h
2026-04-01 15:17:23 +08:00

84 lines
2.1 KiB
C

/**
* 日期: 2026-03-31
* 作者: coffee
* 描述: 基于 HMem 的发送缓冲区
* 默认预留前头空间, 便于上层先构建内容, 下层再补发包前头
*/
#ifndef __H_SEND_BUFFER_H__
#define __H_SEND_BUFFER_H__
#include <stddef.h>
#include <stdint.h>
/**
* @brief 默认预留的前头空间
*/
#ifndef HSEND_BUFFER_FIRST_OFFSET
#define HSEND_BUFFER_FIRST_OFFSET 30u
#endif
/**
* @brief 创建发送缓冲区
* @param size 初始可用数据区大小
* @return 成功返回数据区指针, 失败返回 NULL
*/
void *HSendBufferGet(size_t size);
/**
* @brief 调整发送缓冲区当前使用长度
* @param ptr 发送缓冲区指针
* @param size 新的当前数据长度(包含已经补上的前头)
* @return 成功返回新的缓冲区指针, 失败返回 NULL
*/
void *HSendBufferRealloc(void *ptr, size_t size);
/**
* @brief 往前头追加数据
* @param ptr 发送缓冲区指针
* @param data 要写入前头的数据, 传 NULL 时仅预留空间
* @param size 前头追加长度
* @return
* - 成功返回新的缓冲区指针
* - 前头空间不足时返回原指针
* - 非法指针返回 NULL
*/
void *HSendBufferAddHead(void *ptr, const void *data, uint8_t size);
/**
* @brief 增加引用计数
* @param ptr 发送缓冲区指针
* @return 成功返回原指针, 失败返回 NULL
*/
void *HSendBufferAddRef(void *ptr);
/**
* @brief 释放发送缓冲区
* @param ptr 发送缓冲区指针
* @return 成功返回1, 失败返回0
*/
uint8_t HSendBufferFree(void *ptr);
/**
* @brief 判断是否为 HSendBuffer
* @param ptr 待判断指针
* @return 是返回1, 否返回0
*/
uint8_t HSendBufferIsValid(const void *ptr);
/**
* @brief 获取当前剩余前头偏移
* @param ptr 发送缓冲区指针
* @return 偏移量, 非法指针返回0
*/
uint8_t HSendBufferGetFrontOffset(const void *ptr);
/**
* @brief 获取当前前头剩余大小
* @param ptr 发送缓冲区指针
* @return 剩余前头大小, 非法指针返回0
*/
uint8_t HSendBufferGetHeadRemainSize(const void *ptr);
#endif // __H_SEND_BUFFER_H__