Skip to content
Snippets Groups Projects
Commit d5ab1447 authored by Christoph Kampmeyer's avatar Christoph Kampmeyer
Browse files

wip: Adapt to TransferElement APi changes

Remove functions that do not exist anymore
parent 6b7fadc4
No related branches found
No related tags found
No related merge requests found
...@@ -33,26 +33,14 @@ namespace ChimeraTK { ...@@ -33,26 +33,14 @@ namespace ChimeraTK {
bool doWriteTransferDestructively(ChimeraTK::VersionNumber versionNumber) override; bool doWriteTransferDestructively(ChimeraTK::VersionNumber versionNumber) override;
void doReadTransfer() override;
bool doReadTransferNonBlocking() override;
bool doReadTransferLatest() override;
TransferFuture doReadTransferAsync() override;
void doPreWrite(TransferType type, VersionNumber versionNumber) override; void doPreWrite(TransferType type, VersionNumber versionNumber) override;
DataValidity dataValidity() const override;
void interrupt() override; void interrupt() override;
void setOwner(EntityOwner* owner); void setOwner(EntityOwner* owner);
void doPostRead(TransferType type, bool hasNewData) override; void doPostRead(TransferType type, bool hasNewData) override;
void doPostWrite(TransferType type, bool dataLost) override;
void doPreRead(TransferType type) override; void doPreRead(TransferType type) override;
protected: protected:
......
...@@ -102,21 +102,6 @@ namespace ChimeraTK { ...@@ -102,21 +102,6 @@ namespace ChimeraTK {
bool isWriteable() const override { return true; } bool isWriteable() const override { return true; }
void doReadTransfer() override {
assert(_withReturn);
_returnSlave->readTransfer();
}
bool doReadTransferNonBlocking() override {
assert(_withReturn);
return _returnSlave->readTransferNonBlocking();
}
bool doReadTransferLatest() override {
assert(_withReturn);
return _returnSlave->readTransferLatest();
}
void doPreRead(TransferType type) override { void doPreRead(TransferType type) override {
if(!_withReturn) throw ChimeraTK::logic_error("Read operation called on write-only variable."); if(!_withReturn) throw ChimeraTK::logic_error("Read operation called on write-only variable.");
_returnSlave->accessChannel(0).swap(ChimeraTK::NDRegisterAccessor<UserType>::buffer_2D[0]); _returnSlave->accessChannel(0).swap(ChimeraTK::NDRegisterAccessor<UserType>::buffer_2D[0]);
...@@ -143,11 +128,6 @@ namespace ChimeraTK { ...@@ -143,11 +128,6 @@ namespace ChimeraTK {
_returnSlave->postRead(type, hasNewData); _returnSlave->postRead(type, hasNewData);
} }
ChimeraTK::TransferFuture doReadTransferAsync() override {
assert(_withReturn);
return {_returnSlave->readTransferAsync(), this};
}
void doPreWrite(TransferType type, VersionNumber versionNumber) override { void doPreWrite(TransferType type, VersionNumber versionNumber) override {
for(auto& slave : FanOut<UserType>::slaves) { // send out copies to slaves for(auto& slave : FanOut<UserType>::slaves) { // send out copies to slaves
if(slave->getNumberOfSamples() != 0) { // do not send copy if no data is expected (e.g. trigger) if(slave->getNumberOfSamples() != 0) { // do not send copy if no data is expected (e.g. trigger)
......
...@@ -20,14 +20,6 @@ namespace ChimeraTK { ...@@ -20,14 +20,6 @@ namespace ChimeraTK {
MetaDataPropagatingRegisterDecorator(const boost::shared_ptr<NDRegisterAccessor<T>>& target, EntityOwner* owner) MetaDataPropagatingRegisterDecorator(const boost::shared_ptr<NDRegisterAccessor<T>>& target, EntityOwner* owner)
: NDRegisterAccessorDecorator<T, T>(target), _owner(owner) {} : NDRegisterAccessorDecorator<T, T>(target), _owner(owner) {}
bool doReadTransferNonBlocking() override {
isNonblockingRead = true;
return NDRegisterAccessorDecorator<T, T>::doReadTransferNonBlocking();
}
bool doReadTransferLatest() override {
isNonblockingRead = true;
return NDRegisterAccessorDecorator<T, T>::doReadTransferLatest();
}
void doPreRead(TransferType type) override { void doPreRead(TransferType type) override {
isNonblockingRead = false; isNonblockingRead = false;
NDRegisterAccessorDecorator<T, T>::doPreRead(type); NDRegisterAccessorDecorator<T, T>::doPreRead(type);
...@@ -36,11 +28,6 @@ namespace ChimeraTK { ...@@ -36,11 +28,6 @@ namespace ChimeraTK {
void doPostRead(TransferType type, bool hasNewData) override; void doPostRead(TransferType type, bool hasNewData) override;
void doPreWrite(TransferType type, VersionNumber versionNumber) override; void doPreWrite(TransferType type, VersionNumber versionNumber) override;
void setDataValidity(ChimeraTK::DataValidity validity = ChimeraTK::DataValidity::ok) override {
localValidity = validity;
NDRegisterAccessorDecorator<T, T>::setDataValidity(validity);
}
protected: protected:
EntityOwner* _owner; EntityOwner* _owner;
......
...@@ -103,10 +103,6 @@ namespace ChimeraTK { ...@@ -103,10 +103,6 @@ namespace ChimeraTK {
return dataLost; return dataLost;
} }
void doReadTransfer() override {
if(_handleRead) releaseLock();
_target->readTransfer();
}
/** Release the testableModeLock */ /** Release the testableModeLock */
void releaseLock() { void releaseLock() {
...@@ -114,7 +110,8 @@ namespace ChimeraTK { ...@@ -114,7 +110,8 @@ namespace ChimeraTK {
} }
/** Implement callback called by TransferFuture before it blocks in wait() */ /** Implement callback called by TransferFuture before it blocks in wait() */
void transferFutureWaitCallback() override { releaseLock(); } // TODO Removed in TE spec. Call preRead isntead, see F.4
//void transferFutureWaitCallback() override { releaseLock(); }
/** Obtain the testableModeLock if not owned yet, and decrement the counter. /** Obtain the testableModeLock if not owned yet, and decrement the counter.
*/ */
...@@ -152,30 +149,6 @@ namespace ChimeraTK { ...@@ -152,30 +149,6 @@ namespace ChimeraTK {
releaseLock(); releaseLock();
} }
bool doReadTransferNonBlocking() override {
bool newData = _target->readTransferNonBlocking();
if(!newData) return false;
return true;
}
bool doReadTransferLatest() override {
bool newData = _target->readTransferLatest();
if(!newData) return false;
// the queue has been emptied, so make sure that the testableMode_counter
// reflects this we only reduce the counter to 1, since it will be
// decremented in postRead().
if(_handleRead) {
auto& app = Application::getInstance();
assert(Application::testableModeTestLock());
if(app.testableMode_perVarCounter[_variableIdRead] > 1) {
app.testableMode_counter -= app.testableMode_perVarCounter[_variableIdRead] - 1;
app.testableMode_perVarCounter[_variableIdRead] = 1;
}
}
return true;
}
void doPostRead(TransferType type, bool hasNewData) override { void doPostRead(TransferType type, bool hasNewData) override {
if(_handleRead) obtainLockAndDecrementCounter(hasNewData); if(_handleRead) obtainLockAndDecrementCounter(hasNewData);
ChimeraTK::NDRegisterAccessorDecorator<UserType>::doPostRead(type, hasNewData); ChimeraTK::NDRegisterAccessorDecorator<UserType>::doPostRead(type, hasNewData);
......
...@@ -53,50 +53,6 @@ namespace ChimeraTK { ...@@ -53,50 +53,6 @@ namespace ChimeraTK {
} }
} }
template<typename UserType>
void ExceptionHandlingDecorator<UserType>::doReadTransfer() {
if(transferAllowed) {
ChimeraTK::NDRegisterAccessorDecorator<UserType>::doReadTransfer();
}
}
template<typename UserType>
bool ExceptionHandlingDecorator<UserType>::doReadTransferNonBlocking() {
if(transferAllowed) {
// #138 Phase 1.
// Drop the return value of doReadTransferNonBlocking. We must not return "hasNewData" but "willHaveNewData".
// This is different because postRead will block and recover, so there will always be new data for the
// calling elements to process.
// #138 Phase 2.
// Return the return value of the transfer in case of (Type == readNonBlocking() || Type == or readLatest()) && wait_for_new_data && !version == {nullptr}.
// Else return true because postRead will do a recovery and there will be new data.
(void)ChimeraTK::NDRegisterAccessorDecorator<UserType>::doReadTransferNonBlocking(); // phase 1
return true; // phase 1
}
else {
return true; // phase 1 : will always have new data
// phase 2:: Similar decision as above: Return true if the postRead will recover.
}
}
template<typename UserType>
bool ExceptionHandlingDecorator<UserType>::doReadTransferLatest() {
// see comment doReadTransferNonBlocking
if(transferAllowed) {
(void)ChimeraTK::NDRegisterAccessorDecorator<UserType>::doReadTransferLatest(); // phase 1
return true;
}
else {
return true; //Phase 1 : will always have new data
}
}
template<typename UserType>
TransferFuture ExceptionHandlingDecorator<UserType>::doReadTransferAsync() {
assert(transferAllowed); // "You have to implement ApplicationCore #157"
return ChimeraTK::NDRegisterAccessorDecorator<UserType>::doReadTransferAsync();
}
template<typename UserType> template<typename UserType>
void ExceptionHandlingDecorator<UserType>::doPreWrite(TransferType type, VersionNumber versionNumber) { void ExceptionHandlingDecorator<UserType>::doPreWrite(TransferType type, VersionNumber versionNumber) {
/* For writable accessors, copy data to the recoveryAcessor before perfroming the write. /* For writable accessors, copy data to the recoveryAcessor before perfroming the write.
...@@ -136,18 +92,6 @@ namespace ChimeraTK { ...@@ -136,18 +92,6 @@ namespace ChimeraTK {
} }
} }
template<typename UserType>
DataValidity ExceptionHandlingDecorator<UserType>::dataValidity() const {
// If there has been an exception the data cannot be OK.
// This is only considered in read mode (=feeding to the connected variable network).
if(_direction.dir == VariableDirection::feeding && previousReadFailed) {
return DataValidity::faulty;
}
// no exception, return the data validity of the accessor we are decorating
auto delegatedValidity = ChimeraTK::NDRegisterAccessorDecorator<UserType>::dataValidity();
return delegatedValidity;
}
template<typename UserType> template<typename UserType>
void ExceptionHandlingDecorator<UserType>::interrupt() { void ExceptionHandlingDecorator<UserType>::interrupt() {
// notify the condition variable waiting in reportException of the genericTransfer // notify the condition variable waiting in reportException of the genericTransfer
...@@ -216,20 +160,6 @@ namespace ChimeraTK { ...@@ -216,20 +160,6 @@ namespace ChimeraTK {
} }
} }
template<typename UserType>
void ExceptionHandlingDecorator<UserType>::doPostWrite(TransferType type, bool dataLost) {
try {
// preRead has only been delegated if the transfer was allowed. Hence we are only allowed to delegate postRead in this case.
if(transferAllowed) {
ChimeraTK::NDRegisterAccessorDecorator<UserType>::doPostWrite(type, dataLost);
}
}
catch(ChimeraTK::runtime_error& e) {
deviceModule.reportException(e.what());
deviceModule.waitForRecovery();
}
}
template<typename UserType> template<typename UserType>
void ExceptionHandlingDecorator<UserType>::doPreRead(TransferType type) { void ExceptionHandlingDecorator<UserType>::doPreRead(TransferType type) {
/* #138 Phase 1. Change this for phase 2 */ /* #138 Phase 1. Change this for phase 2 */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment