diff --git a/src/util/inc/tarray.h b/src/util/inc/tarray.h index 6b70780d10482610ef64b1c50640756db4204bd6..28ebb1823582cad97af5ff2ed5c406d8edeb9e16 100644 --- a/src/util/inc/tarray.h +++ b/src/util/inc/tarray.h @@ -100,6 +100,12 @@ void taosArrayRemove(SArray* pArray, size_t index); */ void taosArrayCopy(SArray* pDst, SArray* pSrc); +/** + * clone a new array + * @param pSrc + */ +SArray* taosArrayClone(SArray* pSrc); + /** * destroy array list * @param pArray diff --git a/src/util/src/tarray.c b/src/util/src/tarray.c index eb1d2133174b59a0ba93830a51986cbc78dc4c4b..d97b220a40a83450179ebe8d9c10597b83843bc0 100755 --- a/src/util/src/tarray.c +++ b/src/util/src/tarray.c @@ -160,6 +160,21 @@ void taosArrayCopy(SArray* pDst, SArray* pSrc) { pDst->size = pSrc->size; } +SArray* taosArrayClone(SArray* pSrc) { + assert(pSrc != NULL); + + if (pSrc->size == 0) { // empty array list + return taosArrayInit(8, pSrc->elemSize); + } + + SArray* dst = taosArrayInit(pSrc->size, pSrc->elemSize); + + memcpy(dst->pData, pSrc->pData, pSrc->elemSize * pSrc->size); + dst->size = pSrc->size; + return dst; +} + + void taosArrayDestroy(SArray* pArray) { if (pArray == NULL) { return;