#ifndef GLOBALPOOLVARIABLE_TPP_ #define GLOBALPOOLVARIABLE_TPP_ template inline GlobPoolVar::GlobPoolVar(uint32_t set_id, DataSetIF* dataSet, ReadWriteMode_t setReadWriteMode): dataPoolId(set_id), valid(PoolVariableIF::INVALID), readWriteMode(setReadWriteMode) { if (dataSet != nullptr) { dataSet->registerVariable(this); } } template inline ReturnValue_t GlobPoolVar::read(uint32_t lockTimeout) { ReturnValue_t result = glob::dataPool.lockDataPool(lockTimeout); if(result != HasReturnvaluesIF::RETURN_OK) { return result; } result = readWithoutLock(); ReturnValue_t unlockResult = glob::dataPool.unlockDataPool(); if(unlockResult != HasReturnvaluesIF::RETURN_OK) { sif::error << "GlobPoolVar::read: Could not unlock global data pool" << std::endl; } return result; } template inline ReturnValue_t GlobPoolVar::commit(uint32_t lockTimeout) { ReturnValue_t result = glob::dataPool.lockDataPool(lockTimeout); if(result != HasReturnvaluesIF::RETURN_OK) { return result; } result = commitWithoutLock(); ReturnValue_t unlockResult = glob::dataPool.unlockDataPool(); if(unlockResult != HasReturnvaluesIF::RETURN_OK) { sif::error << "GlobPoolVar::read: Could not unlock global data pool" << std::endl; } return result; } template inline ReturnValue_t GlobPoolVar::readWithoutLock() { PoolEntry* read_out = glob::dataPool.getData(dataPoolId, 1); if (read_out != NULL) { valid = read_out->valid; value = *(read_out->address); return HasReturnvaluesIF::RETURN_OK; } else { value = 0; valid = false; sif::error << "PoolVariable: read of DP Variable 0x" << std::hex << dataPoolId << std::dec << " failed." << std::endl; return HasReturnvaluesIF::RETURN_FAILED; } } template inline ReturnValue_t GlobPoolVar::commitWithoutLock() { PoolEntry* write_back = glob::dataPool.getData(dataPoolId, 1); if ((write_back != NULL) && (readWriteMode != VAR_READ)) { write_back->valid = valid; *(write_back->address) = value; return HasReturnvaluesIF::RETURN_OK; } else { return HasReturnvaluesIF::RETURN_FAILED; } } template inline GlobPoolVar::GlobPoolVar(): dataPoolId(PoolVariableIF::NO_PARAMETER), valid(PoolVariableIF::INVALID), readWriteMode(VAR_READ), value(0) {} template inline GlobPoolVar::GlobPoolVar(const GlobPoolVar& rhs) : dataPoolId(rhs.dataPoolId), valid(rhs.valid), readWriteMode( rhs.readWriteMode), value(rhs.value) {} template inline pool_rwm_t GlobPoolVar::getReadWriteMode() const { return readWriteMode; } template inline uint32_t GlobPoolVar::getDataPoolId() const { return dataPoolId; } template inline void GlobPoolVar::setDataPoolId(uint32_t poolId) { dataPoolId = poolId; } template inline bool GlobPoolVar::isValid() const { if (valid) return true; else return false; } template inline uint8_t GlobPoolVar::getValid() { return valid; } template inline void GlobPoolVar::setValid(bool valid) { this->valid = valid; } #endif