#ifndef FSFW_STORAGEMANAGER_STORAGEACCESSOR_H_ #define FSFW_STORAGEMANAGER_STORAGEACCESSOR_H_ #include "ConstStorageAccessor.h" class StorageManagerIF; /** * @brief Child class for modifyable data. Also has a normal pointer member. */ class StorageAccessor: public ConstStorageAccessor { //! StorageManager classes have exclusive access to private variables. template friend class PoolManager; template friend class LocalPool; public: StorageAccessor(store_address_t storeId); StorageAccessor(store_address_t storeId, StorageManagerIF* store); /** * @brief Move ctor and move assignment allow returning accessors as * a returnvalue. They prevent resource being freed prematurely. * See: https://github.com/MicrosoftDocs/cpp-docs/blob/master/docs/cpp/ * move-constructors-and-move-assignment-operators-cpp.md * @param * @return */ StorageAccessor& operator=(StorageAccessor&&); StorageAccessor(StorageAccessor&&); ReturnValue_t write(uint8_t *data, size_t size, uint16_t offset = 0); uint8_t* data(); ReturnValue_t getDataCopy(uint8_t *pointer, size_t maxSize) override; private: //! Non-const pointer for modifyable data. uint8_t* dataPointer = nullptr; //! For modifyable data, the const pointer is assigned to the normal //! pointer by the pool manager so both access functions can be used safely void assignConstPointer(); }; #endif /* FSFW_STORAGEMANAGER_STORAGEACCESSOR_H_ */