From 69893640a355baa906716f8027c6ce37466d1b62 Mon Sep 17 00:00:00 2001 From: Martin Preuss Date: Fri, 17 May 2024 20:34:31 +0200 Subject: [PATCH] aqhome: added function AQH_Vars_ReplaceVars() --- aqhome/data/vars.c | 47 ++++++++++++++++++++++++++++++++++++++++++++++ aqhome/data/vars.h | 4 ++++ 2 files changed, 51 insertions(+) diff --git a/aqhome/data/vars.c b/aqhome/data/vars.c index 033fe90..175885c 100644 --- a/aqhome/data/vars.c +++ b/aqhome/data/vars.c @@ -18,6 +18,7 @@ #include #include #include +#include @@ -37,6 +38,7 @@ static AQH_VARS *_getPath(AQH_VARS *vt, const char *s, uint32_t flags); static void *_pathHandlerFn(const char *entry, void *data, int idx, uint32_t flags); static AQH_VARS *_getNodeByTypeAndName(const AQH_VARS *vt, AQH_VARS_DATATYPE dt, const char *name, int idx); static void _dumpElement(const AQH_VARS *vt, int indent, GWEN_BUFFER *dbuf); +static int GWENHYWFAR_CB _replaceVarsCb(void *cbPtr, const char *name, int index, int maxLen, GWEN_BUFFER *dstBuf); @@ -631,6 +633,51 @@ void _dumpElement(const AQH_VARS *vt, int indent, GWEN_BUFFER *dbuf) +int AQH_Vars_ReplaceVars(AQH_VARS *vars, const char *s, GWEN_BUFFER *dbuf) +{ + int rv; + + rv=GWEN_Text_ReplaceVars(s, dbuf, _replaceVarsCb, vars); + if (rv<0) { + DBG_INFO(AQH_LOGDOMAIN, "here (%d)", rv); + return rv; + } + return 0; +} + + + +int GWENHYWFAR_CB _replaceVarsCb(void *cbPtr, const char *name, int index, GWEN_UNUSED int maxLen, GWEN_BUFFER *dstBuf) +{ + AQH_VARS *vars; + AQH_VARS *vtVariable; + + vars=(AQH_VARS*) cbPtr; + vtVariable=_getPath(vars, name, AQH_PATH_FLAGS_PATHMUSTEXIST | AQH_PATH_FLAGS_VARIABLE); + if (vtVariable) { + AQH_VARS *vtValue; + + vtValue=_getValueNodeByIdx(vtVariable, index); + if (vtValue) { + switch(vtValue->dataType) { + case AQH_Vars_DataType_ValueString: GWEN_Buffer_AppendArgs(dstBuf, "%s", vtValue->data.dataString); return 0; + case AQH_Vars_DataType_ValueInt: GWEN_Buffer_AppendArgs(dstBuf, "%d", vtValue->data.dataInt); return 0; + case AQH_Vars_DataType_ValueDouble: GWEN_Buffer_AppendArgs(dstBuf, "%f", vtValue->data.dataDouble); return 0; + case AQH_Vars_DataType_Unknown: + case AQH_Vars_DataType_Group: + case AQH_Vars_DataType_Variable: + break; + } + DBG_ERROR(AQH_LOGDOMAIN, "Unexpected data type \"%d\" (%s)", vtValue->dataType, AQH_Vars_DataTypeToString(vtValue->dataType)); + return GWEN_ERROR_INVALID; + } + } + + return 0; +} + + + #include "./vars-t.c" diff --git a/aqhome/data/vars.h b/aqhome/data/vars.h index 67b1fa1..4ba73f1 100644 --- a/aqhome/data/vars.h +++ b/aqhome/data/vars.h @@ -12,6 +12,7 @@ #include #include +#include #define AQH_VARS_PATHFLAGS_OVERWRITE_VARS 0x0001 @@ -82,6 +83,9 @@ AQHOME_API int AQH_Vars_GetIntValue(AQH_VARS *vt, const char *path, int idx, int AQHOME_API int AQH_Vars_SetDoubleValue(AQH_VARS *vt, uint32_t flags, const char *path, double value); AQHOME_API double AQH_Vars_GetDoubleValue(AQH_VARS *vt, const char *path, int idx, double defaultValue); + +AQHOME_API int AQH_Vars_ReplaceVars(AQH_VARS *vars, const char *s, GWEN_BUFFER *dbuf); + /*@}*/