34 #ifndef GWEN_DUMMY_EMPTY_ARG
37 # define GWEN_DUMMY_EMPTY_ARG
251 #define GWEN_TREE2_ELEMENT(t) \
252 GWEN_TREE2_ELEMENT *_tree2_element;
260 #define GWEN_TREE2_FUNCTION_LIB_DEFS_CONST(t, pr, decl) \
261 decl t* pr##_Tree2_GetNext(const t *element); \
262 decl t* pr##_Tree2_GetPrevious(const t *element); \
263 decl t* pr##_Tree2_GetBelow(const t *element); \
264 decl t* pr##_Tree2_GetFirstChild(const t *element); \
265 decl t* pr##_Tree2_GetLastChild(const t *element); \
266 decl t* pr##_Tree2_GetParent(const t *element);
269 #define GWEN_TREE2_FUNCTION_LIB_DEFS_NOCONST(t, pr, decl) \
270 typedef GWEN_TREE2_ELEMENT t##_TREE2_ELEMENT; \
272 decl void pr##_Tree2_Unlink(t *element); \
273 decl void pr##_Tree2_Replace(t *elToReplace, t *elReplacement); \
275 decl void pr##_Tree2_AddChild(t *where, t *element); \
276 decl void pr##_Tree2_InsertChild(t *where, t *element); \
278 decl void pr##_Tree2_ClearChildren(t *element); \
279 decl void pr##_Tree2_free(t *element);
282 #define GWEN_TREE2_FUNCTION_DEFS_CONST(t, pr) \
283 GWEN_TREE2_FUNCTION_LIB_DEFS_CONST(t, pr, GWEN_DUMMY_EMPTY_ARG)
285 #define GWEN_TREE2_FUNCTION_DEFS_NOCONST(t, pr) \
286 GWEN_TREE2_FUNCTION_LIB_DEFS_NOCONST(t, pr, GWEN_DUMMY_EMPTY_ARG)
336 #define GWEN_TREE2_FUNCTION_LIB_DEFS(t, pr, decl) \
337 GWEN_TREE2_FUNCTION_LIB_DEFS_CONST(t, pr, decl) \
338 GWEN_TREE2_FUNCTION_LIB_DEFS_NOCONST(t, pr, decl)
345 #define GWEN_TREE2_FUNCTION_DEFS(t, pr) \
346 GWEN_TREE2_FUNCTION_LIB_DEFS(t, pr, GWEN_DUMMY_EMPTY_ARG)
354 #define GWEN_TREE2_FUNCTIONS(t, pr) \
356 void pr##_Tree2_Unlink(t *element){ \
358 assert(element->_tree2_element);\
359 GWEN_Tree2_Unlink(element->_tree2_element); \
362 void pr##_Tree2_Replace(t *elToReplace, t *elReplacement) { \
363 assert(elToReplace); \
364 assert(elToReplace->_tree2_element);\
365 assert(elReplacement); \
366 assert(elReplacement->_tree2_element);\
367 GWEN_Tree2_Replace(elToReplace->_tree2_element, elReplacement->_tree2_element); \
371 t* pr##_Tree2_GetNext(const t *element) { \
373 assert(element->_tree2_element);\
374 return (t*)GWEN_Tree2Element_GetNext(element->_tree2_element);\
377 t* pr##_Tree2_GetPrevious(const t *element) { \
379 assert(element->_tree2_element);\
380 return (t*)GWEN_Tree2Element_GetPrevious(element->_tree2_element);\
383 t* pr##_Tree2_GetBelow(const t *element) { \
385 assert(element->_tree2_element);\
386 return (t*)GWEN_Tree2Element_GetBelow(element->_tree2_element);\
389 void pr##_Tree2_AddChild(t *where, t *element) { \
391 assert(where->_tree2_element);\
393 assert(element->_tree2_element);\
394 GWEN_Tree2_AddChild(where->_tree2_element, element->_tree2_element); \
397 void pr##_Tree2_InsertChild(t *where, t *element) { \
399 assert(where->_tree2_element);\
401 assert(element->_tree2_element);\
402 GWEN_Tree2_InsertChild(where->_tree2_element, element->_tree2_element); \
405 void pr##_Tree2_ClearChildren(t *element) { \
407 while( (c=GWEN_Tree2Element_GetFirstChild(element->_tree2_element)) ) {\
408 pr##_Tree2_ClearChildren(c);\
409 pr##_Tree2_Unlink(c);\
414 void pr##_Tree2_free(t *element) { \
415 pr##_Tree2_ClearChildren(element);\
416 pr##_Tree2_Unlink(element);\
420 t* pr##_Tree2_GetFirstChild(const t *element) { \
422 assert(element->_tree2_element);\
423 return (t*)GWEN_Tree2Element_GetFirstChild(element->_tree2_element);\
426 t* pr##_Tree2_GetLastChild(const t *element) { \
428 assert(element->_tree2_element);\
429 return (t*)GWEN_Tree2Element_GetLastChild(element->_tree2_element);\
432 t* pr##_Tree2_GetParent(const t *element) { \
434 assert(element->_tree2_element);\
435 return (t*)GWEN_Tree2Element_GetParent(element->_tree2_element);\
445 #define GWEN_TREE2_INIT(t, element, pr) \
446 element->_tree2_element=GWEN_Tree2Element_new(element);
457 #define GWEN_TREE2_FINI(t, element, pr) \
458 if (element && element->_tree2_element) { \
459 pr##_Tree2_ClearChildren(element);\
460 pr##_Tree2_Unlink(element);\
461 GWEN_Tree2Element_free(element->_tree2_element); \
462 element->_tree2_element=0; \
GWENHYWFAR_API void * GWEN_Tree2Element_GetNext(const GWEN_TREE2_ELEMENT *el)
GWENHYWFAR_API uint32_t GWEN_Tree2Element_GetChildrenCount(const GWEN_TREE2_ELEMENT *el)
GWENHYWFAR_API void * GWEN_Tree2Element_GetLastChild(const GWEN_TREE2_ELEMENT *el)
GWENHYWFAR_API void * GWEN_Tree2Element_GetPrevious(const GWEN_TREE2_ELEMENT *el)
GWENHYWFAR_API void GWEN_Tree2_Replace(GWEN_TREE2_ELEMENT *elToReplace, GWEN_TREE2_ELEMENT *elReplacement)
GWENHYWFAR_API void * GWEN_Tree2_GetLastChild(const GWEN_TREE2_ELEMENT *el)
GWENHYWFAR_API void * GWEN_Tree2_GetFirstChild(const GWEN_TREE2_ELEMENT *el)
GWENHYWFAR_API void * GWEN_Tree2Element_GetParent(const GWEN_TREE2_ELEMENT *el)
GWENHYWFAR_API void GWEN_Tree2_AddChild(GWEN_TREE2_ELEMENT *where, GWEN_TREE2_ELEMENT *el)
GWENHYWFAR_API void GWEN_Tree2_Unlink(GWEN_TREE2_ELEMENT *el)
GWENHYWFAR_API void GWEN_Tree2_InsertChild(GWEN_TREE2_ELEMENT *where, GWEN_TREE2_ELEMENT *el)
struct GWEN_TREE2_ELEMENT GWEN_TREE2_ELEMENT
GWENHYWFAR_API void * GWEN_Tree2Element_GetFirstChild(const GWEN_TREE2_ELEMENT *el)
GWENHYWFAR_API void GWEN_Tree2Element_free(GWEN_TREE2_ELEMENT *el)
GWENHYWFAR_API GWEN_TREE2_ELEMENT * GWEN_Tree2Element_new(void *d)
GWENHYWFAR_API void * GWEN_Tree2Element_GetBelow(const GWEN_TREE2_ELEMENT *el)