NAME
Code::Includable::Tree::NodeMethods - Tree node routines
VERSION
This document describes version 0.129 of Code::Includable::Tree::NodeMethods (from Perl distribution RoleBundle-TinyCommons-Tree), released on 2021-10-07.
DESCRIPTION
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.
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)
VARIABLES
$IGNORE_NO_CHILDREN_METHOD => bool (default: 1)
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.
$GET_PARENT_METHOD => str (default: parent)
The method names parent
can actually be customized by (locally) setting this variable and/or $SET_PARENT_METHOD
.
$SET_PARENT_METHOD => str (default: parent)
The method names parent
can actually be customized by (locally) setting this variable and/or $GET_PARENT_METHOD
.
$GET_CHILDREN_METHOD => str (default: children)
The method names children
can actually be customized by (locally) setting this variable and $SET_CHILDREN_METHOD
.
$SET_CHILDREN_METHOD => str (default: children)
The method names children
can actually be customized by (locally) setting this variable and $GET_CHILDREN_METHOD
.
FUNCTIONS
ancestors
Return a list of ancestors, from the direct parent upwards to the root.
retrieve_parent
Return direct parent. Basically a standard way to call "get parent" method, as the latter can be customized.
check
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).
descendants
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:
B C D E F G H I
descendants_depth_first
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:
B D E F C G I H
first_node
Usage:
$node->first_node($coderef)
Much like List::Util's first
. Will "walk" the descendant nodes until the first coderef returns true, and return that.
is_first_child
is_first_child_of_type
is_last_child
is_last_child_of_type
is_nth_child
is_nth_child_of_type
is_nth_last_child
is_nth_last_child_of_type
is_only_child
is_only_child_of_type
next_sibling
Return the sibling node directly after this node.
next_siblings
Return all the next siblings of this node, from the one directly after to the last.
prev_sibling
Return the sibling node directly before this node.
prev_siblings
Return all the previous siblings of this node, from the first to the one directly before.
is_root
has_min_children(m)
Only select nodes that have at least m direct children.
has_max_children(n)
Only select nodes that have at most n direct children.
has_children_between(m, n)
Only select nodes that have between m and n direct children.
remove
Detach this node from its parent. Also set the parent of this node to undef.
walk
Usage:
$node->walk($coderef);
Call $coderef
for all descendants (this means the self node is not included). $coderef will be passed the node.
HOMEPAGE
Please visit the project's homepage at https://metacpan.org/release/RoleBundle-TinyCommons-Tree.
SOURCE
Source repository is at https://github.com/perlancar/perl-RoleBundle-TinyCommons-Tree.
SEE ALSO
Role::TinyCommons::Tree::NodeMethods if you want to use the routines in this module via consuming role.
AUTHOR
perlancar <perlancar@cpan.org>
CONTRIBUTING
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.
COPYRIGHT AND LICENSE
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.
BUGS
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.