Chains a dynamic number of simple filters together. Allows retrieval of filters by index after they are added. More...
#include <chain.h>
Classes | |
struct | FilterInfo |
struct | NullDeleter |
Public Types | |
typedef ros::MessageEvent< M const > | EventType |
typedef boost::shared_ptr< M const > | MConstPtr |
Public Member Functions | |
void | add (const MConstPtr &msg) |
Add a message to the start of this chain. | |
void | add (const EventType &evt) |
template<class F > | |
size_t | addFilter (F *filter) |
Add a filter to this chain, by bare pointer. Returns the index of that filter in the chain. | |
template<class F > | |
size_t | addFilter (const boost::shared_ptr< F > &filter) |
Add a filter to this chain, by shared_ptr. Returns the index of that filter in the chain. | |
Chain () | |
Default constructor. | |
template<typename F > | |
Chain (F &f) | |
Constructor with filter. Calls connectInput(f) | |
template<class F > | |
void | connectInput (F &f) |
Connect this filter's input to another filter's output. | |
template<typename F > | |
boost::shared_ptr< F > | getFilter (size_t index) const |
Retrieve a filter from this chain by index. Returns an empty shared_ptr if the index is greater than the size of the chain. NOT type-safe. | |
Protected Member Functions | |
virtual boost::shared_ptr< void > | getFilterForIndex (size_t index) const |
Private Types | |
typedef std::vector< FilterInfo > | V_FilterInfo |
Private Member Functions | |
void | incomingCB (const EventType &evt) |
void | lastFilterCB (const EventType &evt) |
Private Attributes | |
V_FilterInfo | filters_ |
Connection | incoming_connection_ |
Connection | last_filter_connection_ |
Chains a dynamic number of simple filters together. Allows retrieval of filters by index after they are added.
The Chain filter provides a container for simple filters. It allows you to store an N-long set of filters inside a single structure, making it much easier to manage them.
Adding filters to the chain is done by adding shared_ptrs of them to the filter. They are automatically connected to each other and the output of the last filter in the chain is forwarded to the callback you've registered with Chain::registerCallback
Example:
void myCallback(const MsgConstPtr& msg) { } Chain<Msg> c; c.addFilter(boost::make_shared<PassThrough<Msg> >()); c.addFilter(boost::make_shared<PassThrough<Msg> >()); c.registerCallback(myCallback);
It is also possible to pass bare pointers in, which will not be automatically deleted when Chain is destructed:
Chain<Msg> c; PassThrough<Msg> p; c.addFilter(&p); c.registerCallback(myCallback);
typedef ros::MessageEvent<M const> message_filters::Chain< M >::EventType |
Reimplemented from message_filters::SimpleFilter< M >.
typedef boost::shared_ptr<M const> message_filters::Chain< M >::MConstPtr |
Reimplemented from message_filters::SimpleFilter< M >.
typedef std::vector<FilterInfo> message_filters::Chain< M >::V_FilterInfo [private] |
message_filters::Chain< M >::Chain | ( | ) | [inline] |
void message_filters::Chain< M >::add | ( | const MConstPtr & | msg | ) | [inline] |
void message_filters::Chain< M >::add | ( | const EventType & | evt | ) | [inline] |
size_t message_filters::Chain< M >::addFilter | ( | F * | filter | ) | [inline] |
size_t message_filters::Chain< M >::addFilter | ( | const boost::shared_ptr< F > & | filter | ) | [inline] |
void message_filters::Chain< M >::connectInput | ( | F & | f | ) | [inline] |
boost::shared_ptr<F> message_filters::Chain< M >::getFilter | ( | size_t | index | ) | const [inline] |
Retrieve a filter from this chain by index. Returns an empty shared_ptr if the index is greater than the size of the chain. NOT type-safe.
F | [template] The type of the filter |
index | The index of the filter (returned by addFilter()) |
Reimplemented from message_filters::ChainBase.
virtual boost::shared_ptr<void> message_filters::Chain< M >::getFilterForIndex | ( | size_t | index | ) | const [inline, protected, virtual] |
Implements message_filters::ChainBase.
void message_filters::Chain< M >::incomingCB | ( | const EventType & | evt | ) | [inline, private] |
void message_filters::Chain< M >::lastFilterCB | ( | const EventType & | evt | ) | [inline, private] |
V_FilterInfo message_filters::Chain< M >::filters_ [private] |
Connection message_filters::Chain< M >::incoming_connection_ [private] |
Connection message_filters::Chain< M >::last_filter_connection_ [private] |