fsfw/storagemanager/StorageAccessor.cpp

80 lines
2.2 KiB
C++
Raw Normal View History

2020-09-29 14:42:48 +02:00
#include "StorageAccessor.h"
#include "StorageManagerIF.h"
2020-09-29 14:35:05 +02:00
#include "../serviceinterface/ServiceInterfaceStream.h"
2021-01-03 14:33:17 +01:00
#include <algorithm>
2020-09-29 14:35:05 +02:00
StorageAccessor::StorageAccessor(store_address_t storeId):
ConstStorageAccessor(storeId) {
}
StorageAccessor::StorageAccessor(store_address_t storeId,
StorageManagerIF* store):
ConstStorageAccessor(storeId, store) {
}
StorageAccessor& StorageAccessor::operator =(
StorageAccessor&& other) {
// Call the parent move assignment and also assign own member.
dataPointer = other.dataPointer;
StorageAccessor::operator=(std::move(other));
return * this;
}
// Call the parent move ctor and also transfer own member.
StorageAccessor::StorageAccessor(StorageAccessor&& other):
ConstStorageAccessor(std::move(other)), dataPointer(other.dataPointer) {
}
ReturnValue_t StorageAccessor::getDataCopy(uint8_t *pointer, size_t maxSize) {
if(internalState == AccessState::UNINIT) {
2021-01-03 14:16:52 +01:00
#if FSFW_CPP_OSTREAM_ENABLED == 1
2020-09-29 14:35:05 +02:00
sif::warning << "StorageAccessor: Not initialized!" << std::endl;
#endif
2020-09-29 14:35:05 +02:00
return HasReturnvaluesIF::RETURN_FAILED;
}
if(size_ > maxSize) {
2021-01-03 14:16:52 +01:00
#if FSFW_CPP_OSTREAM_ENABLED == 1
2020-09-29 14:35:05 +02:00
sif::error << "StorageAccessor: Supplied buffer not large "
"enough" << std::endl;
#endif
2020-09-29 14:35:05 +02:00
return HasReturnvaluesIF::RETURN_FAILED;
}
std::copy(dataPointer, dataPointer + size_, pointer);
return HasReturnvaluesIF::RETURN_OK;
}
uint8_t* StorageAccessor::data() {
if(internalState == AccessState::UNINIT) {
2021-01-03 14:16:52 +01:00
#if FSFW_CPP_OSTREAM_ENABLED == 1
2020-09-29 14:35:05 +02:00
sif::warning << "StorageAccessor: Not initialized!" << std::endl;
#endif
2020-09-29 14:35:05 +02:00
}
return dataPointer;
}
ReturnValue_t StorageAccessor::write(uint8_t *data, size_t size,
uint16_t offset) {
if(internalState == AccessState::UNINIT) {
2021-01-03 14:16:52 +01:00
#if FSFW_CPP_OSTREAM_ENABLED == 1
2020-09-29 14:35:05 +02:00
sif::warning << "StorageAccessor: Not initialized!" << std::endl;
#endif
2020-09-29 14:35:05 +02:00
return HasReturnvaluesIF::RETURN_FAILED;
}
if(offset + size > size_) {
2021-01-03 14:16:52 +01:00
#if FSFW_CPP_OSTREAM_ENABLED == 1
2020-09-29 14:35:05 +02:00
sif::error << "StorageAccessor: Data too large for pool "
"entry!" << std::endl;
#endif
2020-09-29 14:35:05 +02:00
return HasReturnvaluesIF::RETURN_FAILED;
}
std::copy(data, data + size, dataPointer + offset);
return HasReturnvaluesIF::RETURN_OK;
}
void StorageAccessor::assignConstPointer() {
constDataPointer = dataPointer;
}