From 14283283e47bce0f9ddff6079fc232e4e99fa340 Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Fri, 7 Oct 2022 23:03:31 +0800 Subject: [PATCH] more --- include/common/tdataformat.h | 13 +++++++++++++ source/common/src/tdataformat.c | 24 ++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/include/common/tdataformat.h b/include/common/tdataformat.h index 10cb72f5d0..a1fefa6902 100644 --- a/include/common/tdataformat.h +++ b/include/common/tdataformat.h @@ -27,6 +27,7 @@ extern "C" { #endif +typedef struct SBuffer SBuffer; typedef struct SSchema SSchema; typedef struct STColumn STColumn; typedef struct STSchema STSchema; @@ -56,6 +57,18 @@ const static uint8_t BIT2_MAP[4][4] = {{0b00000000, 0b00000001, 0b00000010, 0}, #define SET_BIT2(p, i, v) ((p)[(i) >> 2] = (p)[(i) >> 2] & N1(BIT2_MAP[(i)&3][3]) | BIT2_MAP[(i)&3][(v)]) #define GET_BIT2(p, i) (((p)[(i) >> 2] >> BIT2_MAP[(i)&3][3]) & ((uint8_t)3)) +// SBuffer ================================ +struct SBuffer { + int64_t nBuf; + uint8_t *pBuf; +}; + +#define tBufferCreate() \ + (SBuffer) { .nBuf = 0, .pBuf = NULL } +void tBufferDestroy(SBuffer *pBuffer); +int32_t tBufferInit(SBuffer *pBuffer, int64_t size); +int32_t tBufferPut(SBuffer *pBuffer, const void *pData, int64_t nData); + // STSchema ================================ int32_t tTSchemaCreate(int32_t sver, SSchema *pSchema, int32_t nCols, STSchema **ppTSchema); void tTSchemaDestroy(STSchema *pTSchema); diff --git a/source/common/src/tdataformat.c b/source/common/src/tdataformat.c index e461e06158..110c3bc8f4 100644 --- a/source/common/src/tdataformat.c +++ b/source/common/src/tdataformat.c @@ -20,6 +20,30 @@ #include "tdatablock.h" #include "tlog.h" +// SBuffer ================================ +void tBufferDestroy(SBuffer *pBuffer) { + tFree(pBuffer->pBuf); + pBuffer->pBuf = NULL; +} + +int32_t tBufferInit(SBuffer *pBuffer, int64_t size) { + pBuffer->nBuf = 0; + return tRealloc(&pBuffer->pBuf, size); +} + +int32_t tBufferPut(SBuffer *pBuffer, const void *pData, int64_t nData) { + int32_t code = 0; + + code = tRealloc(&pBuffer->pBuf, pBuffer->nBuf + nData); + if (code) return code; + + memcpy(pBuffer->pBuf + pBuffer->nBuf, pData, nData); + pBuffer->nBuf += nData; + + return code; +} + +// ================================ static int32_t tGetTagVal(uint8_t *p, STagVal *pTagVal, int8_t isJson); #pragma pack(push, 1)