#pragma once #include #include #include template inline LocalPoolVar::LocalPoolVar(lp_id_t poolId, HasHkPoolParametersIF* hkOwner, pool_rwm_t setReadWriteMode, DataSetIF* dataSet): localPoolId(poolId),readWriteMode(setReadWriteMode) { hkManager = hkOwner->getHkManagerHandle(); if(dataSet != nullptr) { dataSet->registerVariable(this); } } template inline LocalPoolVar::LocalPoolVar(lp_id_t poolId, object_id_t poolOwner, pool_rwm_t setReadWriteMode, DataSetIF *dataSet): readWriteMode(readWriteMode) { HasHkPoolParametersIF* hkOwner = objectManager->get(poolOwner); if(hkOwner == nullptr) { sif::error << "LocalPoolVariable: The supplied pool owner did not implement" "the correct interface HasHkPoolParametersIF!" << std::endl; objectValid = false; return; } hkManager = hkOwner->getHkManagerHandle(); if(dataSet != nullptr) { dataSet->registerVariable(this); } } template inline ReturnValue_t LocalPoolVar::read() { if(readWriteMode == pool_rwm_t::VAR_WRITE) { sif::debug << "LocalPoolVar: Invalid read write " "mode for read() call." << std::endl; // TODO: special return value return HasReturnvaluesIF::RETURN_FAILED; } MutexHelper(hkManager->getMutexHandle(), MutexIF::NO_TIMEOUT); PoolEntry* poolEntry = nullptr; ReturnValue_t result = hkManager->fetchPoolEntry(localPoolId, poolEntry); if(result != RETURN_OK) { return result; } this->value = *(poolEntry->address); return RETURN_OK; } template inline ReturnValue_t LocalPoolVar::commit() { if(readWriteMode == pool_rwm_t::VAR_READ) { sif::debug << "LocalPoolVar: Invalid read write " "mode for commit() call." << std::endl; // TODO: special return value return HasReturnvaluesIF::RETURN_FAILED; } MutexHelper(hkManager->getMutexHandle(), MutexIF::NO_TIMEOUT); PoolEntry* poolEntry = nullptr; ReturnValue_t result = hkManager->fetchPoolEntry(localPoolId, poolEntry); if(result != RETURN_OK) { return result; } *(poolEntry->address) = this->value; return RETURN_OK; } template inline pool_rwm_t LocalPoolVar::getReadWriteMode() const { return readWriteMode; } template inline lp_id_t LocalPoolVar::getDataPoolId() const { return localPoolId; } template inline bool LocalPoolVar::isValid() const { return valid; } template inline void LocalPoolVar::setValid(uint8_t validity) { this->valid = validity; } template inline ReturnValue_t LocalPoolVar::serialize(uint8_t** buffer, size_t* size, const size_t max_size, bool bigEndian) const { return AutoSerializeAdapter::serialize(&value, buffer, size ,max_size, bigEndian); } template inline size_t LocalPoolVar::getSerializedSize() const { return AutoSerializeAdapter::getSerializedSize(&value); } template inline ReturnValue_t LocalPoolVar::deSerialize(const uint8_t** buffer, size_t* size, bool bigEndian) { return AutoSerializeAdapter::deSerialize(&value, buffer, size, bigEndian); }