abstract_logger.h
Go to the documentation of this file.
1 #ifndef ABSTRACT_LOGGER_H
2 #define ABSTRACT_LOGGER_H
3 
6 
7 namespace BT
8 {
9 enum class TimestampType
10 {
11  absolute,
12  relative
13 };
14 
15 typedef std::array<uint8_t, 12> SerializedTransition;
16 
18 {
19 public:
20  StatusChangeLogger(TreeNode* root_node);
21  virtual ~StatusChangeLogger() = default;
22 
23  virtual void callback(BT::Duration timestamp, const TreeNode& node,
24  NodeStatus prev_status, NodeStatus status) = 0;
25 
26  virtual void flush() = 0;
27 
28  void setEnabled(bool enabled)
29  {
30  enabled_ = enabled;
31  }
32 
34  {
35  type_ = type;
36  }
37 
38  bool enabled() const
39  {
40  return enabled_;
41  }
42 
43  // false by default.
44  bool showsTransitionToIdle() const
45  {
47  }
48 
49  void enableTransitionToIdle(bool enable)
50  {
51  show_transition_to_idle_ = enable;
52  }
53 
54 private:
55  bool enabled_;
57  std::vector<TreeNode::StatusChangeSubscriber> subscribers_;
60 };
61 
62 //--------------------------------------------
63 
65  enabled_(true), show_transition_to_idle_(true), type_(TimestampType::absolute)
66 {
67  first_timestamp_ = std::chrono::high_resolution_clock::now();
68 
69  auto subscribeCallback = [this](TimePoint timestamp, const TreeNode& node,
70  NodeStatus prev, NodeStatus status) {
72  {
74  {
75  this->callback(timestamp.time_since_epoch(), node, prev, status);
76  }
77  else
78  {
79  this->callback(timestamp - first_timestamp_, node, prev, status);
80  }
81  }
82  };
83 
84  auto visitor = [this, subscribeCallback](TreeNode* node) {
85  subscribers_.push_back(node->subscribeToStatusChange(std::move(subscribeCallback)));
86  };
87 
88  applyRecursiveVisitor(root_node, visitor);
89 }
90 } // namespace BT
91 
92 #endif // ABSTRACT_LOGGER_H
BT
Definition: ex01_wrap_legacy.cpp:29
BT::StatusChangeLogger::showsTransitionToIdle
bool showsTransitionToIdle() const
Definition: abstract_logger.h:44
BT::StatusChangeLogger::subscribers_
std::vector< TreeNode::StatusChangeSubscriber > subscribers_
Definition: abstract_logger.h:57
BT::StatusChangeLogger::~StatusChangeLogger
virtual ~StatusChangeLogger()=default
BT::StatusChangeLogger::enableTransitionToIdle
void enableTransitionToIdle(bool enable)
Definition: abstract_logger.h:49
BT::TreeNode
Abstract base class for Behavior Tree Nodes.
Definition: tree_node.h:55
BT::TimestampType
TimestampType
Definition: abstract_logger.h:9
bt_factory.h
BT::StatusChangeLogger
Definition: abstract_logger.h:17
BT::StatusChangeLogger::enabled_
bool enabled_
Definition: abstract_logger.h:55
BT::StatusChangeLogger::first_timestamp_
BT::TimePoint first_timestamp_
Definition: abstract_logger.h:59
BT::StatusChangeLogger::callback
virtual void callback(BT::Duration timestamp, const TreeNode &node, NodeStatus prev_status, NodeStatus status)=0
BT::SerializedTransition
std::array< uint8_t, 12 > SerializedTransition
Definition: bt_flatbuffer_helper.h:9
BT::Duration
std::chrono::high_resolution_clock::duration Duration
Definition: basic_types.h:371
behavior_tree.h
BT::TimestampType::relative
@ relative
BT::applyRecursiveVisitor
void applyRecursiveVisitor(const TreeNode *root_node, const std::function< void(const TreeNode *)> &visitor)
Definition: behavior_tree.cpp:18
BT::StatusChangeLogger::StatusChangeLogger
StatusChangeLogger(TreeNode *root_node)
Definition: abstract_logger.h:64
BT::StatusChangeLogger::setTimestampType
void setTimestampType(TimestampType type)
Definition: abstract_logger.h:33
BT::StatusChangeLogger::flush
virtual void flush()=0
BT::StatusChangeLogger::show_transition_to_idle_
bool show_transition_to_idle_
Definition: abstract_logger.h:56
BT::NodeStatus::IDLE
@ IDLE
BT::TimestampType::absolute
@ absolute
BT::StatusChangeLogger::setEnabled
void setEnabled(bool enabled)
Definition: abstract_logger.h:28
BT::TimePoint
std::chrono::high_resolution_clock::time_point TimePoint
Definition: basic_types.h:370
BT::NodeStatus
NodeStatus
Definition: basic_types.h:35
BT::StatusChangeLogger::enabled
bool enabled() const
Definition: abstract_logger.h:38
BT::StatusChangeLogger::type_
TimestampType type_
Definition: abstract_logger.h:58


behaviortree_cpp_v3
Author(s): Michele Colledanchise, Davide Faconti
autogenerated on Wed Jun 26 2024 02:51:19