31 #ifndef GWEN_DUMMY_EMPTY_ARG 34 # define GWEN_DUMMY_EMPTY_ARG 286 #define GWEN_TREE_ELEMENT(t) \ 287 GWEN_TREE_ELEMENT *_tree_element; 295 #define GWEN_TREE_FUNCTION_LIB_DEFS_CONST(t, pr, decl) \ 296 typedef GWEN_TREE t##_TREE; \ 298 decl t* pr##_Tree_GetFirst(const t##_TREE *l); \ 299 decl t* pr##_Tree_GetLast(const t##_TREE *l); \ 300 decl t* pr##_Tree_GetNext(const t *element); \ 301 decl t* pr##_Tree_GetPrevious(const t *element); \ 302 decl t* pr##_Tree_GetBelow(const t *element); \ 303 decl uint32_t pr##_Tree_GetCount(const t##_TREE *l); \ 304 decl int pr##_Tree_HasElement(const t##_TREE *l, const t *element); \ 305 decl t* pr##_Tree_GetFirstChild(const t *element); \ 306 decl t* pr##_Tree_GetLastChild(const t *element); \ 307 decl uint32_t pr##_Tree_GetChildrenCount(const t *element); \ 308 decl t* pr##_Tree_GetParent(const t *element); 311 #define GWEN_TREE_FUNCTION_LIB_DEFS_NOCONST(t, pr, decl) \ 312 typedef GWEN_TREE_ELEMENT t##_TREE_ELEMENT; \ 314 decl void pr##_Tree_Clear(t##_TREE *l); \ 315 decl t##_TREE* pr##_Tree_new(); \ 316 decl void pr##_Tree_free(t##_TREE *l); \ 317 decl void pr##_Tree_AddList(t##_TREE *dst, t##_TREE *l); \ 318 decl void pr##_Tree_Add(t##_TREE *list, t *element); \ 319 decl void pr##_Tree_Insert(t##_TREE *list, t *element); \ 320 decl void pr##_Tree_Del(t *element); \ 321 decl void pr##_Tree_Replace(t *elToReplace, t *elReplacement); \ 323 decl void pr##_Tree_AddChild(t *where, t *element); \ 324 decl void pr##_Tree_InsertChild(t *where, t *element); \ 326 decl int pr##_Tree_HasChildElement(const t *who, const t *element); \ 327 decl void pr##_Tree_ClearChildren(t *element); \ 330 #define GWEN_TREE_FUNCTION_DEFS_CONST(t, pr) \ 331 GWEN_TREE_FUNCTION_LIB_DEFS_CONST(t, pr, GWEN_DUMMY_EMPTY_ARG) 333 #define GWEN_TREE_FUNCTION_DEFS_NOCONST(t, pr) \ 334 GWEN_TREE_FUNCTION_LIB_DEFS_NOCONST(t, pr, GWEN_DUMMY_EMPTY_ARG) 384 #define GWEN_TREE_FUNCTION_LIB_DEFS(t, pr, decl) \ 385 GWEN_TREE_FUNCTION_LIB_DEFS_CONST(t, pr, decl) \ 386 GWEN_TREE_FUNCTION_LIB_DEFS_NOCONST(t, pr, decl) 393 #define GWEN_TREE_FUNCTION_DEFS(t, pr) \ 394 GWEN_TREE_FUNCTION_LIB_DEFS(t, pr, GWEN_DUMMY_EMPTY_ARG) 402 #define GWEN_TREE_FUNCTIONS(t, pr) \ 404 void pr##_Tree_Add(t##_TREE *l, t *element) { \ 406 assert(element->_tree_element);\ 407 GWEN_Tree_Add(l, element->_tree_element); \ 410 void pr##_Tree_AddList(t##_TREE *dst, t##_TREE *l) { \ 411 GWEN_Tree_AddList(dst, l); \ 414 void pr##_Tree_Insert(t##_TREE *l, t *element) { \ 416 assert(element->_tree_element);\ 417 GWEN_Tree_Insert(l, element->_tree_element); \ 420 void pr##_Tree_Del(t *element){ \ 422 assert(element->_tree_element);\ 423 GWEN_Tree_Del(element->_tree_element); \ 426 void pr##_Tree_Replace(t *elToReplace, t *elReplacement) { \ 427 assert(elToReplace); \ 428 assert(elToReplace->_tree_element);\ 429 assert(elReplacement); \ 430 assert(elReplacement->_tree_element);\ 431 GWEN_Tree_Replace(elToReplace->_tree_element, elReplacement->_tree_element); \ 434 t* pr##_Tree_GetFirst(const t##_TREE *l) { \ 435 if (l) return (t*)GWEN_Tree_GetFirst(l);\ 439 t* pr##_Tree_GetLast(const t##_TREE *l) { \ 440 if (l) return (t*) GWEN_Tree_GetLast(l);\ 444 void pr##_Tree_Clear(t##_TREE *l) { \ 446 while( (el=GWEN_Tree_GetFirst(l)) ) {\ 448 pr##_Tree_ClearChildren(el); \ 453 int pr##_Tree_HasElement(const t##_TREE *l, const t *element) { \ 455 el=(t*)GWEN_Tree_GetFirst(l); \ 459 el=(const t*)GWEN_TreeElement_GetBelow(el->_tree_element); \ 464 t##_TREE* pr##_Tree_new(){\ 465 return (t##_TREE*)GWEN_Tree_new(); \ 468 void pr##_Tree_free(t##_TREE *l) {\ 475 t* pr##_Tree_GetNext(const t *element) { \ 477 assert(element->_tree_element);\ 478 return (t*)GWEN_TreeElement_GetNext(element->_tree_element);\ 481 t* pr##_Tree_GetPrevious(const t *element) { \ 483 assert(element->_tree_element);\ 484 return (t*)GWEN_TreeElement_GetPrevious(element->_tree_element);\ 487 t* pr##_Tree_GetBelow(const t *element) { \ 489 assert(element->_tree_element);\ 490 return (t*)GWEN_TreeElement_GetBelow(element->_tree_element);\ 493 uint32_t pr##_Tree_GetCount(const t##_TREE *l){\ 494 return GWEN_Tree_GetCount(l);\ 497 int pr##_Tree_HasChildElement(const t *who, const t *element) { \ 499 el=(const t*)GWEN_TreeElement_GetFirstChild(who->_tree_element); \ 503 el=(const t*)GWEN_TreeElement_GetNext(el->_tree_element); \ 508 void pr##_Tree_AddChild(t *where, t *element) { \ 510 assert(where->_tree_element);\ 512 assert(element->_tree_element);\ 513 GWEN_Tree_AddChild(where->_tree_element, element->_tree_element); \ 516 void pr##_Tree_InsertChild(t *where, t *element) { \ 518 assert(where->_tree_element);\ 520 assert(element->_tree_element);\ 521 GWEN_Tree_InsertChild(where->_tree_element, element->_tree_element); \ 524 void pr##_Tree_ClearChildren(t *element) { \ 526 while( (c=GWEN_TreeElement_GetFirstChild(element->_tree_element)) ) {\ 527 pr##_Tree_ClearChildren(c);\ 533 t* pr##_Tree_GetFirstChild(const t *element) { \ 535 assert(element->_tree_element);\ 536 return (t*)GWEN_TreeElement_GetFirstChild(element->_tree_element);\ 539 t* pr##_Tree_GetLastChild(const t *element) { \ 541 assert(element->_tree_element);\ 542 return (t*)GWEN_TreeElement_GetLastChild(element->_tree_element);\ 545 uint32_t pr##_Tree_GetChildrenCount(const t *element){\ 546 return GWEN_TreeElement_GetChildrenCount(element->_tree_element);\ 549 t* pr##_Tree_GetParent(const t *element) { \ 551 assert(element->_tree_element);\ 552 return (t*)GWEN_TreeElement_GetParent(element->_tree_element);\ 562 #define GWEN_TREE_INIT(t, element) \ 563 element->_tree_element=GWEN_TreeElement_new(element); 571 #define GWEN_TREE_FINI(t, element) \ 572 if (element && element->_tree_element) { \ 573 GWEN_TreeElement_free(element->_tree_element); \ 574 element->_tree_element=0; \ GWENHYWFAR_API void * GWEN_TreeElement_GetLastChild(const GWEN_TREE_ELEMENT *el)
struct GWEN_TREE_ELEMENT GWEN_TREE_ELEMENT
GWENHYWFAR_API void * GWEN_Tree_GetFirst(const GWEN_TREE *l)
GWENHYWFAR_API void * GWEN_TreeElement_GetParent(const GWEN_TREE_ELEMENT *el)
GWENHYWFAR_API void GWEN_Tree_AddList(GWEN_TREE *dest, GWEN_TREE *l)
GWENHYWFAR_API int GWEN_Tree_GetCount(const GWEN_TREE *l)
GWENHYWFAR_API void GWEN_Tree_free(GWEN_TREE *l)
GWENHYWFAR_API void * GWEN_TreeElement_GetFirstChild(const GWEN_TREE_ELEMENT *el)
GWENHYWFAR_API void GWEN_Tree_InsertChild(GWEN_TREE_ELEMENT *where, GWEN_TREE_ELEMENT *el)
GWENHYWFAR_API void * GWEN_Tree_GetLast(const GWEN_TREE *l)
GWENHYWFAR_API void GWEN_Tree_Del(GWEN_TREE_ELEMENT *el)
GWENHYWFAR_API void * GWEN_TreeElement_GetNext(const GWEN_TREE_ELEMENT *el)
GWENHYWFAR_API void * GWEN_TreeElement_GetPrevious(const GWEN_TREE_ELEMENT *el)
GWENHYWFAR_API GWEN_TREE_ELEMENT * GWEN_TreeElement_new(void *d)
GWENHYWFAR_API void GWEN_Tree_Replace(GWEN_TREE_ELEMENT *elToReplace, GWEN_TREE_ELEMENT *elReplacement)
GWENHYWFAR_API void GWEN_Tree_AddChild(GWEN_TREE_ELEMENT *where, GWEN_TREE_ELEMENT *el)
GWENHYWFAR_API uint32_t GWEN_TreeElement_GetChildrenCount(const GWEN_TREE_ELEMENT *el)
GWENHYWFAR_API GWEN_TREE * GWEN_Tree_new(void)
GWENHYWFAR_API void GWEN_Tree_Insert(GWEN_TREE *l, GWEN_TREE_ELEMENT *el)
struct GWEN_TREE GWEN_TREE
GWENHYWFAR_API void * GWEN_TreeElement_GetBelow(const GWEN_TREE_ELEMENT *el)
GWENHYWFAR_API void GWEN_TreeElement_free(GWEN_TREE_ELEMENT *el)
GWENHYWFAR_API void GWEN_Tree_Add(GWEN_TREE *l, GWEN_TREE_ELEMENT *el)