#ifndef FSFW_CONTAINER_FIFO_H_ #define FSFW_CONTAINER_FIFO_H_ #include "FIFOBase.h" #include <array> /** * @brief Simple First-In-First-Out data structure with size fixed at * compile time * @details * Performs no dynamic memory allocation. * The public interface of FIFOBase exposes the user interface for the FIFO. * @tparam T Entry Type * @tparam capacity Maximum capacity */ template<typename T, size_t capacity> class FIFO: public FIFOBase<T> { public: FIFO(): FIFOBase<T>(nullptr, capacity) { this->setContainer(fifoArray.data()); }; /** * @brief Custom copy constructor to set pointer correctly. * @param other */ FIFO(const FIFO& other): FIFOBase<T>(other) { this->fifoArray = other.fifoArray; this->setContainer(fifoArray.data()); } /** * @brief Custom assignment operator * @param other */ FIFO& operator=(const FIFO& other){ FIFOBase<T>::operator=(other); this->fifoArray = other.fifoArray; this->setContainer(fifoArray.data()); return *this; } private: std::array<T, capacity> fifoArray; }; #endif /* FSFW_CONTAINER_FIFO_H_ */