obj -get any arg is ok

This commit is contained in:
lyon 2021-09-05 14:35:17 +08:00
parent 4f8ab57dc7
commit 7d0c6c8148
7 changed files with 43 additions and 32 deletions

View File

@ -28,9 +28,9 @@ char *block_getBody(PikaObj *self)
return obj_getStr(self, "body");
}
char *block_setBody(PikaObj *self, char *body)
void block_setBody(PikaObj *self, char *body)
{
return obj_setStr(self, "body", body);
obj_setStr(self, "body", body);
}
uint8_t block_checkAssert(PikaObj *self)

View File

@ -13,5 +13,5 @@ uint8_t block_checkAssert(PikaObj *self);
uint16_t block_getLineSize(PikaObj *self);
void block_setMode(PikaObj *self, char *mode);
char *block_getMode(PikaObj *self);
char *block_setBody(PikaObj *self, char *body);
void block_setBody(PikaObj *self, char *body);
#endif

View File

@ -8,16 +8,12 @@
static int32_t loadArgByType(PikaObj *self,
char *definedName,
char *definedType,
char *argPath,
char *sourceArgPath,
Args *args)
{
if (strEqu(definedType, "any"))
{
if (0 == args_setLiteral(args, definedName, argPath))
{
return 0;
}
if (0 == obj_getRefArg(self, argPath, args))
if (0 == obj_getAnyArg(self, definedName, sourceArgPath, args))
{
return 0;
}
@ -27,7 +23,7 @@ static int32_t loadArgByType(PikaObj *self,
if (strEqu(definedType, "str"))
{
/* solve the string type */
char *directStr = strsGetDirectStr(args, argPath);
char *directStr = strsGetDirectStr(args, sourceArgPath);
if (NULL != directStr)
{
/* direct value */
@ -36,7 +32,7 @@ static int32_t loadArgByType(PikaObj *self,
return 0;
}
/* reference value */
char *refStr = obj_getStr(self, argPath);
char *refStr = obj_getStr(self, sourceArgPath);
if (NULL == refStr)
{
/* faild */
@ -50,20 +46,20 @@ static int32_t loadArgByType(PikaObj *self,
{
/* solve the int32_t type */
args_setInt(args, definedName, 0);
if ((argPath[0] >= '0') && (argPath[0] <= '9'))
if ((sourceArgPath[0] >= '0') && (sourceArgPath[0] <= '9'))
{
/* direct value */
args_set(args, definedName, argPath);
args_set(args, definedName, sourceArgPath);
/* succeed */
return 0;
}
/* reference value */
if (!obj_isArgExist(self, argPath))
if (!obj_isArgExist(self, sourceArgPath))
{
/* can not get reference */
return 3;
}
int32_t referenceVal = obj_getInt(self, argPath);
int32_t referenceVal = obj_getInt(self, sourceArgPath);
args_setInt(args, definedName, referenceVal);
/* succeed */
return 0;
@ -72,20 +68,20 @@ static int32_t loadArgByType(PikaObj *self,
{
/* solve the float type */
args_setFloat(args, definedName, 0);
if ((argPath[0] >= '0') && (argPath[0] <= '9'))
if ((sourceArgPath[0] >= '0') && (sourceArgPath[0] <= '9'))
{
/* direct value */
args_set(args, definedName, argPath);
args_set(args, definedName, sourceArgPath);
/* succeed */
return 0;
}
/* reference value */
if (!obj_isArgExist(self, argPath))
if (!obj_isArgExist(self, sourceArgPath))
{
/* can not get reference */
return 3;
}
float referenceVal = obj_getFloat(self, argPath);
float referenceVal = obj_getFloat(self, sourceArgPath);
args_setFloat(args, definedName, referenceVal);
/* succeed */
return 0;
@ -93,12 +89,12 @@ static int32_t loadArgByType(PikaObj *self,
if (strEqu(definedType, "pointer"))
{
/* only support reference value */
if (!obj_isArgExist(self, argPath))
if (!obj_isArgExist(self, sourceArgPath))
{
/* can not get reference */
return 3;
}
void *ptr = obj_getPtr(self, argPath);
void *ptr = obj_getPtr(self, sourceArgPath);
args_setPtr(args, definedName, ptr);
return 0;
}

View File

@ -534,17 +534,31 @@ char *getRightCmd(Args *buffs, char *cmd)
return right;
}
uint8_t obj_getRefArg(PikaObj *self, char *argPath, Args *targetArgs)
uint8_t obj_getAnyArg(PikaObj *self, char *targetArgName, char *sourceArgPath, Args *targetArgs)
{
if (0 == args_setLiteral(targetArgs, targetArgName, sourceArgPath))
{
return 0;
}
if (0 == obj_getRefArg(self, sourceArgPath, sourceArgPath, targetArgs))
{
return 0;
}
/* solve arg faild */
return 3;
}
uint8_t obj_getRefArg(PikaObj *self, char *targetArgName, char *sourceArgPath, Args *targetArgs)
{
/* get reference arg */
Arg *arg = obj_getArg(self, argPath);
Arg *arg = obj_getArg(self, sourceArgPath);
if (arg == NULL)
{
/* can not get arg */
return 3;
}
Arg *argCopied = arg_copy(arg);
argCopied = arg_setName(argCopied, argPath);
argCopied = arg_setName(argCopied, targetArgName);
args_setArg(targetArgs, argCopied);
return 0;
}

View File

@ -81,6 +81,7 @@ void args_setSysOut(Args *args, char *str);
char *obj_getSysOut(PikaObj *self);
void obj_sysPrintf(PikaObj *self, char *fmt, ...);
PikaObj *obj_getContext(PikaObj *self);
uint8_t obj_getRefArg(PikaObj *self, char *argPath, Args *targetArgs);
uint8_t obj_getRefArg(PikaObj *self, char *targetArgName, char *sourceArgPath, Args *targetArgs);
uint8_t obj_getAnyArg(PikaObj *self, char *targetArgName, char *sourceArgPath, Args *targetArgs);
#endif

View File

@ -384,7 +384,7 @@ exit:
return res;
}
uint8_t args_setLiteral(Args *self, char *name, char *literal)
uint8_t args_setLiteral(Args *self, char *targetArgName, char *literal)
{
Args *buffs = New_strBuff();
literal = strsGetCleanCmd(buffs, literal);
@ -394,7 +394,7 @@ uint8_t args_setLiteral(Args *self, char *name, char *literal)
if (NULL != directStr)
{
/* direct string value */
args_setStr(self, name, directStr);
args_setStr(self, targetArgName, directStr);
/* ok */
err = 0;
goto exit;
@ -405,15 +405,15 @@ uint8_t args_setLiteral(Args *self, char *name, char *literal)
/* match float num */
if (strIsContain(literal, '.'))
{
args_setFloat(self, name, 0);
args_set(self, name, literal);
args_setFloat(self, targetArgName, 0);
args_set(self, targetArgName, literal);
/* succeed */
err = 0;
goto exit;
}
/* match int num */
args_setInt(self, name, 0);
args_set(self, name, literal);
args_setInt(self, targetArgName, 0);
args_set(self, targetArgName, literal);
/* succeed */
err = 0;
goto exit;

View File

@ -52,7 +52,7 @@ int32_t args_setPtrWithType(Args *self, char *objName, char *type, void *objPtr)
int32_t args_foreach (Args *self,int32_t (*eachHandle)(Arg *argEach, Args *handleArgs), Args * handleArgs);
char *args_getBuff(Args *self,int32_t size);
uint8_t args_setLiteral(Args *self, char *argPath, char *literal);
uint8_t args_setLiteral(Args *self, char *targetArgName, char *literal);
Args *New_args(Args *args);
#endif