From 47ad1bc8d336e989b5c6adef85e0132468afefaf Mon Sep 17 00:00:00 2001 From: coffee Date: Wed, 12 Mar 2025 14:42:23 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E4=BF=AE=E6=94=B9=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/HByteStack.h | 5 +++-- include/HVector.h | 12 +++++++----- src/HVector.c | 37 +++++++++++++++++++++++++++++++++---- 3 files changed, 43 insertions(+), 11 deletions(-) diff --git a/include/HByteStack.h b/include/HByteStack.h index ed70c26..e1b896b 100644 --- a/include/HByteStack.h +++ b/include/HByteStack.h @@ -18,15 +18,16 @@ typedef uint8_t HByteType; // 栈类型 typedef uint32_t HByteDataType; // 栈数据类型 #ifdef _HBYTE_STACK_LEN_USE32 +#define HBYTE_STACK_ERROR (0xffffffff) typedef uint32_t HByteLenType; #elif defined(_HBYTE_STACK_LEN_USE16) +#define HBYTE_STACK_ERROR (0xffff) typedef uint16_t HByteLenType; #else +#define HBYTE_STACK_ERROR (0xff) typedef uint8_t HByteLenType; // 栈长度类型 #endif -// 失败返回值 -#define HBYTE_STACK_ERROR (-1) /** ================================================================================ **/ diff --git a/include/HVector.h b/include/HVector.h index 6e0443d..332e02a 100644 --- a/include/HVector.h +++ b/include/HVector.h @@ -24,16 +24,18 @@ enum eHVectorFlag { kHVectorNeedInit = 0x80, // 需要初始化 }; -#define HVECTOR_ERROR (-1) typedef uint8_t HVectorType; // vector类型 typedef uint32_t HVectorDataType; // vector统一数据类型 #ifdef _HVECTOR_LEN_USE32 +#define HVECTOR_ERROR (0xffffffff) typedef uint32_t HVectorLenType; #elif defined(_HVECTOR_LEN_USE16) +#define HVECTOR_ERROR (0xffff) typedef uint16_t HVectorLenType; #else +#define HVECTOR_ERROR (0xff) typedef uint8_t HVectorLenType; // vector长度类型 #endif @@ -100,10 +102,10 @@ typedef struct _HVector32 { // 添加数据, 成功返回1, 失败返回 0 uint8_t HVectorAddData(HVectorType *vector, HVectorDataType data); -// 添加字节数据, 超出仅复制到最大长度 -void HVectorAddBytes(HVectorType *vector, const uint8_t *datas, HVectorLenType byteLen); -// 添加对应格式数据, 要求datas类型是同一对应位类型, 长度为字节长度, 超出仅复制到最大长度 -void HVectorAddDatas(HVectorType *vector, const void *datas, HVectorLenType byteLen); +// 添加字节数据, 超出仅复制到最大长度, 返回复制长度 +HVectorLenType HVectorAddBytes(HVectorType *vector, const uint8_t *datas, HVectorLenType byteLen); +// 添加对应格式数据, 要求datas类型是同一对应位类型, 长度为字节长度, 超出仅复制到最大长度, 返回复制长度 +HVectorLenType HVectorAddDatas(HVectorType *vector, const void *datas, HVectorLenType byteLen); // 获取数据, 失败返回 HVECTOR_ERROR HVectorDataType HVectorGetData(HVectorType *vector, HVectorLenType index); diff --git a/src/HVector.c b/src/HVector.c index 952f79a..1458382 100644 --- a/src/HVector.c +++ b/src/HVector.c @@ -4,6 +4,10 @@ #include static void InitVector(HVectorType *vector) { + if (vector == NULL) { + return ; + } + if ((vector[0] & kHVectorNeedInit) == 0) { return ; } @@ -17,6 +21,10 @@ static void InitVector(HVectorType *vector) { } static uint8_t GetVectorType(const HVectorType *vector) { + if (vector == NULL) { + return 0; + } + InitVector((HVectorType *)vector); const _HVectorBase *base = (const _HVectorBase *)vector; return base->flag & kHVectorFlagAllMask; @@ -51,22 +59,38 @@ static void SetVectorData(HVectorType *vector, HVectorLenType pos, HVectorDataTy } static HVectorLenType GetVectorLen(const HVectorType *vector) { + if (vector == NULL) { + return 0; + } + const _HVectorBase *base = (const _HVectorBase *)vector; InitVector((HVectorType *)vector); return base->len; } static HVectorLenType GetVectorUseLen(const HVectorType *vector) { + if (vector == NULL) { + return 0; + } + const _HVectorBase *base = (const _HVectorBase *)vector; InitVector((HVectorType *)vector); return base->useLen; } static HVectorLenType GetVectorByteLen(const HVectorType *vector) { + if (vector == NULL) { + return 0; + } + return GetVectorTypeSize(vector) * ((const _HVectorBase *)vector)->len; } static HVectorLenType GetVectorByteUseLen(const HVectorType *vector) { + if (vector == NULL) { + return 0; + } + return GetVectorTypeSize(vector) * ((const _HVectorBase *)vector)->useLen; } @@ -83,6 +107,10 @@ static void *GetVectorDataPtr(HVectorType *vector, HVectorLenType pos) { } static void SetVectorUseLen(HVectorType *vector, HVectorLenType len) { + if (vector == NULL) { + return ; + } + _HVectorBase *base = (_HVectorBase *)vector; InitVector((HVectorType *)vector); base->useLen = len; @@ -100,7 +128,7 @@ uint8_t HVectorAddData(HVectorType *vector, HVectorDataType data) { return 1; } -void HVectorAddBytes(HVectorType *vector, const uint8_t *datas, HVectorLenType byteLen) { +HVectorLenType HVectorAddBytes(HVectorType *vector, const uint8_t *datas, HVectorLenType byteLen) { HVectorLenType useLen = GetVectorUseLen(vector); HVectorLenType maxLen = GetVectorByteLen(vector) - useLen; HVectorLenType typeSize = GetVectorTypeSize(vector); @@ -109,16 +137,17 @@ void HVectorAddBytes(HVectorType *vector, const uint8_t *datas, HVectorLenType b } if (byteLen == 0) { - return; + return 0; } uint8_t *dest = (uint8_t *)GetVectorDataBytePtr(vector, GetVectorByteUseLen(vector)); memcpy(dest, datas, byteLen); SetVectorUseLen(vector, useLen + (byteLen + typeSize - 1) / typeSize); + return byteLen; } -void HVectorAddDatas(HVectorType *vector, const void *datas, HVectorLenType byteLen) { - HVectorAddBytes(vector, (const uint8_t *)datas, byteLen * GetVectorTypeSize(vector)); +HVectorLenType HVectorAddDatas(HVectorType *vector, const void *datas, HVectorLenType byteLen) { + return HVectorAddBytes(vector, (const uint8_t *)datas, byteLen * GetVectorTypeSize(vector)) / GetVectorTypeSize(vector); } // 获取数据, 失败返回 HVECTOR_ERROR