// vim:fileencoding=utf-8:foldmethod=marker #ifndef CCGEN_DBL_LIST_H #define CCGEN_DBL_LIST_H #include "wapp_core.h" #include "type_enums.h" #ifdef WAPP_PLATFORM_CPP BEGIN_C_LINKAGE #endif // !WAPP_PLATFORM_CPP #ifdef WAPP_PLATFORM_CPP #define wapp_cenumval_list_node(ITEM_PTR) CEnumValNode{ITEM_PTR, nullptr, nullptr} #define wapp_carg_list_node(ITEM_PTR) CArgNode{ITEM_PTR, nullptr, nullptr} #define wapp_cqualifier_list_node(ITEM_PTR) CQualifierNode{ITEM_PTR, nullptr, nullptr} #define wapp_cinclude_list_node(ITEM_PTR) CIncludeNode{ITEM_PTR, nullptr, nullptr} #define wapp_cusertype_list_node(ITEM_PTR) CUserTypeNode{ITEM_PTR, nullptr, nullptr} #define wapp_cfunc_list_node(ITEM_PTR) CFuncNode{ITEM_PTR, nullptr, nullptr} #define wapp_cstruct_list_node(ITEM_PTR) CStructNode{ITEM_PTR, nullptr, nullptr} #define wapp_cmacro_list_node(ITEM_PTR) CMacroNode{ITEM_PTR, nullptr, nullptr} #else #define wapp_cenumval_list_node(ITEM_PTR) ((CEnumValNode){.item = ITEM_PTR}) #define wapp_carg_list_node(ITEM_PTR) ((CArgNode){.item = ITEM_PTR}) #define wapp_cqualifier_list_node(ITEM_PTR) ((CQualifierNode){.item = ITEM_PTR}) #define wapp_cinclude_list_node(ITEM_PTR) ((CIncludeNode){.item = ITEM_PTR}) #define wapp_cusertype_list_node(ITEM_PTR) ((CUserTypeNode){.item = ITEM_PTR}) #define wapp_cfunc_list_node(ITEM_PTR) ((CFuncNode){.item = ITEM_PTR}) #define wapp_cstruct_list_node(ITEM_PTR) ((CStructNode){.item = ITEM_PTR}) #define wapp_cmacro_list_node(ITEM_PTR) ((CMacroNode){.item = ITEM_PTR}) #endif // !WAPP_PLATFORM_CPP typedef struct cenumval CEnumVal; typedef struct carg CArg; typedef struct cinclude CInclude; typedef struct cusertype CUserType; typedef struct cfunc CFunc; typedef struct cstruct CStruct; typedef struct cmacro CMacro; typedef struct CEnumValNode CEnumValNode; struct CEnumValNode { CEnumVal *item; CEnumValNode *prev; CEnumValNode *next; }; typedef struct CEnumValList CEnumValList; struct CEnumValList { CEnumValNode *first; CEnumValNode *last; u64 node_count; }; typedef struct CArgNode CArgNode; struct CArgNode { CArg *item; CArgNode *prev; CArgNode *next; }; typedef struct CArgList CArgList; struct CArgList { CArgNode *first; CArgNode *last; u64 node_count; }; typedef struct CQualifierNode CQualifierNode; struct CQualifierNode { CQualifier *item; CQualifierNode *prev; CQualifierNode *next; }; typedef struct CQualifierList CQualifierList; struct CQualifierList { CQualifierNode *first; CQualifierNode *last; u64 node_count; }; typedef struct CIncludeNode CIncludeNode; struct CIncludeNode { CInclude *item; CIncludeNode *prev; CIncludeNode *next; }; typedef struct CIncludeList CIncludeList; struct CIncludeList { CIncludeNode *first; CIncludeNode *last; u64 node_count; }; typedef struct CUserTypeNode CUserTypeNode; struct CUserTypeNode { CUserType *item; CUserTypeNode *prev; CUserTypeNode *next; }; typedef struct CUserTypeList CUserTypeList; struct CUserTypeList { CUserTypeNode *first; CUserTypeNode *last; u64 node_count; }; typedef struct CFuncNode CFuncNode; struct CFuncNode { CFunc *item; CFuncNode *prev; CFuncNode *next; }; typedef struct CFuncList CFuncList; struct CFuncList { CFuncNode *first; CFuncNode *last; u64 node_count; }; typedef struct CStructNode CStructNode; struct CStructNode { CStruct *item; CStructNode *prev; CStructNode *next; }; typedef struct CStructList CStructList; struct CStructList { CStructNode *first; CStructNode *last; u64 node_count; }; typedef struct CMacroNode CMacroNode; struct CMacroNode { CMacro *item; CMacroNode *prev; CMacroNode *next; }; typedef struct CMacroList CMacroList; struct CMacroList { CMacroNode *first; CMacroNode *last; u64 node_count; }; CEnumValNode *wapp_cenumval_list_get(const CEnumValList *list, u64 index); void wapp_cenumval_list_push_front(CEnumValList *list, CEnumValNode *node); void wapp_cenumval_list_push_back(CEnumValList *list, CEnumValNode *node); void wapp_cenumval_list_insert(CEnumValList *list, CEnumValNode *node, u64 index); CEnumValNode *wapp_cenumval_list_pop_front(CEnumValList *list); CEnumValNode *wapp_cenumval_list_pop_back(CEnumValList *list); CEnumValNode *wapp_cenumval_list_remove(CEnumValList *list, u64 index); void wapp_cenumval_list_empty(CEnumValList *list); CArgNode *wapp_carg_list_get(const CArgList *list, u64 index); void wapp_carg_list_push_front(CArgList *list, CArgNode *node); void wapp_carg_list_push_back(CArgList *list, CArgNode *node); void wapp_carg_list_insert(CArgList *list, CArgNode *node, u64 index); CArgNode *wapp_carg_list_pop_front(CArgList *list); CArgNode *wapp_carg_list_pop_back(CArgList *list); CArgNode *wapp_carg_list_remove(CArgList *list, u64 index); void wapp_carg_list_empty(CArgList *list); CQualifierNode *wapp_cqualifier_list_get(const CQualifierList *list, u64 index); void wapp_cqualifier_list_push_front(CQualifierList *list, CQualifierNode *node); void wapp_cqualifier_list_push_back(CQualifierList *list, CQualifierNode *node); void wapp_cqualifier_list_insert(CQualifierList *list, CQualifierNode *node, u64 index); CQualifierNode *wapp_cqualifier_list_pop_front(CQualifierList *list); CQualifierNode *wapp_cqualifier_list_pop_back(CQualifierList *list); CQualifierNode *wapp_cqualifier_list_remove(CQualifierList *list, u64 index); void wapp_cqualifier_list_empty(CQualifierList *list); CIncludeNode *wapp_cinclude_list_get(const CIncludeList *list, u64 index); void wapp_cinclude_list_push_front(CIncludeList *list, CIncludeNode *node); void wapp_cinclude_list_push_back(CIncludeList *list, CIncludeNode *node); void wapp_cinclude_list_insert(CIncludeList *list, CIncludeNode *node, u64 index); CIncludeNode *wapp_cinclude_list_pop_front(CIncludeList *list); CIncludeNode *wapp_cinclude_list_pop_back(CIncludeList *list); CIncludeNode *wapp_cinclude_list_remove(CIncludeList *list, u64 index); void wapp_cinclude_list_empty(CIncludeList *list); CUserTypeNode *wapp_cusertype_list_get(const CUserTypeList *list, u64 index); void wapp_cusertype_list_push_front(CUserTypeList *list, CUserTypeNode *node); void wapp_cusertype_list_push_back(CUserTypeList *list, CUserTypeNode *node); void wapp_cusertype_list_insert(CUserTypeList *list, CUserTypeNode *node, u64 index); CUserTypeNode *wapp_cusertype_list_pop_front(CUserTypeList *list); CUserTypeNode *wapp_cusertype_list_pop_back(CUserTypeList *list); CUserTypeNode *wapp_cusertype_list_remove(CUserTypeList *list, u64 index); void wapp_cusertype_list_empty(CUserTypeList *list); CFuncNode *wapp_cfunc_list_get(const CFuncList *list, u64 index); void wapp_cfunc_list_push_front(CFuncList *list, CFuncNode *node); void wapp_cfunc_list_push_back(CFuncList *list, CFuncNode *node); void wapp_cfunc_list_insert(CFuncList *list, CFuncNode *node, u64 index); CFuncNode *wapp_cfunc_list_pop_front(CFuncList *list); CFuncNode *wapp_cfunc_list_pop_back(CFuncList *list); CFuncNode *wapp_cfunc_list_remove(CFuncList *list, u64 index); void wapp_cfunc_list_empty(CFuncList *list); CStructNode *wapp_cstruct_list_get(const CStructList *list, u64 index); void wapp_cstruct_list_push_front(CStructList *list, CStructNode *node); void wapp_cstruct_list_push_back(CStructList *list, CStructNode *node); void wapp_cstruct_list_insert(CStructList *list, CStructNode *node, u64 index); CStructNode *wapp_cstruct_list_pop_front(CStructList *list); CStructNode *wapp_cstruct_list_pop_back(CStructList *list); CStructNode *wapp_cstruct_list_remove(CStructList *list, u64 index); void wapp_cstruct_list_empty(CStructList *list); CMacroNode *wapp_cmacro_list_get(const CMacroList *list, u64 index); void wapp_cmacro_list_push_front(CMacroList *list, CMacroNode *node); void wapp_cmacro_list_push_back(CMacroList *list, CMacroNode *node); void wapp_cmacro_list_insert(CMacroList *list, CMacroNode *node, u64 index); CMacroNode *wapp_cmacro_list_pop_front(CMacroList *list); CMacroNode *wapp_cmacro_list_pop_back(CMacroList *list); CMacroNode *wapp_cmacro_list_remove(CMacroList *list, u64 index); void wapp_cmacro_list_empty(CMacroList *list); #ifdef WAPP_PLATFORM_CPP END_C_LINKAGE #endif // !WAPP_PLATFORM_CPP #endif // !DBL_LIST_H