2020-12-27 01:52:48 +01:00
|
|
|
#ifndef FSFW_DATAPOOL_READCOMMITIF_H_
|
|
|
|
#define FSFW_DATAPOOL_READCOMMITIF_H_
|
|
|
|
|
2021-01-13 12:18:05 +01:00
|
|
|
#include "../ipc/MutexIF.h"
|
2022-08-16 12:48:22 +02:00
|
|
|
#include "../returnvalues/returnvalue.h"
|
2020-12-27 01:52:48 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Common interface for all software objects which employ read-commit
|
|
|
|
* semantics.
|
|
|
|
*/
|
|
|
|
class ReadCommitIF {
|
2022-02-02 10:29:30 +01:00
|
|
|
friend class ReadCommitIFAttorney;
|
2020-12-27 01:52:48 +01:00
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
public:
|
|
|
|
virtual ~ReadCommitIF() {}
|
|
|
|
virtual ReturnValue_t read(MutexIF::TimeoutType timeoutType, uint32_t timeoutMs) = 0;
|
|
|
|
virtual ReturnValue_t commit(MutexIF::TimeoutType timeoutType, uint32_t timeoutMs) = 0;
|
2020-12-27 01:52:48 +01:00
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
protected:
|
|
|
|
/* Optional and protected because this is interesting for classes grouping members with commit
|
|
|
|
and read semantics where the lock is only necessary once. */
|
|
|
|
virtual ReturnValue_t readWithoutLock() { return read(MutexIF::TimeoutType::WAITING, 20); }
|
2020-12-27 01:52:48 +01:00
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
virtual ReturnValue_t commitWithoutLock() { return commit(MutexIF::TimeoutType::WAITING, 20); }
|
2020-12-27 01:52:48 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif /* FSFW_DATAPOOL_READCOMMITIF_H_ */
|