20 #ifndef INCLUDE_FKIE_MESSAGE_FILTERS_SINK_IMPL_H_ 21 #define INCLUDE_FKIE_MESSAGE_FILTERS_SINK_IMPL_H_ 29 template<
typename... Inputs>
36 if (!
running_.insert(this_id_).second)
38 throw std::logic_error(
"recursive invocation detected");
53 template<
typename... Inputs>
56 std::lock_guard<std::mutex> lock(
mutex_);
62 template<
typename... Inputs>
65 std::lock_guard<std::mutex> lock(
mutex_);
69 template<
typename... Inputs>
75 template<
typename... Inputs>
78 std::unique_lock<std::mutex> lock(
mutex_);
80 ReentryProtector p{*
this};
Base class for data consumers.
boost::signals2::connection Connection
Tracks connections from sources to sinks.
void receive_cb(const Connection &, const Inputs &... in)
virtual void receive(const Inputs &... in)=0
Process incoming data.
Base class for data providers.
void disconnect_from_all_sources() noexcept
Disconnect from all connected sources.
Connection connect_to_source(Source< Inputs... > &src) noexcept
Connect this sink to a source.
std::vector< boost::signals2::scoped_connection > conn_
const std::thread::id this_id_
std::set< std::thread::id > & running_
ScopedUnlock< BasicLockable > with_scoped_unlock(BasicLockable &lockable)
ReentryProtector(Sink< Inputs... > &parent)
virtual void disconnect() noexcept override
Disconnect from all connected sources.
std::set< std::thread::id > running_