fsfw/storagemanager/PoolManager.h

47 lines
1.4 KiB
C
Raw Normal View History

#ifndef POOLMANAGER_H_
#define POOLMANAGER_H_
#include <framework/storagemanager/LocalPool.h>
2018-07-13 18:28:26 +02:00
#include <framework/ipc/MutexHelper.h>
/**
* @brief The PoolManager class provides an intermediate data storage with
* a fixed pool size policy for inter-process communication.
2020-05-04 17:01:48 +02:00
* @details Uses local pool calls but is thread safe by protecting the call
* with a lock.
*/
template <uint8_t NUMBER_OF_POOLS = 5>
class PoolManager : public LocalPool<NUMBER_OF_POOLS> {
public:
2020-05-07 23:00:09 +02:00
PoolManager(object_id_t setObjectId,
const uint16_t element_sizes[NUMBER_OF_POOLS],
const uint16_t n_elements[NUMBER_OF_POOLS]);
//! @brief In the PoolManager's destructor all allocated memory is freed.
2020-05-04 17:01:48 +02:00
virtual ~PoolManager();
2020-05-07 23:00:09 +02:00
//! @brief LocalPool overrides for thread-safety.
2020-05-04 17:01:48 +02:00
ReturnValue_t deleteData(store_address_t) override;
ReturnValue_t deleteData(uint8_t* buffer, size_t size,
store_address_t* storeId = NULL) override;
ReturnValue_t modifyData(store_address_t packet_id, uint8_t** packet_ptr,
size_t* size) override;
protected:
ReturnValue_t reserveSpace(const uint32_t size, store_address_t* address,
bool ignoreFault) override;
2020-05-04 17:01:48 +02:00
/**
* @brief The mutex is created in the constructor and makes
* access mutual exclusive.
* @details Locking and unlocking is done during searching for free slots
* and deleting existing slots.
*/
MutexIF* mutex;
};
2020-05-04 17:01:48 +02:00
#include "PoolManager.tpp"
#endif /* POOLMANAGER_H_ */