18#include <condition_variable>
19#include <libxml/parser.h>
20#include <libxml/threads.h>
21#include <libxml/tree.h>
91 std::shared_ptr<BehaviorTree>
tree;
125 std::map<EmberCore::String, std::shared_ptr<BehaviorTree>>
parsed_trees;
154 std::vector<ParseResult>
ParseMultipleFiles(
const std::vector<EmberCore::String> &filepaths);
178 const std::vector<ParseError> &
GetErrors()
const;
198 std::unique_ptr<Node>
ParseNode(xmlNodePtr xml_node);
208 std::unique_ptr<Blackboard>
ParseBlackboard(xmlNodePtr blackboard_node);
Represents a BehaviorTree project containing multiple XML resources.
Represents a complete behavior tree data structure.
Represents a single entry in a behavior tree blackboard.
Represents a blackboard containing multiple entries.
Callback interface for reporting parsing progress.
std::unique_ptr< Node > ParseNode(xmlNodePtr xml_node)
std::shared_ptr< BehaviorTree > ParseFromString(const EmberCore::String &xml_content)
std::vector< EmberCore::String > GetUnimplementedReferences() const
bool ExpandSubTreePlaceholder(Node *node)
ProjectParseResult ParseFilesWithSharedRegistry(const std::vector< EmberCore::String > &filepaths)
std::set< EmberCore::String > unimplemented_references_
~LibXMLBehaviorTreeParser()
const ParserConfig & GetConfig() const
const std::map< EmberCore::String, TreeImplementationStatus > & GetTreeImplementationStatuses() const
std::set< EmberCore::String > circular_references_
std::unique_ptr< Node > ParseSubTreeNode(xmlNodePtr xml_node)
std::map< EmberCore::String, TreeImplementationStatus > tree_implementation_statuses_
std::unique_ptr< Node > ParseActionNode(xmlNodePtr xml_node)
bool ExpandSubTreePlaceholderForProject(Node *node)
bool project_parsing_mode_
void ParseChildNodes(Node *parent, xmlNodePtr xml_parent)
void SetProgressCallback(IParseProgressCallback *callback)
IParseProgressCallback * progress_callback_
static std::mutex destruction_mutex_
void SetConfig(const ParserConfig &config)
void ExpandAllSubTreePlaceholdersForProject()
bool IsThreadSafe() const
bool ParseXMLDocument(xmlDocPtr doc, const EmberCore::String &source_path="")
void AddError(ParseError::Type type, const EmberCore::String &message, xmlNodePtr node=nullptr, const EmberCore::String &context="")
void ExpandAllSubTreePlaceholders()
EmberCore::String current_file_path_
std::unique_ptr< BlackboardEntry > ParseBlackboardEntry(xmlNodePtr entry_node)
static bool global_libxml2_initialized_
std::unique_ptr< Node > ParseConditionNode(xmlNodePtr xml_node)
void CaptureComments(xmlNodePtr parent, BehaviorTree *tree, Node *node=nullptr)
std::set< EmberCore::String > expansion_stack_
void CollectSubTreeReferences(Node *node, std::set< EmberCore::String > &references)
EmberCore::String GetMainTreeName() const
EmberCore::String main_tree_name_
std::unique_ptr< Node > ParseControlNode(xmlNodePtr xml_node)
LibXMLBehaviorTreeParser()
std::map< EmberCore::String, std::shared_ptr< BehaviorTree > > parsed_trees_
const std::vector< ParseError > & GetErrors() const
EmberCore::String GetNodeAttribute(xmlNodePtr node, const EmberCore::String &attr_name)
EmberCore::String GetNodePath(xmlNodePtr node)
size_t GetMaxThreads() const
std::unique_ptr< Blackboard > ParseBlackboard(xmlNodePtr blackboard_node)
EmberCore::String GetNodeName(xmlNodePtr node)
void SetMaxThreads(size_t max_threads)
ProjectParseResult ParseProject(BehaviorTreeProject *project)
void SetNodeAttributes(Node *node, xmlNodePtr xml_node)
std::vector< ParseError > errors_
std::shared_ptr< BehaviorTree > ParseFromFile(const EmberCore::String &filepath)
bool IsTreeImplemented(const EmberCore::String &tree_id) const
std::set< EmberCore::String > expanded_subtree_cache_
std::shared_ptr< BehaviorTree > ParseBehaviorTree(xmlNodePtr tree_node)
std::map< EmberCore::String, std::unique_ptr< Blackboard > > parsed_blackboards_
std::unique_ptr< Node > ParseDecoratorNode(xmlNodePtr xml_node)
bool libxml2_initialized_
std::vector< ParseResult > ParseMultipleFiles(const std::vector< EmberCore::String > &filepaths)
bool ReportProgress(const EmberCore::String &message, int current=0, int total=0)
bool ValidateRequiredAttribute(xmlNodePtr node, const EmberCore::String &attr_name)
const std::map< EmberCore::String, std::shared_ptr< BehaviorTree > > & GetParsedTrees() const
static std::once_flag libxml2_init_flag_
Represents a node in a behavior tree structure.
Configuration for XML parser behavior and element/attribute mappings.
Main types header for EmberCore.
std::string String
Framework-agnostic string type.
Per-file parsing information for project validation.
std::vector< String > blackboard_includes
std::vector< String > blackboard_ids
std::vector< String > errors
std::vector< String > subtree_refs
std::vector< String > tree_ids
std::vector< String > warnings
EmberCore::String context
EmberCore::String node_path
EmberCore::String message
EmberCore::String file_path
ParseError(Type t, const EmberCore::String &msg, const EmberCore::String &path="", int line=-1, int col=-1)
std::shared_ptr< BehaviorTree > tree
EmberCore::String file_path
std::vector< ParseError > errors
Result of project parsing operation.
std::vector< FileParseInfo > file_infos
std::vector< EmberCore::String > warnings
std::map< EmberCore::String, std::vector< EmberCore::String > > blackboard_includes_map
std::map< EmberCore::String, TreeImplementationStatus > tree_statuses
std::vector< EmberCore::String > duplicate_blackboard_ids
std::map< EmberCore::String, std::shared_ptr< BehaviorTree > > parsed_trees
int GetImplementedTreeCount() const
std::vector< EmberCore::String > unimplemented_references
std::vector< EmberCore::String > circular_references
std::vector< ParseError > errors
int GetTotalTreeCount() const
std::map< EmberCore::String, std::shared_ptr< Blackboard > > parsed_blackboards
EmberCore::String main_tree_name
bool HasUnimplementedReferences() const
std::vector< EmberCore::String > duplicate_tree_ids
std::vector< EmberCore::String > unresolved_blackboard_includes