#ifndef DATASETIF_H_ #define DATASETIF_H_ #include #include class PoolVariableIF; /** * @brief This class defines a small interface to register on a DataSet. * * @details * Currently, the only purpose of this interface is to provide a * method for locally checked-out variables to register on a data set. * Still, it may become useful for other purposes as well. * @author Bastian Baetz * @ingroup data_pool */ class DataSetIF { public: static constexpr uint8_t INTERFACE_ID = CLASS_ID::DATA_SET_CLASS; static constexpr ReturnValue_t INVALID_PARAMETER_DEFINITION = MAKE_RETURN_CODE( 0x01 ); static constexpr ReturnValue_t SET_WAS_ALREADY_READ = MAKE_RETURN_CODE( 0x02 ); static constexpr ReturnValue_t COMMITING_WITHOUT_READING = MAKE_RETURN_CODE(0x03); static constexpr ReturnValue_t DATA_SET_UNINITIALISED = MAKE_RETURN_CODE( 0x04 ); static constexpr ReturnValue_t DATA_SET_FULL = MAKE_RETURN_CODE( 0x05 ); static constexpr ReturnValue_t POOL_VAR_NULL = MAKE_RETURN_CODE( 0x06 ); /** * @brief This is an empty virtual destructor, * as it is proposed for C++ interfaces. */ virtual ~DataSetIF() {} virtual ReturnValue_t read(uint32_t lockTimeout) = 0; virtual ReturnValue_t commit(uint32_t lockTimeout) = 0; /** * @brief This operation provides a method to register local data pool * variables to register in a data set by passing itself * to this DataSet operation. */ virtual ReturnValue_t registerVariable(PoolVariableIF* variable) = 0; virtual uint16_t getFillCount() const = 0; private: /** * @brief Most underlying data structures will have a pool like structure * and will require a lock and unlock mechanism to ensure * thread-safety * @return Lock operation result */ virtual ReturnValue_t lockDataPool(uint32_t timeoutMs) = 0; /** * @brief Unlock call corresponding to the lock call. * @return Unlock operation result */ virtual ReturnValue_t unlockDataPool() = 0; }; #endif /* DATASETIF_H_ */