wow-byte-array数组操作说明

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值