diff --git a/WINGs/WUtil.h b/WINGs/WUtil.h index 60db95ea..a1778d74 100644 --- a/WINGs/WUtil.h +++ b/WINGs/WUtil.h @@ -592,6 +592,14 @@ int WMGetTreeNodeDepth(WMTreeNode *node); void WMDestroyTreeNode(WMTreeNode *node); +void* WMGetDataForTreeNode(WMTreeNode *node); + +WMTreeNode* WMGetParentForTreeNode(WMTreeNode *node); + +void WMSortLeavesForTreeNode(WMTreeNode *node, WMCompareDataProc *comparer); + +void WMSortTree(WMTreeNode *root, WMCompareDataProc *comparer); + /*--------------------------------------------------------------------------*/ diff --git a/WINGs/tree.c b/WINGs/tree.c index 0bee563f..dd2a9d01 100644 --- a/WINGs/tree.c +++ b/WINGs/tree.c @@ -1,7 +1,6 @@ -//#include #include #include "WUtil.h" @@ -10,7 +9,7 @@ typedef struct W_TreeNode { void *data; - //unsigned int uflags:16; + /*unsigned int uflags:16;*/ WMArray *leaves; @@ -158,3 +157,47 @@ WMDestroyTreeNode(WMTreeNode *node) } +void* +WMGetDataForTreeNode(WMTreeNode *node) +{ + return node->data; +} + + +WMTreeNode* +WMGetParentForTreeNode(WMTreeNode *node) +{ + return node->parent; +} + + +void +WMSortLeavesForTreeNode(WMTreeNode *node, WMCompareDataProc *comparer) +{ + wassertr(node!=NULL); + + WMSortArray(node->leaves, comparer); +} + + +static void +sortLeavesForNode(WMTreeNode *node, WMCompareDataProc *comparer) +{ + int i; + + WMSortArray(node->leaves, comparer); + for (i=0; ileaves); i++) { + sortLeavesForNode(WMGetFromArray(node->leaves, i), comparer); + } +} + + +void +WMSortTree(WMTreeNode *root, WMCompareDataProc *comparer) +{ + wassertr(root!=NULL); + + sortLeavesForNode(root, comparer); +} + +