From bf574c12e4ea8397062d17a3e047e7de7d223437 Mon Sep 17 00:00:00 2001 From: "Robin.Mueller" Date: Mon, 28 Sep 2020 21:09:56 +0200 Subject: [PATCH] bugfixes, owner ptr not const anymore --- datapoollocal/LocalDataPoolManager.cpp | 3 ++- datapoollocal/LocalDataPoolManager.h | 2 +- datapoollocal/LocalPoolDataSetBase.cpp | 20 ++++++++++++-- datapoollocal/LocalPoolDataSetBase.h | 4 ++- datapoollocal/LocalPoolVariable.tpp | 37 +++++++++++++------------- housekeeping/HousekeepingSetPacket.h | 2 +- 6 files changed, 44 insertions(+), 24 deletions(-) diff --git a/datapoollocal/LocalDataPoolManager.cpp b/datapoollocal/LocalDataPoolManager.cpp index f07f458ec..1a8239ae9 100644 --- a/datapoollocal/LocalDataPoolManager.cpp +++ b/datapoollocal/LocalDataPoolManager.cpp @@ -229,7 +229,7 @@ MutexIF* LocalDataPoolManager::getMutexHandle() { return mutex; } -const HasLocalDataPoolIF* LocalDataPoolManager::getOwner() const { +HasLocalDataPoolIF* LocalDataPoolManager::getOwner() { return owner; } @@ -374,6 +374,7 @@ ReturnValue_t LocalDataPoolManager::generateSetStructurePacket(sid_t sid, return HasReturnvaluesIF::RETURN_FAILED; } + bool targetIsDiagnostics = dataSet->isDiagnostics(); if((targetIsDiagnostics and not isDiagnostics) or (not targetIsDiagnostics and isDiagnostics)) { diff --git a/datapoollocal/LocalDataPoolManager.h b/datapoollocal/LocalDataPoolManager.h index 6fb51b3e3..e55efa9c5 100644 --- a/datapoollocal/LocalDataPoolManager.h +++ b/datapoollocal/LocalDataPoolManager.h @@ -127,7 +127,7 @@ public: */ ReturnValue_t initializeHousekeepingPoolEntriesOnce(); - const HasLocalDataPoolIF* getOwner() const; + HasLocalDataPoolIF* getOwner(); ReturnValue_t printPoolEntry(lp_id_t localPoolId); diff --git a/datapoollocal/LocalPoolDataSetBase.cpp b/datapoollocal/LocalPoolDataSetBase.cpp index c280e7c7e..da0a86b2c 100644 --- a/datapoollocal/LocalPoolDataSetBase.cpp +++ b/datapoollocal/LocalPoolDataSetBase.cpp @@ -119,8 +119,14 @@ ReturnValue_t LocalPoolDataSetBase::unlockDataPool() { } ReturnValue_t LocalPoolDataSetBase::serializeLocalPoolIds(uint8_t** buffer, - size_t* size, size_t maxSize, - SerializeIF::Endianness streamEndianness) const { + size_t* size, size_t maxSize,SerializeIF::Endianness streamEndianness, + bool serializeFillCount) const { + // Serialize as uint8_t + uint8_t fillCount = this->fillCount; + if(serializeFillCount) { + SerializeAdapter::serialize(&fillCount, buffer, size, maxSize, + streamEndianness); + } for (uint16_t count = 0; count < fillCount; count++) { lp_id_t currentPoolId = registeredVariables[count]->getDataPoolId(); auto result = SerializeAdapter::serialize(¤tPoolId, buffer, @@ -135,6 +141,16 @@ ReturnValue_t LocalPoolDataSetBase::serializeLocalPoolIds(uint8_t** buffer, } +uint8_t LocalPoolDataSetBase::getLocalPoolIdsSerializedSize( + bool serializeFillCount) const { + if(serializeFillCount) { + return fillCount * sizeof(lp_id_t) + sizeof(uint8_t); + } + else { + return fillCount * sizeof(lp_id_t); + } +} + size_t LocalPoolDataSetBase::getSerializedSize() const { if(withValidityBuffer) { uint8_t validityMaskSize = std::ceil(static_cast(fillCount)/8.0); diff --git a/datapoollocal/LocalPoolDataSetBase.h b/datapoollocal/LocalPoolDataSetBase.h index 83e0425cd..4f277123b 100644 --- a/datapoollocal/LocalPoolDataSetBase.h +++ b/datapoollocal/LocalPoolDataSetBase.h @@ -97,7 +97,9 @@ public: size_t *size, SerializeIF::Endianness streamEndianness); ReturnValue_t serializeLocalPoolIds(uint8_t** buffer, size_t* size, size_t maxSize, - SerializeIF::Endianness streamEndianness) const; + SerializeIF::Endianness streamEndianness, + bool serializeFillCount = true) const; + uint8_t getLocalPoolIdsSerializedSize(bool serializeFillCount = true) const; /** * Set the dataset valid or invalid diff --git a/datapoollocal/LocalPoolVariable.tpp b/datapoollocal/LocalPoolVariable.tpp index 09d10acc7..b47e602ca 100644 --- a/datapoollocal/LocalPoolVariable.tpp +++ b/datapoollocal/LocalPoolVariable.tpp @@ -9,36 +9,37 @@ template inline LocalPoolVar::LocalPoolVar(lp_id_t poolId, HasLocalDataPoolIF* hkOwner, DataSetIF* dataSet, pool_rwm_t setReadWriteMode): - localPoolId(poolId),readWriteMode(setReadWriteMode) { + localPoolId(poolId), readWriteMode(setReadWriteMode) { if(poolId == PoolVariableIF::NO_PARAMETER) { - sif::warning << "LocalPoolVector: 0 passed as pool ID, which is the " - "NO_PARAMETER value!" << std::endl; + sif::warning << "LocalPoolVar::LocalPoolVar: 0 passed as pool ID, " + << "which is the NO_PARAMETER value!" << std::endl; } if(hkOwner == nullptr) { - sif::error << "LocalPoolVariable: The supplied pool owner is a nullptr!" - << std::endl; + sif::error << "LocalPoolVar::LocalPoolVar: The supplied pool " + << "owner is a invalid!" << std::endl; return; } hkManager = hkOwner->getHkManagerHandle(); if(dataSet != nullptr) { - dataSet->registerVariable(this); + dataSet->registerVariable(this); } } template inline LocalPoolVar::LocalPoolVar(lp_id_t poolId, object_id_t poolOwner, - DataSetIF *dataSet, pool_rwm_t setReadWriteMode): - readWriteMode(setReadWriteMode) { - if(poolId == PoolVariableIF::NO_PARAMETER) { - sif::warning << "LocalPoolVector: 0 passed as pool ID, which is the " - "NO_PARAMETER value!" << std::endl; - } - HasLocalDataPoolIF* hkOwner = - objectManager->get(poolOwner); - if(hkOwner == nullptr) { - sif::error << "LocalPoolVariable: The supplied pool owner did not implement" - "the correct interface HasHkPoolParametersIF!" << std::endl; - return; + DataSetIF *dataSet, pool_rwm_t setReadWriteMode): + localPoolId(poolId), readWriteMode(setReadWriteMode) { + if(poolId == PoolVariableIF::NO_PARAMETER) { + sif::warning << "LocalPoolVar::LocalPoolVar: 0 passed as pool ID, " + << "which is the NO_PARAMETER value!" << std::endl; + } + HasLocalDataPoolIF* hkOwner = + objectManager->get(poolOwner); + if(hkOwner == nullptr) { + sif::error << "LocalPoolVariable: The supplied pool owner did not " + << "implement the correct interface " + << "HasLocalDataPoolIF!" << std::endl; + return; } hkManager = hkOwner->getHkManagerHandle(); if(dataSet != nullptr) { diff --git a/housekeeping/HousekeepingSetPacket.h b/housekeeping/HousekeepingSetPacket.h index 051e4c614..f94720d4c 100644 --- a/housekeeping/HousekeepingSetPacket.h +++ b/housekeeping/HousekeepingSetPacket.h @@ -28,7 +28,7 @@ public: size_t getSerializedSize() const override { size_t linkedSize = SerialLinkedListAdapter::getSerializedSize(); - linkedSize += dataSet->getFillCount() * sizeof(lp_id_t); + linkedSize += dataSet->getLocalPoolIdsSerializedSize(); return linkedSize; }