提交 9eae52e1 编写于 作者: H hjxilinx

refactor the array list function

上级 1c14e570
...@@ -56,7 +56,7 @@ void* taosArrayPush(SArray* pArray, void* pData); ...@@ -56,7 +56,7 @@ void* taosArrayPush(SArray* pArray, void* pData);
void taosArrayPop(SArray* pArray); void taosArrayPop(SArray* pArray);
/** /**
* * get the data from array
* @param pArray * @param pArray
* @param index * @param index
* @return * @return
...@@ -64,25 +64,33 @@ void taosArrayPop(SArray* pArray); ...@@ -64,25 +64,33 @@ void taosArrayPop(SArray* pArray);
void* taosArrayGet(SArray* pArray, size_t index); void* taosArrayGet(SArray* pArray, size_t index);
/** /**
* * get the pointer data from the array
* @param pArray
* @param index
* @return
*/
void* taosArrayGetP(SArray* pArray, size_t index);
/**
* return the size of array
* @param pArray * @param pArray
* @return * @return
*/ */
size_t taosArrayGetSize(SArray* pArray); size_t taosArrayGetSize(SArray* pArray);
/** /**
* * insert data into array
* @param pArray * @param pArray
* @param index * @param index
* @param pData * @param pData
*/ */
void taosArrayInsert(SArray* pArray, int32_t index, void* pData); void* taosArrayInsert(SArray* pArray, size_t index, void* pData);
/** /**
* *
* @param pArray * @param pArray
*/ */
void taosArrayDestory(SArray* pArray); void taosArrayDestroy(SArray* pArray);
#ifdef __cplusplus #ifdef __cplusplus
} }
......
...@@ -38,15 +38,15 @@ void* taosArrayInit(size_t size, size_t elemSize) { ...@@ -38,15 +38,15 @@ void* taosArrayInit(size_t size, size_t elemSize) {
return pArray; return pArray;
} }
static void taosArrayResize(SArray* pArray) { static int32_t taosArrayResize(SArray* pArray) {
assert(pArray->size >= pArray->capacity); assert(pArray->size >= pArray->capacity);
size_t size = pArray->capacity; size_t size = pArray->capacity;
size = (size << 1u); size = (size << 1u);
void* tmp = realloc(pArray->pData, size * pArray->elemSize); void* tmp = realloc(pArray->pData, size * pArray->elemSize);
if (tmp == NULL) { if (tmp == NULL) { // reallocate failed, the original buffer remains
// todo return -1;
} }
pArray->pData = tmp; pArray->pData = tmp;
...@@ -59,7 +59,12 @@ void* taosArrayPush(SArray* pArray, void* pData) { ...@@ -59,7 +59,12 @@ void* taosArrayPush(SArray* pArray, void* pData) {
} }
if (pArray->size >= pArray->capacity) { if (pArray->size >= pArray->capacity) {
taosArrayResize(pArray); int32_t ret = taosArrayResize(pArray);
// failed to push data into buffer due to the failure of memory allocation
if (ret != 0) {
return NULL;
}
} }
void* dst = TARRAY_GET_ELEM(pArray, pArray->size); void* dst = TARRAY_GET_ELEM(pArray, pArray->size);
...@@ -82,20 +87,32 @@ void* taosArrayGet(SArray* pArray, size_t index) { ...@@ -82,20 +87,32 @@ void* taosArrayGet(SArray* pArray, size_t index) {
return TARRAY_GET_ELEM(pArray, index); return TARRAY_GET_ELEM(pArray, index);
} }
void* taosArrayGetP(SArray* pArray, size_t index) {
void* ret = taosArrayGet(pArray, index);
if (ret == NULL) {
return NULL;
}
return *(void**)ret;
}
size_t taosArrayGetSize(SArray* pArray) { return pArray->size; } size_t taosArrayGetSize(SArray* pArray) { return pArray->size; }
void taosArrayInsert(SArray* pArray, int32_t index, void* pData) { void* taosArrayInsert(SArray* pArray, size_t index, void* pData) {
if (pArray == NULL || pData == NULL) { if (pArray == NULL || pData == NULL) {
return; return NULL;
} }
if (index >= pArray->size) { if (index >= pArray->size) {
taosArrayPush(pArray, pData); return taosArrayPush(pArray, pData);
return;
} }
if (pArray->size >= pArray->capacity) { if (pArray->size >= pArray->capacity) {
taosArrayResize(pArray); int32_t ret = taosArrayResize(pArray);
if (ret < 0) {
return NULL;
}
} }
void* dst = TARRAY_GET_ELEM(pArray, index); void* dst = TARRAY_GET_ELEM(pArray, index);
...@@ -105,9 +122,11 @@ void taosArrayInsert(SArray* pArray, int32_t index, void* pData) { ...@@ -105,9 +122,11 @@ void taosArrayInsert(SArray* pArray, int32_t index, void* pData) {
memcpy(dst, pData, pArray->elemSize); memcpy(dst, pData, pArray->elemSize);
pArray->size += 1; pArray->size += 1;
return dst;
} }
void taosArrayDestory(SArray* pArray) { void taosArrayDestroy(SArray* pArray) {
if (pArray == NULL) { if (pArray == NULL) {
return; return;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册