10 template<
typename UserType,
typename TargetUserType>
16 _converterLoopHelper = RawConverter::ConverterLoopHelper::makeConverterLoopHelperFixedRaw<UserType, TargetUserType>(
17 registerInfo, 0 , 0 , *
this);
22 template<
typename UserType,
typename TargetUserType>
24 _target->preRead(type);
29 template<
typename UserType,
typename TargetUserType>
31 _target->postRead(type, hasNewData);
36 _converterLoopHelper->doPostRead();
38 this->_dataValidity = _target->dataValidity();
39 this->_versionNumber = _target->getVersionNumber();
45 template<
typename UserType,
typename TargetUserType>
50 for(
auto [itsrc, itdst] = std::make_pair(_target->accessChannel(0).begin(), buffer_2D[0].begin());
51 itdst != buffer_2D[0].end(); ++itsrc, ++itdst) {
52 if constexpr(!std::is_same_v<RawType, ChimeraTK::Void>) {
60 template<
typename UserType,
typename TargetUserType>
62 _converterLoopHelper->doPreWrite();
63 _target->setDataValidity(this->_dataValidity);
64 _target->preWrite(type, versionNumber);
70 template<
typename UserType,
typename TargetUserType>
75 for(
auto [itsrc, itdst] = std::make_pair(buffer_2D[0].begin(), _target->accessChannel(0).begin());
76 itsrc != buffer_2D[0].end(); ++itsrc, ++itdst) {
77 if constexpr(!std::is_same_v<RawType, ChimeraTK::Void>) {
78 *itdst = converter.
toRaw(*itsrc);
85 template<
typename UserType,
typename TargetUserType>
87 _target->postWrite(type, versionNumber);
92 template<
typename UserType,
typename TargetUserType>
94 const boost::shared_ptr<ChimeraTK::TransferElement const>& other)
const {
95 auto casted = boost::dynamic_pointer_cast<ConvertingDecorator<UserType, TargetUserType>
const>(other);
99 if(_registerInfo != casted->_registerInfo) {
102 return _target->mayReplaceOther(casted->_target);
#define INSTANTIATE_MULTI_TEMPLATE_FOR_CHIMERATK_USER_TYPES(TemplateClass,...)
void doPostReadImpl(RawConverter::Converter< CookedType, RawType, sc, fc, isSigned > converter, size_t implParameter)
void doPreWriteImpl(RawConverter::Converter< CookedType, RawType, sc, fc, isSigned > converter, size_t implParameter)
void doPostWrite(TransferType type, VersionNumber versionNumber) override
Backend specific implementation of postWrite().
std::unique_ptr< RawConverter::ConverterLoopHelper > _converterLoopHelper
bool mayReplaceOther(const boost::shared_ptr< ChimeraTK::TransferElement const > &other) const override
void doPostRead(TransferType type, bool hasNewData) override
Backend specific implementation of postRead().
void doPreRead(TransferType type) override
Backend specific implementation of preRead().
void doPreWrite(TransferType type, VersionNumber versionNumber) override
Backend specific implementation of preWrite().
ConvertingDecorator(const boost::shared_ptr< ChimeraTK::NDRegisterAccessor< TargetUserType > > &target, NumericAddressedRegisterInfo const ®isterInfo)
Base class for decorators of the NDRegisterAccessor.
N-dimensional register accessor.
unsigned int getNumberOfChannels() const override
Return number of channels in register.
Converter class for conversions from raw to cooked values.
UserType toCooked(RawType rawValue)
RawType toRaw(UserType cookedValue)
Class for generating and holding version numbers without exposing a numeric representation.
TransferType
Used to indicate the applicable operation on a Transferelement.