18#include <gwenhywfar/debug.h>
19#include <gwenhywfar/misc.h>
40 ty->headers=Typemaker2_Header_List_new();
41 ty->enums=Typemaker2_Enum_List_new();
42 ty->defines=Typemaker2_Define_List_new();
43 ty->codeDefs=Typemaker2_Code_List_new();
44 ty->inlines=Typemaker2_Inline_List_new();
45 ty->virtualFns=Typemaker2_VirtualFn_List_new();
46 ty->signals=Typemaker2_Signal_List_new();
47 ty->slots=Typemaker2_Slot_List_new();
55 ty->members=Typemaker2_Member_List_new();
57 ty->groupTree=Typemaker2_Group_Tree_new();
69 if (ty->refCount==1) {
78 free(ty->defaultValue);
79 free(ty->presetValue);
82 free(ty->baseFileName);
88 Typemaker2_Header_List_free(ty->headers);
89 Typemaker2_Enum_List_free(ty->enums);
90 Typemaker2_Define_List_free(ty->defines);
91 Typemaker2_Code_List_free(ty->codeDefs);
92 Typemaker2_Inline_List_free(ty->inlines);
93 Typemaker2_VirtualFn_List_free(ty->virtualFns);
94 Typemaker2_Signal_List_free(ty->signals);
95 Typemaker2_Slot_List_free(ty->slots);
103 Typemaker2_Member_List_free(ty->members);
104 Typemaker2_Group_Tree_free(ty->groupTree);
106 free(ty->fieldCountId);
121 assert(ty->refCount);
130 assert(ty->refCount);
139 assert(ty->refCount);
152 assert(ty->refCount);
161 assert(ty->refCount);
174 assert(ty->refCount);
189 assert(ty->refCount);
198 assert(ty->refCount);
200 if (ty->aqdb_type==
NULL && ty->extendsPtr)
203 return ty->aqdb_type;
211 assert(ty->refCount);
214 ty->aqdb_type=strdup(s);
224 assert(ty->refCount);
226 return ty->baseFileName;
234 assert(ty->refCount);
235 free(ty->baseFileName);
237 ty->baseFileName=strdup(s);
239 ty->baseFileName=
NULL;
247 assert(ty->refCount);
257 assert(ty->refCount);
260 ty->freeHook=strdup(s);
270 assert(ty->refCount);
279 assert(ty->refCount);
282 ty->extends=strdup(s);
292 assert(ty->refCount);
294 if (ty->baseType==
NULL && ty->extendsPtr)
305 assert(ty->refCount);
308 ty->baseType=strdup(s);
318 assert(ty->refCount);
320 if (ty->inherits==
NULL && ty->extendsPtr)
331 assert(ty->refCount);
334 ty->inherits=strdup(s);
344 assert(ty->refCount);
346 if (ty->flags==0 && ty->extendsPtr)
357 assert(ty->refCount);
366 assert(ty->refCount);
368 if (ty->setFlags==0 && ty->extendsPtr)
379 assert(ty->refCount);
388 assert(ty->refCount);
390 if (ty->getFlags==0 && ty->extendsPtr)
401 assert(ty->refCount);
410 assert(ty->refCount);
412 if (ty->dupFlags==0 && ty->extendsPtr)
423 assert(ty->refCount);
432 assert(ty->refCount);
434 if (ty->copyFlags==0 && ty->extendsPtr)
437 return ty->copyFlags;
445 assert(ty->refCount);
454 assert(ty->refCount);
467 assert(ty->refCount);
476 assert(ty->refCount);
477 return ty->usePrivateConstructor;
485 assert(ty->refCount);
486 ty->usePrivateConstructor=i;
494 assert(ty->refCount);
496 if (ty->defaultValue==
NULL && ty->extendsPtr)
499 return ty->defaultValue;
507 assert(ty->refCount);
508 free(ty->defaultValue);
510 ty->defaultValue=strdup(s);
512 ty->defaultValue=
NULL;
520 assert(ty->refCount);
522 if (ty->presetValue==
NULL && ty->extendsPtr)
525 return ty->presetValue;
533 assert(ty->refCount);
534 free(ty->presetValue);
536 ty->presetValue=strdup(s);
538 ty->presetValue=
NULL;
546 assert(ty->refCount);
547 return ty->identifier;
555 assert(ty->refCount);
556 free(ty->identifier);
558 ty->identifier=strdup(s);
568 assert(ty->refCount);
577 assert(ty->refCount);
580 ty->prefix=strdup(s);
590 assert(ty->refCount);
591 return ty->extendsPtr;
599 assert(ty->refCount);
608 assert(ty->refCount);
609 return ty->inheritsPtr;
617 assert(ty->refCount);
626 assert(ty->refCount);
627 return ty->baseTypePtr;
635 assert(ty->refCount);
644 assert(ty->refCount);
653 assert(ty->refCount);
662 assert(ty->refCount);
671 assert(ty->refCount);
680 assert(ty->refCount);
689 assert(ty->refCount);
698 assert(ty->refCount);
699 return ty->virtualFns;
707 assert(ty->refCount);
716 assert(ty->refCount);
725 assert(ty->refCount);
726 return ty->groupTree;
734 assert(ty->refCount);
735 return ty->nonVolatileMemberCount;
743 assert(ty->refCount);
744 ty->nonVolatileMemberCount=i;
752 assert(ty->refCount);
753 return ty->fieldCountId;
761 assert(ty->refCount);
762 free(ty->fieldCountId);
764 ty->fieldCountId=strdup(s);
766 ty->fieldCountId=
NULL;
773 const char *wantedLang)
785 if (strcasecmp(s,
"member")==0) {
799 Typemaker2_Member_List_Add(tm, ty->members);
801 else if (strcasecmp(s,
"group")==0) {
813 Typemaker2_Group_Tree_AddChild(parentGroup, group);
842 if (strcasecmp(s,
"opaque")==0)
844 else if (strcasecmp(s,
"pointer")==0)
846 else if (strcasecmp(s,
"array")==0)
907 Typemaker2_Header_List_Add(th, ty->headers);
930 Typemaker2_Group_Tree_Clear(ty->groupTree);
935 Typemaker2_Group_Tree_Add(ty->groupTree, rootGroup);
971 Typemaker2_Code_List_Add(tc, ty->codeDefs);
986 Typemaker2_Inline_List_Add(ti, ty->inlines);
1013 Typemaker2_Enum_List_Add(te, ty->enums);
1040 Typemaker2_Define_List_Add(td, ty->defines);
1062 Typemaker2_VirtualFn_List_Add(vf, ty->virtualFns);
1102 while (nnnn && i<3) {
1114 Typemaker2_Signal_List_Add(sig, ty->signals);
1156 while (nnnn && i<3) {
1168 Typemaker2_Slot_List_Add(slot, ty->slots);
1234 const char *s1, *s2;
1236 for (i=0; i<indent; i++)
1238 fprintf(f,
"Type\n");
1240 for (i=0; i<indent+2; i++)
1242 fprintf(f,
"Name : %s\n", (ty->name)?(ty->name):
"<null>");
1244 for (i=0; i<indent+2; i++)
1246 fprintf(f,
"Identifier: %s\n", (ty->identifier)?(ty->identifier):
"<null>");
1248 for (i=0; i<indent+2; i++)
1250 fprintf(f,
"AEDB Type : %s\n", (ty->aqdb_type)?(ty->aqdb_type):
"<null>");
1252 for (i=0; i<indent+2; i++)
1254 fprintf(f,
"Extends : %s\n", (ty->extends)?(ty->extends):
"<null>");
1256 for (i=0; i<indent+2; i++)
1260 fprintf(f,
"Inherits : %s [%s]\n", s1?s1:
"<null>", s2?s2:
"<null>");
1262 for (i=0; i<indent+2; i++)
1264 fprintf(f,
"BaseType : %s\n", (ty->baseType)?(ty->baseType):
"<null>");
1266 for (i=0; i<indent+2; i++)
1268 fprintf(f,
"Prefix : %s\n", (ty->prefix)?(ty->prefix):
"<null>");
1270 for (i=0; i<indent+2; i++)
1274 for (i=0; i<indent+2; i++)
1278 for (i=0; i<indent+2; i++)
1282 for (i=0; i<indent+2; i++)
1286 for (i=0; i<indent+2; i++)
1290 for (i=0; i<indent+2; i++)
1294 for (i=0; i<indent+2; i++)
1296 s1=ty->defaultValue;
1298 fprintf(f,
"Default : %s [%s]\n", s1?s1:
"<null>", s2?s2:
"<null>");
1300 for (i=0; i<indent+2; i++)
1304 fprintf(f,
"Preset : %s [%s]\n", s1?s1:
"<null>", s2?s2:
"<null>");
1306 for (i=0; i<indent+2; i++)
1308 fprintf(f,
"Members\n");
1309 tm=Typemaker2_Member_List_First(ty->members);
1311 for (i=0; i<indent+4; i++)
1313 fprintf(f,
"none\n");
1318 tm=Typemaker2_Member_List_Next(tm);
1321 for (i=0; i<indent+2; i++)
1323 fprintf(f,
"Field Count Id: %s\n", (ty->fieldCountId)?(ty->fieldCountId):
"<null>");
1325 for (i=0; i<indent+2; i++)
1327 fprintf(f,
"Descript. : %s\n", (ty->descr)?(ty->descr):
"<null>");
1339 te=Typemaker2_Enum_List_First(ty->enums);
1344 if (n && strcasecmp(s, n)==0)
1346 te=Typemaker2_Enum_List_Next(te);
1371 if (s && strcasecmp(s,
id)==0) {
1375 tc=Typemaker2_Code_List_Next(tc);
1380 tc=Typemaker2_Code_List_First(ty->codeDefs);
1385 if (s && strcasecmp(s,
id)==0) {
1389 tc=Typemaker2_Code_List_Next(tc);
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
#define DBG_INFO(dbg_logger, format, args...)
#define DBG_ERROR(dbg_logger, format, args...)
#define GWEN_ERROR_INVALID
#define GWEN_ERROR_BAD_DATA
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
#define GWEN_LIST_FINI(t, element)
#define GWEN_LIST_FUNCTIONS(t, pr)
#define GWEN_LIST_INIT(t, element)
#define GWEN_LIST2_FUNCTIONS(t, pr)
#define GWEN_FREE_OBJECT(varname)
#define GWEN_NEW_OBJECT(typ, varname)
void GWEN_StringList_free(GWEN_STRINGLIST *sl)
GWEN_STRINGLIST * GWEN_StringList_new(void)
uint32_t Typemaker2_Code_GetMemberFlagsValueInt(const TYPEMAKER2_CODE *p_struct)
void Typemaker2_Code_SetMemberFlagsMaskInt(TYPEMAKER2_CODE *p_struct, uint32_t p_src)
uint32_t Typemaker2_Code_GetMemberFlagsMaskInt(const TYPEMAKER2_CODE *p_struct)
const char * Typemaker2_Code_GetMemberFlagsMask(const TYPEMAKER2_CODE *p_struct)
TYPEMAKER2_CODE * Typemaker2_Code_fromXml(GWEN_XMLNODE *p_db)
const char * Typemaker2_Code_GetId(const TYPEMAKER2_CODE *p_struct)
const char * Typemaker2_Code_GetMemberFlagsValue(const TYPEMAKER2_CODE *p_struct)
void Typemaker2_Code_SetMemberFlagsValueInt(TYPEMAKER2_CODE *p_struct, uint32_t p_src)
struct TYPEMAKER2_CODE TYPEMAKER2_CODE
TYPEMAKER2_DEFINE * Typemaker2_Define_fromXml(GWEN_XMLNODE *p_db)
TYPEMAKER2_ITEM_LIST * Typemaker2_Define_GetItems(const TYPEMAKER2_DEFINE *p_struct)
struct TYPEMAKER2_DEFINE TYPEMAKER2_DEFINE
TYPEMAKER2_ENUM * Typemaker2_Enum_fromXml(GWEN_XMLNODE *p_db)
TYPEMAKER2_ITEM_LIST * Typemaker2_Enum_GetItems(const TYPEMAKER2_ENUM *p_struct)
const char * Typemaker2_Enum_GetId(const TYPEMAKER2_ENUM *p_struct)
struct TYPEMAKER2_ENUM TYPEMAKER2_ENUM
void Typemaker2_Group_free(TYPEMAKER2_GROUP *gr)
int Typemaker2_Group_readXml(TYPEMAKER2_GROUP *gr, GWEN_XMLNODE *node, GWEN_UNUSED const char *wantedLang)
void Typemaker2_Group_SetTitle(TYPEMAKER2_GROUP *gr, const char *s)
TYPEMAKER2_GROUP * Typemaker2_Group_new()
void Typemaker2_Group_SetDescription(TYPEMAKER2_GROUP *gr, const char *s)
struct TYPEMAKER2_GROUP TYPEMAKER2_GROUP
TYPEMAKER2_INLINE * Typemaker2_Inline_fromXml(GWEN_XMLNODE *node)
struct TYPEMAKER2_INLINE TYPEMAKER2_INLINE
TYPEMAKER2_ITEM * Typemaker2_Item_fromXml(GWEN_XMLNODE *p_db)
struct TYPEMAKER2_ITEM TYPEMAKER2_ITEM
int Typemaker2_Member_readXml(TYPEMAKER2_MEMBER *tm, GWEN_XMLNODE *node, const char *wantedLang)
void Typemaker2_Member_Dump(TYPEMAKER2_MEMBER *tm, FILE *f, int indent)
TYPEMAKER2_MEMBER * Typemaker2_Member_new()
void Typemaker2_Member_free(TYPEMAKER2_MEMBER *tm)
uint32_t Typemaker2_Member_GetFlags(const TYPEMAKER2_MEMBER *tm)
TYPEMAKER2_CODE_LIST * Typemaker2_Member_GetCodeDefs(const TYPEMAKER2_MEMBER *tm)
void Typemaker2_Member_SetGroupPtr(TYPEMAKER2_MEMBER *tm, TYPEMAKER2_GROUP *gr)
struct TYPEMAKER2_MEMBER TYPEMAKER2_MEMBER
void Typemaker2_Signal_SetParamType2(TYPEMAKER2_SIGNAL *p_struct, const char *p_src)
void Typemaker2_Signal_SetName(TYPEMAKER2_SIGNAL *p_struct, const char *p_src)
void Typemaker2_Signal_AddFlags(TYPEMAKER2_SIGNAL *p_struct, uint32_t p_src)
TYPEMAKER2_SIGNAL * Typemaker2_Signal_new(void)
void Typemaker2_Signal_SetParamType1(TYPEMAKER2_SIGNAL *p_struct, const char *p_src)
#define TYPEMAKER2_SIGNAL_FLAGS_USE_PARAM4
#define TYPEMAKER2_SIGNAL_FLAGS_USE_PARAM3
struct TYPEMAKER2_SIGNAL TYPEMAKER2_SIGNAL
void Typemaker2_Slot_SetName(TYPEMAKER2_SLOT *p_struct, const char *p_src)
void Typemaker2_Slot_AddFlags(TYPEMAKER2_SLOT *p_struct, uint32_t p_src)
void Typemaker2_Slot_SetParamType2(TYPEMAKER2_SLOT *p_struct, const char *p_src)
TYPEMAKER2_SLOT * Typemaker2_Slot_new(void)
void Typemaker2_Slot_SetParamType1(TYPEMAKER2_SLOT *p_struct, const char *p_src)
struct TYPEMAKER2_SLOT TYPEMAKER2_SLOT
#define TYPEMAKER2_SLOT_FLAGS_USE_PARAM4
#define TYPEMAKER2_SLOT_FLAGS_USE_PARAM3
TYPEMAKER2_CODE_LIST * Typemaker2_Type_GetCodeDefs(const TYPEMAKER2_TYPE *ty)
TYPEMAKER2_DEFINE_LIST * Typemaker2_Type_GetDefines(const TYPEMAKER2_TYPE *ty)
void Typemaker2_Type_SetCopyFlags(TYPEMAKER2_TYPE *ty, uint32_t i)
uint32_t Typemaker2_Type_GetSetFlags(const TYPEMAKER2_TYPE *ty)
void Typemaker2_Type_SetDupFlags(TYPEMAKER2_TYPE *ty, uint32_t i)
TYPEMAKER2_ENUM * Typemaker2_Type_FindEnum(TYPEMAKER2_TYPE *ty, const char *s)
int Typemaker2_Type_GetType(const TYPEMAKER2_TYPE *ty)
void Typemaker2_Type_SetAqDbType(TYPEMAKER2_TYPE *ty, const char *s)
uint32_t Typemaker2_Type_GetCopyFlags(const TYPEMAKER2_TYPE *ty)
void Typemaker2_Type_SetType(TYPEMAKER2_TYPE *ty, int i)
const char * Typemaker2_Type_GetFieldCountId(const TYPEMAKER2_TYPE *ty)
void Typemaker2_Type_SetFreeHook(TYPEMAKER2_TYPE *ty, const char *s)
TYPEMAKER2_TYPE * Typemaker2_Type_GetInheritsPtr(const TYPEMAKER2_TYPE *ty)
const char * Typemaker2_Type_GetDescription(const TYPEMAKER2_TYPE *ty)
TYPEMAKER2_HEADER_LIST * Typemaker2_Type_GetHeaders(const TYPEMAKER2_TYPE *ty)
const char * Typemaker2_Type_GetIdentifier(const TYPEMAKER2_TYPE *ty)
void Typemaker2_Type_SetUsePrivateConstructor(TYPEMAKER2_TYPE *ty, int i)
int Typemaker2_Type_GetAccess(const TYPEMAKER2_TYPE *ty)
void Typemaker2_Type_SetIdentifier(TYPEMAKER2_TYPE *ty, const char *s)
void Typemaker2_Type_SetInheritsPtr(TYPEMAKER2_TYPE *ty, TYPEMAKER2_TYPE *p)
void Typemaker2_Type_SetFlags(TYPEMAKER2_TYPE *ty, uint32_t i)
TYPEMAKER2_SLOT_LIST * Typemaker2_Type_GetSlots(const TYPEMAKER2_TYPE *ty)
void Typemaker2_Type_Dump(TYPEMAKER2_TYPE *ty, FILE *f, int indent)
TYPEMAKER2_VIRTUALFN_LIST * Typemaker2_Type_GetVirtualFns(const TYPEMAKER2_TYPE *ty)
const char * Typemaker2_Type_GetPresetValue(const TYPEMAKER2_TYPE *ty)
void Typemaker2_Type_SetSetFlags(TYPEMAKER2_TYPE *ty, uint32_t i)
void Typemaker2_Type_SetName(TYPEMAKER2_TYPE *ty, const char *s)
uint32_t Typemaker2_Type_GetFlags(const TYPEMAKER2_TYPE *ty)
int Typemaker2_Type_readMembersAndGroupsXml(TYPEMAKER2_TYPE *ty, GWEN_XMLNODE *node, TYPEMAKER2_GROUP *parentGroup, const char *wantedLang)
void Typemaker2_Type_SetPrefix(TYPEMAKER2_TYPE *ty, const char *s)
const char * Typemaker2_Type_GetExtends(const TYPEMAKER2_TYPE *ty)
void Typemaker2_Type_Attach(TYPEMAKER2_TYPE *ty)
const char * Typemaker2_Type_GetFreeHook(const TYPEMAKER2_TYPE *ty)
TYPEMAKER2_TYPE * Typemaker2_Type_GetBaseTypePtr(const TYPEMAKER2_TYPE *ty)
void Typemaker2_Type_free(TYPEMAKER2_TYPE *ty)
void Typemaker2_Type_SetBaseFileName(TYPEMAKER2_TYPE *ty, const char *s)
const char * Typemaker2_Type_GetBaseFileName(const TYPEMAKER2_TYPE *ty)
void Typemaker2_Type_SetDefaultValue(TYPEMAKER2_TYPE *ty, const char *s)
void Typemaker2_Type_SetGetFlags(TYPEMAKER2_TYPE *ty, uint32_t i)
uint32_t Typemaker2_Type_GetGetFlags(const TYPEMAKER2_TYPE *ty)
TYPEMAKER2_ENUM_LIST * Typemaker2_Type_GetEnums(const TYPEMAKER2_TYPE *ty)
const char * Typemaker2_Type_GetName(const TYPEMAKER2_TYPE *ty)
TYPEMAKER2_INLINE_LIST * Typemaker2_Type_GetInlines(const TYPEMAKER2_TYPE *ty)
int Typemaker2_Type_GetNonVolatileMemberCount(const TYPEMAKER2_TYPE *ty)
const char * Typemaker2_Type_GetPrefix(const TYPEMAKER2_TYPE *ty)
void Typemaker2_Type_SetAccess(TYPEMAKER2_TYPE *ty, int i)
const char * Typemaker2_Type_GetAqDbType(const TYPEMAKER2_TYPE *ty)
void Typemaker2_Type_SetBaseTypePtr(TYPEMAKER2_TYPE *ty, TYPEMAKER2_TYPE *p)
void Typemaker2_Type_SetPresetValue(TYPEMAKER2_TYPE *ty, const char *s)
TYPEMAKER2_TYPE * Typemaker2_Type_GetExtendsPtr(const TYPEMAKER2_TYPE *ty)
TYPEMAKER2_MEMBER_LIST * Typemaker2_Type_GetMembers(const TYPEMAKER2_TYPE *ty)
const char * Typemaker2_Type_GetBaseType(const TYPEMAKER2_TYPE *ty)
void Typemaker2_Type_SetInherits(TYPEMAKER2_TYPE *ty, const char *s)
const char * Typemaker2_Type_GetInherits(const TYPEMAKER2_TYPE *ty)
TYPEMAKER2_GROUP_TREE * Typemaker2_Type_GetGroupTree(const TYPEMAKER2_TYPE *ty)
const char * Typemaker2_Type_GetDefaultValue(const TYPEMAKER2_TYPE *ty)
void Typemaker2_Type_SetBaseType(TYPEMAKER2_TYPE *ty, const char *s)
void Typemaker2_Type_SetExtends(TYPEMAKER2_TYPE *ty, const char *s)
void Typemaker2_Type_SetExtendsPtr(TYPEMAKER2_TYPE *ty, TYPEMAKER2_TYPE *p)
void Typemaker2_Type_SetDescription(TYPEMAKER2_TYPE *ty, const char *s)
int Typemaker2_Type_GetUsePrivateConstructor(const TYPEMAKER2_TYPE *ty)
TYPEMAKER2_CODE * Typemaker2_Type_FindCodeForMember(const TYPEMAKER2_TYPE *ty, const TYPEMAKER2_MEMBER *tm, const char *id)
void Typemaker2_Type_SetNonVolatileMemberCount(TYPEMAKER2_TYPE *ty, int i)
TYPEMAKER2_TYPE * Typemaker2_Type_new()
int Typemaker2_Type_readXml(TYPEMAKER2_TYPE *ty, GWEN_XMLNODE *node, const char *wantedLang)
uint32_t Typemaker2_Type_GetDupFlags(const TYPEMAKER2_TYPE *ty)
TYPEMAKER2_SIGNAL_LIST * Typemaker2_Type_GetSignals(const TYPEMAKER2_TYPE *ty)
void Typemaker2_Type_SetFieldCountId(TYPEMAKER2_TYPE *ty, const char *s)
struct TYPEMAKER2_TYPE TYPEMAKER2_TYPE
@ TypeMaker2_Type_Pointer
@ TypeMaker2_Type_Unknown
@ TypeMaker2_Access_Unknown
int Typemaker2_AccessFromString(const char *s)
uint32_t Typemaker2_FlagsFromString(const char *t)
uint32_t Typemaker2_TypeFlagsFromString(const char *t)
void Typemaker2_VirtualFn_free(TYPEMAKER2_VIRTUALFN *vf)
TYPEMAKER2_VIRTUALFN * Typemaker2_VirtualFn_new()
int Typemaker2_VirtualFn_readXml(TYPEMAKER2_VIRTUALFN *vf, GWEN_XMLNODE *node)
struct TYPEMAKER2_VIRTUALFN TYPEMAKER2_VIRTUALFN
const char * GWEN_XMLNode_GetProperty(const GWEN_XMLNODE *n, const char *name, const char *defaultValue)
GWEN_XMLNODE * GWEN_XMLNode_FindFirstTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue)
GWEN_XMLNODE * GWEN_XMLNode_GetFirstTag(const GWEN_XMLNODE *n)
GWEN_XMLNODE * GWEN_XMLNode_GetNextTag(const GWEN_XMLNODE *n)
GWEN_XMLNODE * GWEN_XMLNode_FindNextTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue)
const char * GWEN_XMLNode_GetCharValue(const GWEN_XMLNODE *n, const char *name, const char *defValue)
const char * GWEN_XMLNode_GetData(const GWEN_XMLNODE *n)
int GWEN_XMLNode_GetIntProperty(const GWEN_XMLNODE *n, const char *name, int defaultValue)
GWENHYWFAR_API int GWEN_XMLNode_toBuffer(const GWEN_XMLNODE *n, GWEN_BUFFER *buf, uint32_t flags)
#define GWEN_XML_FLAGS_HANDLE_COMMENTS
struct GWEN__XMLNODE GWEN_XMLNODE
#define GWEN_XML_FLAGS_SIMPLE