#ifndef FSFW_DATAPOOL_READCOMMITIF_H_
#define FSFW_DATAPOOL_READCOMMITIF_H_

#include "../returnvalues/HasReturnvaluesIF.h"
#include "../ipc/MutexIF.h"

/**
 * @brief 	Common interface for all software objects which employ read-commit
 * 			semantics.
 */
class ReadCommitIF {
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;

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);
	}

	virtual ReturnValue_t commitWithoutLock() {
		return commit(MutexIF::TimeoutType::WAITING, 20);
	}
};


#endif /* FSFW_DATAPOOL_READCOMMITIF_H_ */