add ARG_TYPE_MEM

This commit is contained in:
lyon1998 2022-04-18 12:11:33 +08:00
parent f23dac8a8a
commit a2dd87c8a8
4 changed files with 15 additions and 6 deletions

View File

@ -225,11 +225,13 @@ TEST(object_test, obj_mem) {
obj_setMem(obj, (char*)"mem", mem_test, sizeof(mem_test));
size_t mem_size = obj_getMemSize(obj, (char*)"mem");
char* mem_test_out = (char*)obj_getMem(obj, (char*)"mem");
ArgType arg_type = arg_getType(obj_getArg(obj, (char*)"mem"));
EXPECT_EQ(mem_size, sizeof(mem_test));
EXPECT_EQ(mem_test_out[0], 0x33);
EXPECT_EQ(mem_test_out[1], 0x55);
EXPECT_EQ(mem_test_out[2], 0x00);
EXPECT_EQ(mem_test_out[3], 0x15);
EXPECT_EQ(arg_type, ARG_TYPE_MEM);
obj_deinit(obj);
}

View File

@ -143,6 +143,16 @@ ArgType content_getType(uint8_t* self) {
return (ArgType)arg->type;
}
Arg* arg_setMem(Arg* self, char* name, void* src, size_t size) {
self = arg_newContent(self, size + sizeof(size_t));
self = arg_setName(self, name);
self = arg_setType(self, ARG_TYPE_MEM);
void* dir = arg_getContent(self);
__platform_memcpy(dir, &size, sizeof(size_t));
__platform_memcpy(dir + sizeof(size_t), src, size);
return self;
}
Arg* arg_newContent(Arg* self, uint32_t size) {
uint8_t* newContent = content_init("", ARG_TYPE_VOID, NULL, size, NULL);
arg_freeContent(self);

View File

@ -35,6 +35,7 @@ typedef enum {
ARG_TYPE_UNDEF = 0,
ARG_TYPE_NONE,
ARG_TYPE_VOID,
ARG_TYPE_MEM,
ARG_TYPE_NULL,
ARG_TYPE_INT,
ARG_TYPE_FLOAT,
@ -135,5 +136,6 @@ Arg* arg_setHeapStruct(Arg* self,
void* struct_deinit_fun);
void* arg_getHeapStruct(Arg* self);
void arg_deinitHeap(Arg* self);
Arg* arg_setMem(Arg* self, char* name, void* src, size_t size);
#endif

View File

@ -81,12 +81,7 @@ int args_pushArg(Args* self, Arg* arg) {
}
void args_setMem(Args* self, char* name, void* src, size_t size) {
Arg* argNew = New_arg(NULL);
argNew = arg_newContent(argNew, size + sizeof(size_t));
argNew = arg_setName(argNew, name);
void* dir = arg_getContent(argNew);
__platform_memcpy(dir, &size, sizeof(size_t));
__platform_memcpy(dir + sizeof(size_t), src, size);
Arg* argNew = arg_setMem(NULL, name, src, size);
args_pushArg(self, argNew);
}