Code::Includable::Tree::NodeMethods - Tree node routines
This document describes version 0.129 of Code::Includable::Tree::NodeMethods (from Perl distribution RoleBundle-TinyCommons-Tree), released on 2021-10-07.
The routines in this module can be imported manually to your tree class/role. The only requirement is that your tree class supports parent and children methods.
parent
children
The routines can also be called as a normal function call, with your tree node object as the first argument, e.g.:
next_siblings($node)
If set to true (the default), when a node object does not support a "get children" method, we do not die and assume it does not have children.
The method names parent can actually be customized by (locally) setting this variable and/or $SET_PARENT_METHOD.
$SET_PARENT_METHOD
The method names parent can actually be customized by (locally) setting this variable and/or $GET_PARENT_METHOD.
$GET_PARENT_METHOD
The method names children can actually be customized by (locally) setting this variable and $SET_CHILDREN_METHOD.
$SET_CHILDREN_METHOD
The method names children can actually be customized by (locally) setting this variable and $GET_CHILDREN_METHOD.
$GET_CHILDREN_METHOD
Return a list of ancestors, from the direct parent upwards to the root.
Return direct parent. Basically a standard way to call "get parent" method, as the latter can be customized.
Usage:
$node->check(\%opts)
Check references in a tree: that all children refers back to the parent. Options:
recurse => bool
check_root => bool
If set to true, will also check that parent is undef (meaning this node is a root node).
Return a list of descendents, from the direct children, to their children's children, and so on until all the leaf nodes.
For example, for this tree:
A |-- B | |-- D | |-- E | `-- F `-- C |-- G | `-- I `-- H
the nodes returned for descendants(A) would be:
descendants(A)
B C D E F G H I
Like "descendants", except will return in depth-first order. For example, using the same object in the "descendants" example, descendants_depth_first(A) will return:
descendants_depth_first(A)
B D E F C G I H
$node->first_node($coderef)
Much like List::Util's first. Will "walk" the descendant nodes until the first coderef returns true, and return that.
first
Return the sibling node directly after this node.
Return all the next siblings of this node, from the one directly after to the last.
Return the sibling node directly before this node.
Return all the previous siblings of this node, from the first to the one directly before.
Only select nodes that have at least m direct children.
Only select nodes that have at most n direct children.
Only select nodes that have between m and n direct children.
Detach this node from its parent. Also set the parent of this node to undef.
$node->walk($coderef);
Call $coderef for all descendants (this means the self node is not included). $coderef will be passed the node.
$coderef
Please visit the project's homepage at https://metacpan.org/release/RoleBundle-TinyCommons-Tree.
Source repository is at https://github.com/perlancar/perl-RoleBundle-TinyCommons-Tree.
Role::TinyCommons::Tree::NodeMethods if you want to use the routines in this module via consuming role.
perlancar <perlancar@cpan.org>
To contribute, you can send patches by email/via RT, or send pull requests on GitHub.
Most of the time, you don't need to build the distribution yourself. You can simply modify the code, then test via:
% prove -l
If you want to build the distribution (e.g. to try to install it locally on your system), you can install Dist::Zilla, Dist::Zilla::PluginBundle::Author::PERLANCAR, and sometimes one or two other Dist::Zilla plugin and/or Pod::Weaver::Plugin. Any additional steps required beyond that are considered a bug and can be reported to me.
This software is copyright (c) 2021, 2020, 2016 by perlancar <perlancar@cpan.org>.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
Please report any bugs or feature requests on the bugtracker website https://rt.cpan.org/Public/Dist/Display.html?Name=RoleBundle-TinyCommons-Tree
When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.
To install RoleBundle::TinyCommons::Tree, copy and paste the appropriate command in to your terminal.
cpanm
cpanm RoleBundle::TinyCommons::Tree
CPAN shell
perl -MCPAN -e shell install RoleBundle::TinyCommons::Tree
For more information on module installation, please visit the detailed CPAN module installation guide.