19 const std::function<
void(
const TreeNode*)>& visitor)
23 throw LogicError(
"One of the children of a DecoratorNode or ControlNode is nullptr");
28 if (
auto control = dynamic_cast<const BT::ControlNode*>(node))
30 for (
const auto& child : control->children())
35 else if (
auto decorator = dynamic_cast<const BT::DecoratorNode*>(node))
45 throw LogicError(
"One of the children of a DecoratorNode or ControlNode is nullptr");
50 if (
auto control = dynamic_cast<BT::ControlNode*>(node))
52 for (
const auto& child : control->children())
57 else if (
auto decorator = dynamic_cast<BT::DecoratorNode*>(node))
59 if( decorator->child() ){
67 std::function<void(unsigned, const BT::TreeNode*)> recursivePrint;
69 recursivePrint = [&recursivePrint, &stream](
unsigned indent,
const BT::TreeNode* node) {
70 for (
unsigned i = 0; i < indent; i++)
76 stream <<
"!nullptr!" << std::endl;
79 stream << node->
name() << std::endl;
82 if (
auto control = dynamic_cast<const BT::ControlNode*>(node))
84 for (
const auto& child : control->children())
86 recursivePrint(indent, child);
89 else if (
auto decorator = dynamic_cast<const BT::DecoratorNode*>(node))
91 recursivePrint(indent, decorator->child());
95 stream <<
"----------------" << std::endl;
96 recursivePrint(0, root_node);
97 stream <<
"----------------" << std::endl;
102 serialized_buffer.clear();
104 auto visitor = [&serialized_buffer](
const TreeNode* node) {
105 serialized_buffer.push_back(
106 std::make_pair(node->
UID(),
static_cast<uint8_t
>(node->
status())));
const std::string & name() const
Name of the instance, not the type.
std::vector< std::pair< uint16_t, uint8_t > > SerializedTreeStatus
void printTreeRecursively(const TreeNode *root_node, std::ostream &stream=std::cout)
Abstract base class for Behavior Tree Nodes.
NodeStatus status() const
void buildSerializedStatusSnapshot(const TreeNode *root_node, SerializedTreeStatus &serialized_buffer)
buildSerializedStatusSnapshot can be used to create a buffer that can be stored (or sent to a client ...
void applyRecursiveVisitor(const TreeNode *root_node, const std::function< void(const TreeNode *)> &visitor)