11 class DataConsistencyGroup;
55 template<
typename UserType>
71 template<
typename UserType>
74 template<
typename UserBufferType>
77 return static_cast<std::vector<UserBufferType>*
>(buf);
104 template<
typename UserType>
107 using UserBufferType = std::vector<std::vector<UserType>>;
110 auto& bufferVector = *(getBufferVector<UserBufferType>(
id));
113 return getUserBuffer<UserType>(
id);
118 template<
typename UserType>
123 const auto& impl =
_targetElements.at(transferElementID).acc.getHighLevelImplElement();
124 auto acc0 = boost::dynamic_pointer_cast<NDRegisterAccessor<UserType>>(impl);
126 return acc0->accessChannels();
Data consistency matching via history of available data.
void setupHistory(const TransferElementAbstractor &element, unsigned histLen)
element must be target, i.e. not DataConsistencyDecorator
bool findMatch(TransferElementID transferElementID)
void handleMissingPostReads(TransferElementID callerId, bool updateBuffer)
TransferElementID lastUpdateCall() const
const auto & getTargetElements() const
can be used for diagnostics
TransferElementID _updateCalled
bool checkUpdate(const TransferElementID &transferElementID)
To be called from DataConsistencyDecorator.
bool _handleMissingPreReadsCalled
bool _decoratorsNeedPreRead
boost::shared_ptr< TransferElement > decorateAccessor(TransferElementAbstractor &acc)
decorate accessor by replacing its target => DataConsistencyDecorator(target), possibly at an inner l...
void add(TransferElementAbstractor &acc, unsigned histLen)
Add a push element.
~HistorizedMatcher() override
void handleMissingPreReads(TransferElementID callerId)
since after DiscardValueException, ReadAnyGroup does not call preRead at following operation,...
void updateHistory(TransferElementID transferElementID)
swap data of target buffer into history
VersionNumber _lastMatchingVersionNumber
std::vector< UserBufferType > * getBufferVector(TransferElementID id)
std::vector< std::vector< UserType > > & getUserBuffer(TransferElementID transferElementID)
return reference to target's user buffer of transfer element of this group
bool _handleMissingPostReadsCalled
HistorizedMatcher()=default
void getMatchingInfo(TransferElementID id, VersionNumber &vs, DataValidity &dv)
returns meta data of last match
std::vector< std::vector< UserType > > & getMatchingBuffer(TransferElementID id)
returns user buffer of last match
std::map< TransferElementID, TargetElement > _targetElements
VersionNumber lastMatchingVersionNumber() const
void updateCalled(const TransferElementID &transferElementID)
Base class for matcher implementations; will not be instantiated directly.
Base class for register accessors abstractors independent of the UserType.
Simple class holding a unique ID for a TransferElement.
Class for generating and holding version numbers without exposing a numeric representation.
DataValidity
The current state of the data.
std::vector< VersionNumber > versionNumbers
TransferElementAbstractor acc
target of DataConsistencyDecorator
const std::type_info & histBufferType
unsigned lastMatchingIndex
match indices set by findMatch() in case it returns true.
std::vector< DataValidity > dataValidities