publisher_manager.h
Go to the documentation of this file.
1 /*********************************************************************
2 * Software License Agreement (BSD License)
3 *
4 * Copyright (c) 2010, Willow Garage, Inc.
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * * Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * * Redistributions in binary form must reproduce the above
14 * copyright notice, this list of conditions and the following
15 * disclaimer in the documentation and/or other materials provided
16 * with the distribution.
17 * * Neither the name of the Willow Garage nor the names of its
18 * contributors may be used to endorse or promote products derived
19 * from this software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 * POSSIBILITY OF SUCH DAMAGE.
33 *********************************************************************/
34 
35 #ifndef ROSRT_PUBLISHER_MANAGER_H
36 #define ROSRT_PUBLISHER_MANAGER_H
37 
38 #include "mwsr_queue.h"
39 
40 #include <ros/atomic.h>
41 #include <ros/publisher.h>
42 #include <rosrt/publisher.h>
43 #include <lockfree/object_pool.h>
44 #include <boost/thread.hpp>
45 
46 namespace rosrt
47 {
48 
49 struct InitOptions;
50 
51 namespace detail
52 {
53 class PublishQueue
54 {
55 public:
56  struct PubItem
57  {
62  };
63 
64  PublishQueue(uint32_t size);
65 
66  bool push(const ros::Publisher& pub, const VoidConstPtr& msg, PublishFunc pub_func, CloneFunc clone_func);
67  uint32_t publishAll();
68 
69 private:
70  MWSRQueue<PubItem> queue_;
71 };
72 
73 class PublisherManager
74 {
75 public:
76  PublisherManager(const InitOptions& ops);
78  bool publish(const ros::Publisher& pub, const VoidConstPtr& msg, PublishFunc pub_func, CloneFunc clone_func);
79 
80 private:
81  void publishThread();
82 
83  PublishQueue queue_;
84  boost::condition_variable cond_;
85  boost::mutex cond_mutex_;
86  boost::thread pub_thread_;
87  ros::atomic<uint32_t> pub_count_;
88  volatile bool running_;
89 };
90 
91 } // namespace detail
92 } // namespace rosrt
93 
94 #endif // ROSRT_PUBLISHER_MANAGER_H
95 
rosrt::detail::PublisherManager::queue_
PublishQueue queue_
Definition: publisher_manager.h:115
ros::Publisher
object_pool.h
boost::shared_ptr< void const >
rosrt::PublishFunc
void(* PublishFunc)(const ros::Publisher &pub, const VoidConstPtr &msg)
Definition: publisher.h:82
rosrt
Definition: managers.h:38
rosrt::CloneFunc
VoidConstPtr(* CloneFunc)(const VoidConstPtr &msg)
Definition: publisher.h:83
rosrt::detail::PublishQueue::PubItem::pub
ros::Publisher pub
Definition: publisher_manager.h:90
rosrt::detail::PublisherManager::running_
volatile bool running_
Definition: publisher_manager.h:120
rosrt::detail::PublisherManager::~PublisherManager
~PublisherManager()
Definition: publisher.cpp:166
publisher.h
rosrt::detail::PublishQueue::PubItem::pub_func
PublishFunc pub_func
Definition: publisher_manager.h:92
rosrt::detail::PublishQueue::queue_
MWSRQueue< PubItem > queue_
Definition: publisher_manager.h:102
rosrt::detail::PublisherManager::PublisherManager
PublisherManager(const InitOptions &ops)
Definition: publisher.cpp:158
rosrt::detail::PublishQueue::push
bool push(const ros::Publisher &pub, const VoidConstPtr &msg, PublishFunc pub_func, CloneFunc clone_func)
Definition: publisher.cpp:124
rosrt::detail::PublishQueue::PublishQueue
PublishQueue(uint32_t size)
Definition: publisher.cpp:119
rosrt::detail::PublisherManager::pub_count_
ros::atomic< uint32_t > pub_count_
Definition: publisher_manager.h:119
atomic.h
rosrt::detail::PublisherManager::publish
bool publish(const ros::Publisher &pub, const VoidConstPtr &msg, PublishFunc pub_func, CloneFunc clone_func)
Definition: publisher.cpp:195
rosrt::detail::PublisherManager::pub_thread_
boost::thread pub_thread_
Definition: publisher_manager.h:118
publisher.h
rosrt::detail::PublisherManager::cond_mutex_
boost::mutex cond_mutex_
Definition: publisher_manager.h:117
rosrt::detail::PublisherManager::publishThread
void publishThread()
Definition: publisher.cpp:173
mwsr_queue.h
rosrt::detail::PublishQueue::publishAll
uint32_t publishAll()
Definition: publisher.cpp:134
rosrt::detail::PublishQueue::PubItem::msg
VoidConstPtr msg
Definition: publisher_manager.h:91
rosrt::detail::PublisherManager::cond_
boost::condition_variable cond_
Definition: publisher_manager.h:116
rosrt::detail::PublishQueue::PubItem::clone_func
CloneFunc clone_func
Definition: publisher_manager.h:93


rosrt
Author(s): Josh Faust
autogenerated on Wed Mar 2 2022 00:54:17