Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
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