7#include <ChimeraTK/NDRegisterAccessorDecorator.h>
17 template<
typename UserType>
20 ConsumingFanOut(boost::shared_ptr<ChimeraTK::NDRegisterAccessor<UserType>> feedingImpl,
23 void doPostRead(TransferType type,
bool updateDataBuffer)
override;
28 using ChimeraTK::NDRegisterAccessor<UserType>::buffer_2D;
34 template<
typename UserType>
37 :
FanOut<UserType>(feedingImpl),
ChimeraTK::NDRegisterAccessorDecorator<UserType>(feedingImpl) {
38 assert(feedingImpl->isReadable());
43 for(
auto el : consumerImplementationPairs) {
50 template<
typename UserType>
52 ChimeraTK::NDRegisterAccessorDecorator<UserType>::doPostRead(type, updateDataBuffer);
54 if(updateDataBuffer) {
58 _lastReceivedValue = buffer_2D[0];
66 if(slave->getNumberOfSamples() != 0) {
67 slave->accessChannel(0) = _lastReceivedValue;
69 slave->setDataValidity(this->dataValidity());
70 slave->writeDestructively();
76 template<
typename UserType>
80 if(this->_accessModeFlags.has(AccessMode::wait_for_new_data)) {
81 ChimeraTK::NDRegisterAccessorDecorator<UserType>::interrupt();
FanOut implementation which acts as a read-only (i.e.
void interrupt() override
std::vector< UserType > _lastReceivedValue
ConsumingFanOut(boost::shared_ptr< ChimeraTK::NDRegisterAccessor< UserType > > feedingImpl, ConsumerImplementationPairs< UserType > const &consumerImplementationPairs)
void doPostRead(TransferType type, bool updateDataBuffer) override
Base class for several implementations which distribute values from one feeder to multiple consumers.
virtual void addSlave(boost::shared_ptr< ChimeraTK::NDRegisterAccessor< UserType > > slave, VariableNetworkNode &)
Add a slave to the FanOut.
InvalidityTracer application module.
std::list< std::pair< boost::shared_ptr< ChimeraTK::NDRegisterAccessor< UserType > >, VariableNetworkNode > > ConsumerImplementationPairs