message_queue.h
Go to the documentation of this file.
1 // In-Memory message buffer
2 // Author: Max Schwarz <max.schwarz@ais.uni-bonn.de>
3 
4 #ifndef ROSBAG_FANCY_MESSAGE_QUEUE_H
5 #define ROSBAG_FANCY_MESSAGE_QUEUE_H
6 
7 #include <atomic>
8 #include <queue>
9 #include <mutex>
10 #include <condition_variable>
11 
12 #include <boost/optional.hpp>
13 
14 #include <ros/message_event.h>
15 
17 
18 namespace rosbag_fancy
19 {
20 
21 struct Topic;
22 
24 {
25 public:
26  struct Message
27  {
28  std::string topic;
30 
31  uint64_t size() const
32  { return message.getConstMessage()->size(); }
33 
35  };
36 
37  explicit MessageQueue(uint64_t byteLimit);
38 
39  bool push(const Message& msg);
40  boost::optional<Message> pop();
41 
42  void shutdown();
43 
44  uint64_t bytesInQueue() const
45  { return m_bytesInQueue; }
46 
47  uint64_t messagesInQueue() const
48  { return m_msgsInQueue; }
49 private:
50  std::queue<Message> m_queue;
51  std::mutex m_mutex;
52  std::condition_variable m_cond;
53 
54  std::atomic<std::uint64_t> m_bytesInQueue{0};
55  std::atomic<std::uint64_t> m_msgsInQueue{0};
56  uint64_t m_byteLimit;
57 
58  bool m_shuttingDown{false};
59 };
60 
61 }
62 
63 #endif
const boost::shared_ptr< ConstMessage > & getConstMessage() const
boost::optional< Message > pop()
std::queue< Message > m_queue
Definition: message_queue.h:50
bool push(const Message &msg)
MessageQueue(uint64_t byteLimit)
ros::MessageEvent< const topic_tools::ShapeShifter > message
Definition: message_queue.h:29
std::atomic< std::uint64_t > m_bytesInQueue
Definition: message_queue.h:54
std::condition_variable m_cond
Definition: message_queue.h:52
std::atomic< std::uint64_t > m_msgsInQueue
Definition: message_queue.h:55
uint64_t bytesInQueue() const
Definition: message_queue.h:44
uint64_t messagesInQueue() const
Definition: message_queue.h:47


rosbag_fancy
Author(s):
autogenerated on Fri Dec 9 2022 04:00:09