Merge remote-tracking branch 'upstream/mueller/master' into development
This commit is contained in:
commit
939fa16d1a
@ -1,5 +1,6 @@
|
|||||||
#include "PoolDataSetBase.h"
|
#include "PoolDataSetBase.h"
|
||||||
#include "../serviceinterface/ServiceInterfaceStream.h"
|
#include "../serviceinterface/ServiceInterfaceStream.h"
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
PoolDataSetBase::PoolDataSetBase(PoolVariableIF** registeredVariablesArray,
|
PoolDataSetBase::PoolDataSetBase(PoolVariableIF** registeredVariablesArray,
|
||||||
const size_t maxFillCount):
|
const size_t maxFillCount):
|
||||||
@ -228,3 +229,20 @@ void PoolDataSetBase::setReadCommitProtectionBehaviour(
|
|||||||
this->timeoutTypeForSingleVars = timeoutType;
|
this->timeoutTypeForSingleVars = timeoutType;
|
||||||
this->mutexTimeoutForSingleVars = mutexTimeout;
|
this->mutexTimeoutForSingleVars = mutexTimeout;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* We really should supply the container as a template argument instead of writing sth like this */
|
||||||
|
//PoolDataSetBase::PoolDataSetBase(const PoolDataSetBase &otherSet):
|
||||||
|
// fillCount(otherSet.fillCount), state(otherSet.state),
|
||||||
|
// maxFillCount(otherSet.maxFillCount),
|
||||||
|
// protectEveryReadCommitCall(otherSet.protectEveryReadCommitCall),
|
||||||
|
// timeoutTypeForSingleVars(otherSet.timeoutTypeForSingleVars),
|
||||||
|
// mutexTimeoutForSingleVars(otherSet.mutexTimeoutForSingleVars) {
|
||||||
|
// if(registeredVariables != nullptr and otherSet.registeredVariables != nullptr) {
|
||||||
|
// std::memcpy(reinterpret_cast<void*>(*(this->registeredVariables)),
|
||||||
|
// reinterpret_cast<const void*>(*(otherSet.registeredVariables)),
|
||||||
|
// fillCount * sizeof(PoolVariableIF*));
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//const PoolDataSetBase& PoolDataSetBase::operator=(const PoolDataSetBase &otherSet) {
|
||||||
|
//}
|
||||||
|
@ -39,8 +39,12 @@ public:
|
|||||||
* supply a pointer to this dataset to PoolVariable
|
* supply a pointer to this dataset to PoolVariable
|
||||||
* initializations to register pool variables.
|
* initializations to register pool variables.
|
||||||
*/
|
*/
|
||||||
PoolDataSetBase(PoolVariableIF** registeredVariablesArray,
|
PoolDataSetBase(PoolVariableIF** registeredVariablesArray, const size_t maxFillCount);
|
||||||
const size_t maxFillCount);
|
|
||||||
|
/* Forbidden for now */
|
||||||
|
PoolDataSetBase(const PoolDataSetBase& otherSet) = delete;
|
||||||
|
const PoolDataSetBase& operator=(const PoolDataSetBase& otherSet) = delete;
|
||||||
|
|
||||||
virtual~ PoolDataSetBase();
|
virtual~ PoolDataSetBase();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -63,8 +67,7 @@ public:
|
|||||||
* - @c SET_WAS_ALREADY_READ if read() is called twice without calling
|
* - @c SET_WAS_ALREADY_READ if read() is called twice without calling
|
||||||
* commit() in between
|
* commit() in between
|
||||||
*/
|
*/
|
||||||
virtual ReturnValue_t read(
|
virtual ReturnValue_t read(MutexIF::TimeoutType timeoutType = MutexIF::TimeoutType::WAITING,
|
||||||
MutexIF::TimeoutType timeoutType = MutexIF::TimeoutType::WAITING,
|
|
||||||
uint32_t lockTimeout = 20) override;
|
uint32_t lockTimeout = 20) override;
|
||||||
/**
|
/**
|
||||||
* @brief The commit call initializes writing back the registered variables.
|
* @brief The commit call initializes writing back the registered variables.
|
||||||
@ -84,8 +87,7 @@ public:
|
|||||||
* - @c COMMITING_WITHOUT_READING if set was not read yet and
|
* - @c COMMITING_WITHOUT_READING if set was not read yet and
|
||||||
* contains non write-only variables
|
* contains non write-only variables
|
||||||
*/
|
*/
|
||||||
virtual ReturnValue_t commit(
|
virtual ReturnValue_t commit(MutexIF::TimeoutType timeoutType = MutexIF::TimeoutType::WAITING,
|
||||||
MutexIF::TimeoutType timeoutType = MutexIF::TimeoutType::WAITING,
|
|
||||||
uint32_t lockTimeout = 20) override;
|
uint32_t lockTimeout = 20) override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -67,9 +67,19 @@ LocalPoolDataSetBase::LocalPoolDataSetBase(
|
|||||||
|
|
||||||
|
|
||||||
LocalPoolDataSetBase::~LocalPoolDataSetBase() {
|
LocalPoolDataSetBase::~LocalPoolDataSetBase() {
|
||||||
|
/* We only delete objects which were created in the class constructor */
|
||||||
if(periodicHelper != nullptr) {
|
if(periodicHelper != nullptr) {
|
||||||
delete periodicHelper;
|
delete periodicHelper;
|
||||||
}
|
}
|
||||||
|
/* In case set was read but not comitted, we commit all variables with an invalid state */
|
||||||
|
if(state == States::STATE_SET_WAS_READ) {
|
||||||
|
for (uint16_t count = 0; count < fillCount; count++) {
|
||||||
|
if(registeredVariables[count] != nullptr) {
|
||||||
|
registeredVariables[count]->setValid(false);
|
||||||
|
registeredVariables[count]->commit(MutexIF::TimeoutType::WAITING, 20);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t LocalPoolDataSetBase::lockDataPool(
|
ReturnValue_t LocalPoolDataSetBase::lockDataPool(
|
||||||
|
@ -97,12 +97,18 @@ public:
|
|||||||
* @brief The destructor automatically manages writing the valid
|
* @brief The destructor automatically manages writing the valid
|
||||||
* information of variables.
|
* information of variables.
|
||||||
* @details
|
* @details
|
||||||
* In case the data set was read out, but not committed(indicated by state),
|
* In case the data set was read out, but not committed (indicated by state),
|
||||||
* the destructor parses all variables that are still registered to the set.
|
* the destructor parses all variables that are still registered to the set.
|
||||||
* For each, the valid flag in the data pool is set to "invalid".
|
* For each, the valid flag in the data pool is set to "invalid".
|
||||||
*/
|
*/
|
||||||
~LocalPoolDataSetBase();
|
~LocalPoolDataSetBase();
|
||||||
|
|
||||||
|
/* The copy constructor and assingment constructor are forbidden for now.
|
||||||
|
The use-cases are limited and the first step would be to implement them properly for the
|
||||||
|
base class */
|
||||||
|
LocalPoolDataSetBase(const LocalPoolDataSetBase& otherSet) = delete;
|
||||||
|
const LocalPoolDataSetBase& operator=(const LocalPoolDataSetBase& otherSet) = delete;
|
||||||
|
|
||||||
void setValidityBufferGeneration(bool withValidityBuffer);
|
void setValidityBufferGeneration(bool withValidityBuffer);
|
||||||
|
|
||||||
sid_t getSid() const;
|
sid_t getSid() const;
|
||||||
@ -153,6 +159,7 @@ public:
|
|||||||
bool hasChanged() const override;
|
bool hasChanged() const override;
|
||||||
|
|
||||||
object_id_t getCreatorObjectId();
|
object_id_t getCreatorObjectId();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
sid_t sid;
|
sid_t sid;
|
||||||
//! This mutex is used if the data is created by one object only.
|
//! This mutex is used if the data is created by one object only.
|
||||||
|
Loading…
Reference in New Issue
Block a user