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
rosbag_fancy::MessageQueue::shutdown
void shutdown()
Definition: message_queue.cpp:56
rosbag_fancy::MessageQueue
Definition: message_queue.h:23
rosbag_fancy::MessageQueue::bytesInQueue
uint64_t bytesInQueue() const
Definition: message_queue.h:44
rosbag_fancy::MessageQueue::push
bool push(const Message &msg)
Definition: message_queue.cpp:14
rosbag_fancy::MessageQueue::pop
boost::optional< Message > pop()
Definition: message_queue.cpp:32
rosbag_fancy
Definition: bag_reader.cpp:240
rosbag_fancy::MessageQueue::MessageQueue
MessageQueue(uint64_t byteLimit)
Definition: message_queue.cpp:9
ros::MessageEvent::getConstMessage
const boost::shared_ptr< ConstMessage > & getConstMessage() const
rosbag_fancy::MessageQueue::Message
Definition: message_queue.h:26
rosbag_fancy::MessageQueue::Message::message
ros::MessageEvent< const topic_tools::ShapeShifter > message
Definition: message_queue.h:29
rosbag_fancy::MessageQueue::m_byteLimit
uint64_t m_byteLimit
Definition: message_queue.h:56
rosbag_fancy::MessageQueue::m_mutex
std::mutex m_mutex
Definition: message_queue.h:51
rosbag_fancy::MessageQueue::Message::topicData
Topic * topicData
Definition: message_queue.h:34
rosbag_fancy::MessageQueue::m_bytesInQueue
std::atomic< std::uint64_t > m_bytesInQueue
Definition: message_queue.h:54
rosbag_fancy::MessageQueue::m_shuttingDown
bool m_shuttingDown
Definition: message_queue.h:58
rosbag_fancy::MessageQueue::m_cond
std::condition_variable m_cond
Definition: message_queue.h:52
shape_shifter.h
rosbag_fancy::MessageQueue::Message::topic
std::string topic
Definition: message_queue.h:28
rosbag_fancy::Topic
Definition: topic_manager.h:15
rosbag_fancy::MessageQueue::Message::size
uint64_t size() const
Definition: message_queue.h:31
rosbag_fancy::MessageQueue::messagesInQueue
uint64_t messagesInQueue() const
Definition: message_queue.h:47
rosbag_fancy::MessageQueue::m_msgsInQueue
std::atomic< std::uint64_t > m_msgsInQueue
Definition: message_queue.h:55
rosbag_fancy::MessageQueue::m_queue
std::queue< Message > m_queue
Definition: message_queue.h:50
message_event.h
ros::MessageEvent< const topic_tools::ShapeShifter >


rosbag_fancy
Author(s):
autogenerated on Tue Feb 20 2024 03:20:59