#ifndef FSFW_CONTAINER_DYNAMICFIFO_H_ #define FSFW_CONTAINER_DYNAMICFIFO_H_ #include "FIFOBase.h" #include /** * @brief Simple First-In-First-Out data structure. The maximum size * can be set in the constructor. * @details * The maximum capacity can be determined at run-time, so this container * performs dynamic memory allocation! * The public interface of FIFOBase exposes the user interface for the FIFO. * @tparam T Entry Type * @tparam capacity Maximum capacity */ template class DynamicFIFO: public FIFOBase { public: DynamicFIFO(size_t maxCapacity): FIFOBase(nullptr, maxCapacity), fifoVector(maxCapacity) { // trying to pass the pointer of the uninitialized vector // to the FIFOBase constructor directly lead to a super evil bug. // So we do it like this now. this->setContainer(fifoVector.data()); }; /** * @brief Custom copy constructor which prevents setting the * underlying pointer wrong. */ DynamicFIFO(const DynamicFIFO& other): FIFOBase(other), fifoVector(other.maxCapacity) { this->setContainer(fifoVector.data()); } private: std::vector fifoVector; }; #endif /* FSFW_CONTAINER_DYNAMICFIFO_H_ */