Classes | Public Types | Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | List of all members
fkie_message_filters::Divider< Inputs > Class Template Reference

Split an N-ary source into N unary ones. More...

#include <divider.h>

Inheritance diagram for fkie_message_filters::Divider< Inputs >:
Inheritance graph
[legend]

Classes

class  DividerSource
 

Public Types

using Connections = std::array< Connection, NUM_INPUTS >
 Array of connection objects. More...
 
template<std::size_t N>
using SourceType = helpers::select_nth< N, Source< Inputs >... >
 Base class of the Nth source. More...
 
- Public Types inherited from fkie_message_filters::Sink< Inputs... >
using Input = IO< Inputs... >
 Grouped input types. More...
 

Public Member Functions

Connections connect_to_sinks (Sink< Inputs > &... sinks) noexcept
 Convenience function to connect all sources at once. More...
 
void disconnect () noexcept override
 Disconnect from all connected sources and sinks. More...
 
void disconnect_from_all_sinks () noexcept
 Disconnect all sources from their sinks. More...
 
template<std::size_t N>
const Divider< Inputs... >::template SourceType< N > & source () const noexcept
 
template<std::size_t N>
const SourceType< N > & source () const noexcept
 Access the source for the Nth data element. More...
 
template<std::size_t N>
Divider< Inputs... >::template SourceType< N > & source () noexcept
 
template<std::size_t N>
SourceType< N > & source () noexcept
 Access the source for the Nth data element. More...
 
- Public Member Functions inherited from fkie_message_filters::Sink< Inputs... >
Connection connect_to_source (Source< Inputs... > &src) noexcept
 Connect this sink to a source. More...
 
void disconnect_from_all_sources () noexcept
 Disconnect from all connected sources. More...
 
virtual ~Sink ()
 
- Public Member Functions inherited from fkie_message_filters::FilterBase
virtual void reset () noexcept
 Reset filter state. More...
 
virtual ~FilterBase ()
 

Protected Member Functions

void receive (const Inputs &... in) override
 Process incoming data. More...
 

Private Member Functions

template<std::size_t N>
void connect_to_sinks_impl (Connections &conn) noexcept
 
template<std::size_t N, typename ThisSink , typename... OtherSinks>
void connect_to_sinks_impl (Connections &conn, ThisSink &sink, OtherSinks &... sinks) noexcept
 
template<std::size_t N>
void forward_to_sources ()
 
template<std::size_t N, typename ThisInput , typename... OtherInputs>
void forward_to_sources (const ThisInput &in, const OtherInputs &... ins)
 

Private Attributes

std::tuple< DividerSource< Inputs >... > sources_
 

Additional Inherited Members

- Static Public Attributes inherited from fkie_message_filters::Sink< Inputs... >
static constexpr std::size_t NUM_INPUTS
 Number of input arguments. More...
 

Detailed Description

template<class... Inputs>
class fkie_message_filters::Divider< Inputs >

Split an N-ary source into N unary ones.

The divider splits an N-ary source into its constituent elements, so they can be processed independently. It is mostly used as the penultimate pipeline filter to forward message tuples to independent Publisher instances.

Technically, the divider acts as one sink and N sources, one for each data type that is passed in. You can connect the sources independently using the source() function.

The divider will always completely separate the input arguments. If you want a partial split only, you should use one or more Selector filters instead.

using BufferIn = mf::Buffer<M1, M2>;
BufferIn buf_in;
MyDivider div;
mf::chain(buf_in, div);
div.connect_to_sinks(pub1, pub2);
See also
Combiner

Definition at line 77 of file divider.h.

Member Typedef Documentation

◆ Connections

template<class... Inputs>
using fkie_message_filters::Divider< Inputs >::Connections = std::array<Connection, NUM_INPUTS>

Array of connection objects.

Definition at line 100 of file divider.h.

◆ SourceType

template<class... Inputs>
template<std::size_t N>
using fkie_message_filters::Divider< Inputs >::SourceType = helpers::select_nth<N, Source<Inputs>...>

Base class of the Nth source.

Definition at line 102 of file divider.h.

Member Function Documentation

◆ connect_to_sinks()

template<class... Inputs>
Divider< Inputs... >::Connections fkie_message_filters::Divider< Inputs >::connect_to_sinks ( Sink< Inputs > &...  sinks)
noexcept

Convenience function to connect all sources at once.

\nothrow

Definition at line 62 of file divider_impl.h.

◆ connect_to_sinks_impl() [1/2]

template<class... Inputs>
template<std::size_t N>
void fkie_message_filters::Divider< Inputs >::connect_to_sinks_impl ( Connections conn)
privatenoexcept

Definition at line 116 of file divider_impl.h.

◆ connect_to_sinks_impl() [2/2]

template<class... Inputs>
template<std::size_t N, typename ThisSink , typename... OtherSinks>
void fkie_message_filters::Divider< Inputs >::connect_to_sinks_impl ( Connections conn,
ThisSink &  sink,
OtherSinks &...  sinks 
)
privatenoexcept

Definition at line 122 of file divider_impl.h.

◆ disconnect()

template<class... Inputs>
void fkie_message_filters::Divider< Inputs >::disconnect
overridevirtualnoexcept

Disconnect from all connected sources and sinks.

\nothrow

Reimplemented from fkie_message_filters::Sink< Inputs... >.

Definition at line 81 of file divider_impl.h.

◆ disconnect_from_all_sinks()

template<class... Inputs>
void fkie_message_filters::Divider< Inputs >::disconnect_from_all_sinks
noexcept

Disconnect all sources from their sinks.

\nothrow

Definition at line 70 of file divider_impl.h.

◆ forward_to_sources() [1/2]

template<class... Inputs>
template<std::size_t N>
void fkie_message_filters::Divider< Inputs >::forward_to_sources
private

Definition at line 102 of file divider_impl.h.

◆ forward_to_sources() [2/2]

template<class... Inputs>
template<std::size_t N, typename ThisInput , typename... OtherInputs>
void fkie_message_filters::Divider< Inputs >::forward_to_sources ( const ThisInput &  in,
const OtherInputs &...  ins 
)
private

Definition at line 108 of file divider_impl.h.

◆ receive()

template<class... Inputs>
void fkie_message_filters::Divider< Inputs >::receive ( const Inputs &...  in)
overrideprotectedvirtual

Process incoming data.

Derived classes need to override this method to handle all data that is to be consumed by the sink.

\abstractthrow

Implements fkie_message_filters::Sink< Inputs... >.

Definition at line 95 of file divider_impl.h.

◆ source() [1/4]

template<class... Inputs>
template<std::size_t N>
const Divider<Inputs...>::template SourceType<N>& fkie_message_filters::Divider< Inputs >::source ( ) const
noexcept

Definition at line 56 of file divider_impl.h.

◆ source() [2/4]

template<class... Inputs>
template<std::size_t N>
const SourceType<N>& fkie_message_filters::Divider< Inputs >::source ( ) const
noexcept

Access the source for the Nth data element.

◆ source() [3/4]

template<class... Inputs>
template<std::size_t N>
Divider<Inputs...>::template SourceType<N>& fkie_message_filters::Divider< Inputs >::source ( )
noexcept

Definition at line 49 of file divider_impl.h.

◆ source() [4/4]

template<class... Inputs>
template<std::size_t N>
SourceType<N>& fkie_message_filters::Divider< Inputs >::source ( )
noexcept

Access the source for the Nth data element.

Member Data Documentation

◆ sources_

template<class... Inputs>
std::tuple<DividerSource<Inputs>...> fkie_message_filters::Divider< Inputs >::sources_
private

Definition at line 133 of file divider.h.


The documentation for this class was generated from the following files:
fkie_message_filters
Definition: buffer.h:33
fkie_message_filters::chain
void chain(Filter1 &flt1, Filter2 &flt2, MoreFilters &... filters) noexcept
Convenience function to chain multiple filters.
Definition: filter_impl.h:71
fkie_message_filters::Publisher
Publish consumed data on a ROS topic.
Definition: publisher.h:69
fkie_message_filters::Buffer
Store and forward data.
Definition: buffer.h:121
fkie_message_filters::Divider
Split an N-ary source into N unary ones.
Definition: divider.h:77


fkie_message_filters
Author(s): Timo Röhling
autogenerated on Wed Mar 2 2022 00:18:57