implement wm_treenode_all_keyroots

This commit is contained in:
Akos Horvath 2023-12-29 15:14:44 +01:00
parent d5c745f8e1
commit 8629efe06f
2 changed files with 18 additions and 0 deletions

View File

@ -313,6 +313,23 @@ bool wm_is_treenode_keyroot(TreeNode *node)
return wm_treenode_lmd(node) != wm_treenode_lmd(node->parent);
}
PtrArray wm_treenode_all_keyroots(TreeNode *node)
{
assert(node);
PtrArray ret = wm_ptrarray_new();
PtrArray postorder = wm_postorder_traversal(node);
for (size_t i = 0; i < postorder.size; i++) {
TreeNode *node = ((TreeNode**)postorder.ptrs)[i];
if (wm_is_treenode_keyroot(node))
wm_ptrarray_push(&ret, node);
}
wm_ptrarray_free(&postorder);
return ret;
}
void wm_treenode_print(TreeNode *node)
{
char *str = wm_treenode_to_str(node);

View File

@ -106,6 +106,7 @@ TreeNode* wm_treenode_lmd(TreeNode *node);
PtrArray wm_treenode_all_lmds(TreeNode *node);
PtrArray wm_postorder_traversal(TreeNode *tree);
bool wm_is_treenode_keyroot(TreeNode *node);
PtrArray wm_treenode_all_keyroots(TreeNode *node);
ClientArray wm_clientarray_new();
void wm_clientarray_push(ClientArray *arr, Client node);