bt_file_logger.cpp
Go to the documentation of this file.
3 
4 namespace BT
5 {
6 FileLogger::FileLogger(const BT::Tree& tree, const char* filename, uint16_t buffer_size) :
7  StatusChangeLogger(tree.rootNode()), buffer_max_size_(buffer_size)
8 {
9  if (buffer_max_size_ != 0)
10  {
11  buffer_.reserve(buffer_max_size_);
12  }
13 
15 
16  flatbuffers::FlatBufferBuilder builder(1024);
17  CreateFlatbuffersBehaviorTree(builder, tree);
18 
19  //-------------------------------------
20 
21  file_os_.open(filename, std::ofstream::binary | std::ofstream::out);
22 
23  // serialize the length of the buffer in the first 4 bytes
24  char size_buff[4];
25  flatbuffers::WriteScalar(size_buff, static_cast<int32_t>(builder.GetSize()));
26 
27  file_os_.write(size_buff, 4);
28  file_os_.write(reinterpret_cast<const char*>(builder.GetBufferPointer()),
29  builder.GetSize());
30 }
31 
33 {
34  this->flush();
35  file_os_.close();
36 }
37 
38 void FileLogger::callback(Duration timestamp, const TreeNode& node,
39  NodeStatus prev_status, NodeStatus status)
40 {
42  SerializeTransition(node.UID(), timestamp, prev_status, status);
43 
44  if (buffer_max_size_ == 0)
45  {
46  file_os_.write(reinterpret_cast<const char*>(buffer.data()), buffer.size());
47  }
48  else
49  {
50  buffer_.push_back(buffer);
51  if (buffer_.size() >= buffer_max_size_)
52  {
53  this->flush();
54  }
55  }
56 }
57 
59 {
60  for (const auto& array : buffer_)
61  {
62  file_os_.write(reinterpret_cast<const char*>(array.data()), array.size());
63  }
64  file_os_.flush();
65  buffer_.clear();
66 }
67 } // namespace BT
uint16_t UID() const
Definition: tree_node.cpp:117
FileLogger(const Tree &tree, const char *filename, uint16_t buffer_size=10)
std::ofstream file_os_
static raw_event_t * buffer
Definition: minitrace.cpp:54
uint8_t * GetBufferPointer() const
Get the serialized buffer (after you call Finish()).
Definition: flatbuffers.h:1559
virtual void flush() override
void CreateFlatbuffersBehaviorTree(flatbuffers::FlatBufferBuilder &builder, const BT::Tree &tree)
std::array< uint8_t, 12 > SerializedTransition
Helper class to hold data needed in creation of a FlatBuffer. To serialize data, you typically call o...
Definition: flatbuffers.h:1442
virtual void callback(Duration timestamp, const TreeNode &node, NodeStatus prev_status, NodeStatus status) override
size_t buffer_max_size_
Struct used to store a tree. If this object goes out of scope, the tree is destroyed.
Definition: bt_factory.h:125
Abstract base class for Behavior Tree Nodes.
Definition: tree_node.h:55
std::vector< SerializedTransition > buffer_
uoffset_t GetSize() const
The current size of the serialized buffer, counting from the end.
Definition: flatbuffers.h:1551
NodeStatus
Definition: basic_types.h:35
virtual ~FileLogger() override
void enableTransitionToIdle(bool enable)
std::chrono::high_resolution_clock::duration Duration
Definition: basic_types.h:362
SerializedTransition SerializeTransition(uint16_t UID, Duration timestamp, NodeStatus prev_status, NodeStatus status)


behaviortree_cpp_v3
Author(s): Michele Colledanchise, Davide Faconti
autogenerated on Mon Jul 3 2023 02:50:14