NAME
Code::Includable::Tree::NodeMethods - Tree node routines
VERSION
This document describes version 0.126 of Code::Includable::Tree::NodeMethods (from Perl distribution Role-TinyCommons-Tree), released on 2021-05-06.
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.
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.
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/Role-TinyCommons-Tree.
SOURCE
Source repository is at https://github.com/perlancar/perl-Role-TinyCommons-TreeNode.
BUGS
Please report any bugs or feature requests on the bugtracker website https://github.com/perlancar/perl-Role-TinyCommons-TreeNode/issues
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.
SEE ALSO
Role::TinyCommons::Tree::NodeMethods if you want to use the routines in this module via consuming role.
AUTHOR
perlancar <perlancar@cpan.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2021, 2020, 2016 by 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.