#ifndef POOLENTRY_H_ #define POOLENTRY_H_ #include #include #include /** * \brief This is a small helper class that defines a single data pool entry. * * \details The helper is used to store all information together with the data as a single data pool entry. * The content's type is defined by the template argument. * It is prepared for use with plain old data types, * but may be extended to complex types if necessary. * It can be initialized with a certain value, size and validity flag. * It holds a pointer to the real data and offers methods to access this data and to acquire * additional information (such as validity and array/byte size). * It is NOT intended to be used outside the DataPool class. * * \ingroup data_pool * */ template class PoolEntry : public PoolEntryIF { public: /** * \brief In the classe's constructor, space is allocated on the heap and * potential init values are copied to that space. * \param initValue A pointer to the single value or array that holds the init value. * With the default value (NULL), the entry is initalized with all 0. * \param set_length Defines the array length of this entry. * \param set_valid Sets the initialization flag. It is invalid (0) by default. */ PoolEntry( T* initValue = NULL, uint8_t set_length = 1, uint8_t set_valid = 0 ); /** * \brief The allocated memory for the variable is freed in the destructor. * \details As the data pool is global, this dtor is only called on program exit. * PoolEntries shall never be copied, as a copy might delete the variable on the heap. */ ~PoolEntry(); /** * \brief This is the address pointing to the allocated memory. */ T* address; /** * \brief This attribute stores the length information. */ uint8_t length; /** * \brief Here, the validity information for a variable is stored. * Every entry (single variable or vector) has one valid flag. */ uint8_t valid; /** * \brief getSize returns the array size of the entry. * \details A single parameter has size 1. */ uint8_t getSize(); /** * \brief This operation returns the size in bytes. * \details The size is calculated by sizeof(type) * array_size. */ uint16_t getByteSize(); /** * \brief This operation returns a the address pointer casted to void*. */ void* getRawData(); /** * \brief This method allows to set the valid information of the pool entry. */ void setValid( uint8_t isValid ); /** * \brief This method allows to get the valid information of the pool entry. */ uint8_t getValid(); /** * \brief This is a debug method that prints all values and the valid information to the screen. * It prints all array entries in a row. */ void print(); Type getType(); }; #endif /* POOLENTRY_H_ */