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 uint32_t GWEN_Tree2Element_GetChildrenCount(const GWEN_TREE2_ELEMENT *el)
GWENHYWFAR_API void GWEN_Tree2_AddChild(GWEN_TREE2_ELEMENT *where, GWEN_TREE2_ELEMENT *el)
struct GWEN_TREE2_ELEMENT GWEN_TREE2_ELEMENT
GWENHYWFAR_API void * GWEN_Tree2Element_GetParent(const GWEN_TREE2_ELEMENT *el)
GWENHYWFAR_API void * GWEN_Tree2Element_GetLastChild(const GWEN_TREE2_ELEMENT *el)
GWENHYWFAR_API void * GWEN_Tree2_GetFirstChild(const GWEN_TREE2_ELEMENT *el)
GWENHYWFAR_API void GWEN_Tree2Element_free(GWEN_TREE2_ELEMENT *el)
GWENHYWFAR_API void GWEN_Tree2_Unlink(GWEN_TREE2_ELEMENT *el)
GWENHYWFAR_API void * GWEN_Tree2_GetLastChild(const GWEN_TREE2_ELEMENT *el)
GWENHYWFAR_API void * GWEN_Tree2Element_GetNext(const GWEN_TREE2_ELEMENT *el)
GWENHYWFAR_API void GWEN_Tree2_InsertChild(GWEN_TREE2_ELEMENT *where, GWEN_TREE2_ELEMENT *el)
GWENHYWFAR_API void GWEN_Tree2_Replace(GWEN_TREE2_ELEMENT *elToReplace, GWEN_TREE2_ELEMENT *elReplacement)
GWENHYWFAR_API void * GWEN_Tree2Element_GetFirstChild(const GWEN_TREE2_ELEMENT *el)
GWENHYWFAR_API void * GWEN_Tree2Element_GetBelow(const GWEN_TREE2_ELEMENT *el)
GWENHYWFAR_API void * GWEN_Tree2Element_GetPrevious(const GWEN_TREE2_ELEMENT *el)
GWENHYWFAR_API GWEN_TREE2_ELEMENT * GWEN_Tree2Element_new(void *d)