Ember
Loading...
Searching...
No Matches
DirectTreeAdapter.h
Go to the documentation of this file.
1#pragma once
2
13
15#include "Core/BehaviorTree.h"
17#include <memory>
18#include <unordered_map>
19
20namespace EmberCore {
21
31 public:
36 explicit DirectTreeAdapter(std::shared_ptr<BehaviorTree> tree);
37 virtual ~DirectTreeAdapter() = default;
38
39 // Tree structure access
40 ITreeNode *GetRootNode() const override;
41
42 // Tree properties
43 const EmberCore::String &GetName() const override;
44 const EmberCore::String &GetDescription() const override;
45
46 // Tree statistics
47 size_t GetNodeCount() const override;
48 size_t GetMaxDepth() const override;
49
50 // Node search operations
51 ITreeNode *FindNodeById(size_t id) const override;
52 ITreeNode *FindNodeByName(const EmberCore::String &name) const override;
53 std::vector<ITreeNode *> FindNodesByType(ITreeNode::NodeType type) const override;
54
55 // Tree traversal
56 void TraverseNodes(std::function<void(ITreeNode *)> visitor) override;
57 void TraverseNodes(std::function<void(const ITreeNode *)> visitor) const override;
58
59 // Tree validation
60 bool IsValid() const override;
61 bool HasCycles() const override;
62
63 // Utility operations
64 std::vector<ITreeNode *> GetAllNodes() override;
65 std::vector<const ITreeNode *> GetAllNodes() const override;
66
67 // Tree metadata for visualization
68 EmberCore::String GetTreeStructure() const override;
69 void PrintTree() const override;
70
71 // Access to the wrapped tree (for direct access when needed)
72 std::shared_ptr<BehaviorTree> GetWrappedTree() const { return behavior_tree_; }
73 std::shared_ptr<BehaviorTree> GetTree() const { return behavior_tree_; }
74
75 private:
76 std::shared_ptr<BehaviorTree> behavior_tree_;
77
78 // Cache for root node adapter to maintain consistent pointer identity
79 mutable std::unique_ptr<NodeAdapter> root_adapter_;
80
81 // Node adapter cache for consistent pointer identity
82 mutable std::unordered_map<Node *, std::unique_ptr<NodeAdapter>> node_adapter_cache_;
83
84 // Helper methods
87
88 // Ensure adapters are created and cached
89 void EnsureRootAdapter() const;
91};
92
93} // namespace EmberCore
std::shared_ptr< BehaviorTree > behavior_tree_
EmberCore::String GetTreeStructure() const override
void TraverseNodes(std::function< void(ITreeNode *)> visitor) override
std::vector< ITreeNode * > FindNodesByType(ITreeNode::NodeType type) const override
ITreeNode * GetRootNode() const override
ITreeNode * FindNodeByName(const EmberCore::String &name) const override
DirectTreeAdapter(std::shared_ptr< BehaviorTree > tree)
Constructor that wraps a BehaviorTree.
NodeAdapter * GetOrCreateNodeAdapter(Node *node) const
ITreeNode::NodeType ConvertNodeType(Node::Type type) const
const EmberCore::String & GetName() const override
const EmberCore::String & GetDescription() const override
std::unique_ptr< NodeAdapter > root_adapter_
bool HasCycles() const override
std::shared_ptr< BehaviorTree > GetTree() const
std::unordered_map< Node *, std::unique_ptr< NodeAdapter > > node_adapter_cache_
std::shared_ptr< BehaviorTree > GetWrappedTree() const
ITreeNode * FindNodeById(size_t id) const override
virtual ~DirectTreeAdapter()=default
size_t GetMaxDepth() const override
std::vector< ITreeNode * > GetAllNodes() override
size_t GetNodeCount() const override
Abstract interface for tree nodes that can be visualized.
Definition ITreeNode.h:31
NodeType
Node types for visualization categorization.
Definition ITreeNode.h:36
Abstract interface for tree structures that can be visualized.
Adapter class that wraps the current Node implementation to work with ITreeNode interface.
Definition NodeAdapter.h:16
Represents a node in a behavior tree structure.
Definition Node.h:20
Type
Node types for behavior tree classification.
Definition Node.h:25
Main types header for EmberCore.
std::string String
Framework-agnostic string type.
Definition String.h:14