wow-byte-array文件说明
- 项目地址:https://gitee.com/wow-iot/wow-iot7
- 本文件的的功能实现类似于QByteArray类,用于处理数组类相关操作,主要涉及数组类的创建、删除、增添、移除、截断、查找、替换等操作;
- 注:动态数组内部默认分配字节大小为128;当添加内容导致内部长度不够时,则分配当前容量*2个字节以供存储;
数组类创建与删除
ByteArray_T* wow_byte_array_new(void)
{
ByteArray_T* array = CALLOC(1, ByteArray_T);
CHECK_RET_VAL_ERRNO_P(array,SYSTEM_MALLOC_FAILED,"malloc ByteArray_T failed!\n");
memset(array,0,sizeof(ByteArray_T));
array->size = 0;
array->capicity = DEFALUT_BYTE_ARRAY_SZIE;
array->data = MALLOC(DEFALUT_BYTE_ARRAY_SZIE);
CHECK_RET_GOTO_ERRNO_P(array->data,out,SYSTEM_MALLOC_FAILED,"malloc size(%d) failed!\n",DEFALUT_BYTE_ARRAY_SZIE);
memset(array->data,0,DEFALUT_BYTE_ARRAY_SZIE);
return array;
out:
FREE(array);
return NULL;
}
void wow_byte_array_free(ByteArray_T** pptArray)
{
CHECK_RET_VOID(pptArray && *pptArray);
ByteArray_T* array = (ByteArray_T*)*pptArray;
if(array->data){
FREE(array->data);
}
array->data = NULL;
FREE(array);
*pptArray = NULL;
}
数组类追加字段
int wow_byte_array_append_data(ByteArray_T* ptArray, uint8_t u8Value)
{
CHECK_RET_VAL_P(ptArray,-PARAM_INPUT_STRUCT_IS_NULL,"param input struct invalid!\n");
if(ptArray->size >= ptArray->capicity) {
byte_array_resize(ptArray,ptArray->size*2);
}
ptArray->data[ptArray->size++] = u8Value;
return WOW_SUCCESS;
}
int wow_byte_array_append_ndata(ByteArray_T* ptArray, uint8_t* u8Value,uint8_t snLen)
{
CHECK_RET_VAL_P(ptArray,-PARAM_INPUT_STRUCT_IS_NULL,"param input struct invalid!\n");
CHECK_RET_VAL_P(u8Value,-PARAM_INPUT_DATA_IS_NULL,"param input data invalid!\n");
if(ptArray->size + snLen >= ptArray->capicity) {
size_t nsize = (ptArray->size + snLen > (ptArray->size)*2)?ptArray->size + snLen:(ptArray->size)*2;
byte_array_resize(ptArray,nsize);
}
memcpy(&ptArray->data[ptArray->size],u8Value,snLen);
ptArray->size += snLen;
return WOW_SUCCESS;
}
int wow_byte_array_append_array(ByteArray_T* ptArray, ByteArray_T* ptToadd)
{
CHECK_RET_VAL_P(ptArray && ptToadd ,-PARAM_INPUT_STRUCT_IS_NULL,"param input struct invalid!\n");
if(ptToadd->size >= ptArray->capicity - ptArray->size) {
byte_array_resize(ptArray,ptToadd->size*2);
}
memcpy(&ptArray->data[ptArray->size],ptToadd->data,ptToadd->size);
return WOW_SUCCESS;
}
数组类截取字段
int wow_byte_array_left(ByteArray_T* ptArray,size_t snLen)
{
CHECK_RET_VAL_P(ptArray,-PARAM_INPUT_STRUCT_IS_NULL,"param input struct invalid!\n");
CHECK_RET_VAL_P(ptArray->size > snLen,-PARAM_INPUT_ARG_INVALID,"param input arg invalid!\n");
memset(&ptArray->data[snLen],0,ptArray->size - snLen);
ptArray->size = snLen;
return WOW_SUCCESS;
}
int wow_byte_array_right(ByteArray_T* ptArray,size_t snLen)
{
CHECK_RET_VAL_P(ptArray,-PARAM_INPUT_STRUCT_IS_NULL,"param input struct invalid!\n");
CHECK_RET_VAL_P(ptArray->size > snLen,-PARAM_INPUT_ARG_INVALID,"param input arg invalid!\n");
memmove(ptArray->data,&ptArray->data[ptArray->size - snLen],snLen);
memset(&ptArray->data[snLen],0,ptArray->size - snLen);
ptArray->size = snLen;
return WOW_SUCCESS;
}
int wow_byte_array_mid(ByteArray_T* ptArray,size_t snIdx, size_t snLen)
{
CHECK_RET_VAL_P(ptArray,-PARAM_INPUT_STRUCT_IS_NULL,"param input struct invalid!\n");
CHECK_RET_VAL_P(snIdx < ptArray->size,-PARAM_INPUT_ARG_INVALID,"param input arg invalid!\n");
if(ptArray->size > (snLen +snIdx)){
memmove(ptArray->data,&ptArray->data[snIdx],ptArray->size - snLen);
memset(&ptArray->data[snLen],0,ptArray->size - snLen);
ptArray->size = snLen;
}else{
memmove(ptArray->data,&ptArray->data[snIdx],ptArray->size-snIdx);
memset(&ptArray->data[snLen],0,ptArray->size-snIdx);
ptArray->size = ptArray->size-snIdx;
}
return WOW_SUCCESS;
}
数组类字段查找
int wow_byte_array_find(ByteArray_T* ptArray,uint8_t u8Value)
{
int i = 0;
CHECK_RET_VAL_P(ptArray,-PARAM_INPUT_STRUCT_IS_NULL,"param input struct invalid!\n");
for ( i = 0; i < ptArray->size; i++ ) {
if (u8Value == ptArray->data[i]) {
return i;
}
}
return -BYTE_ARRAY_NOT_FIND;
}
数组类字段替换
int wow_byte_array_replace(ByteArray_T* ptArray,uint8_t u8Obj,uint8_t u8Value)
{
int i = 0;
CHECK_RET_VAL_P(ptArray,-PARAM_INPUT_STRUCT_IS_NULL,"param input struct invalid!\n");
for ( i = 0; i < ptArray->size; i++ ) {
if (u8Obj == ptArray->data[i]) {
ptArray->data[i] = u8Value;
}
}
return WOW_SUCCESS;
}
数组类字段删除
int wow_byte_array_remove(ByteArray_T* ptArray, size_t snIdx ,size_t snLen)
{
CHECK_RET_VAL_P(ptArray,-PARAM_INPUT_STRUCT_IS_NULL,"param input struct invalid!\n");
CHECK_RET_VAL_P(snIdx < ptArray->size,-PARAM_INPUT_ARG_INVALID,"param input arg invalid!\n");
if(ptArray->size > (snLen +snIdx)){
memmove(ptArray->data,&ptArray->data[snIdx+snLen],ptArray->size - snLen);
memset(&ptArray->data[ptArray->size - snLen],0,snLen);
ptArray->size = ptArray->size - snLen;
}else{
memset(&ptArray->data[snIdx],0,ptArray->size-snIdx);
ptArray->size = snIdx;
}
return WOW_SUCCESS;
}