#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. This function allocates memory! * @details This is a very heavy operation so try to avoid this! * */ DynamicFIFO(const DynamicFIFO& other): FIFOBase(other), fifoVector(other.maxCapacity) { this->fifoVector = other.fifoVector; this->setContainer(fifoVector.data()); } /** * @brief Custom assignment operator * @details This is a very heavy operation so try to avoid this! * @param other DyamicFIFO to copy from */ DynamicFIFO& operator=(const DynamicFIFO& other){ FIFOBase::operator=(other); this->fifoVector = other.fifoVector; this->setContainer(fifoVector.data()); return *this; } private: std::vector fifoVector; }; #endif /* FSFW_CONTAINER_DYNAMICFIFO_H_ */