simple_filter.h
Go to the documentation of this file.
00001 /*********************************************************************
00002 * Software License Agreement (BSD License)
00003 *
00004 *  Copyright (c) 2008, Willow Garage, Inc.
00005 *  All rights reserved.
00006 *
00007 *  Redistribution and use in source and binary forms, with or without
00008 *  modification, are permitted provided that the following conditions
00009 *  are met:
00010 *
00011 *   * Redistributions of source code must retain the above copyright
00012 *     notice, this list of conditions and the following disclaimer.
00013 *   * Redistributions in binary form must reproduce the above
00014 *     copyright notice, this list of conditions and the following
00015 *     disclaimer in the documentation and/or other materials provided
00016 *     with the distribution.
00017 *   * Neither the name of the Willow Garage nor the names of its
00018 *     contributors may be used to endorse or promote products derived
00019 *     from this software without specific prior written permission.
00020 *
00021 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00022 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00023 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
00024 *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
00025 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00026 *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
00027 *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00028 *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00029 *  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00030 *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
00031 *  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00032 *  POSSIBILITY OF SUCH DAMAGE.
00033 *********************************************************************/
00034 
00035 #ifndef MESSAGE_FILTERS_SIMPLE_FILTER_H
00036 #define MESSAGE_FILTERS_SIMPLE_FILTER_H
00037 
00038 #include <boost/noncopyable.hpp>
00039 
00040 #include "connection.h"
00041 #include "signal1.h"
00042 #include <ros/message_event.h>
00043 #include <ros/subscription_callback_helper.h>
00044 
00045 #include <boost/bind.hpp>
00046 
00047 #include <string>
00048 
00049 namespace message_filters
00050 {
00051 
00059 template<class M>
00060 class SimpleFilter : public boost::noncopyable
00061 {
00062 public:
00063   typedef boost::shared_ptr<M const> MConstPtr;
00064   typedef boost::function<void(const MConstPtr&)> Callback;
00065   typedef ros::MessageEvent<M const> EventType;
00066   typedef boost::function<void(const EventType&)> EventCallback;
00067 
00072   template<typename C>
00073   Connection registerCallback(const C& callback)
00074   {
00075     typename CallbackHelper1<M>::Ptr helper = signal_.addCallback(Callback(callback));
00076     return Connection(boost::bind(&Signal::removeCallback, &signal_, helper));
00077   }
00078 
00083   template<typename P>
00084   Connection registerCallback(const boost::function<void(P)>& callback)
00085   {
00086     return Connection(boost::bind(&Signal::removeCallback, &signal_, signal_.addCallback(callback)));
00087   }
00088 
00093   template<typename P>
00094   Connection registerCallback(void(*callback)(P))
00095   {
00096     return Connection(boost::bind(&Signal::removeCallback, &signal_, signal_.addCallback(callback)));
00097   }
00098 
00103   template<typename T, typename P>
00104   Connection registerCallback(void(T::*callback)(P), T* t)
00105   {
00106     typename CallbackHelper1<M>::Ptr helper = signal_.template addCallback<P>(boost::bind(callback, t, _1));
00107     return Connection(boost::bind(&Signal::removeCallback, &signal_, helper));
00108   }
00109 
00113   void setName(const std::string& name) { name_ = name; }
00117   const std::string& getName() { return name_; }
00118 
00119 protected:
00123   void signalMessage(const MConstPtr& msg)
00124   {
00125     ros::MessageEvent<M const> event(msg);
00126 
00127     signal_.call(event);
00128   }
00129 
00133   void signalMessage(const ros::MessageEvent<M const>& event)
00134   {
00135     signal_.call(event);
00136   }
00137 
00138 private:
00139   typedef Signal1<M> Signal;
00140 
00141   Signal signal_;
00142 
00143   std::string name_;
00144 };
00145 
00146 }
00147 
00148 #endif
00149 


message_filters
Author(s): Josh Faust, Vijay Pradeep
autogenerated on Mon Oct 6 2014 11:47:35