#ifndef DATAPipe_H #define DATAPipe_H #include #include #include #include #include #include #include "DataPackage.h" #define BUFFER_SIZE 30 template class DataPipe { public: DataPipe(size_t bufferSize = BUFFER_SIZE); ~DataPipe(); void pushData(T *data); bool popData(T *&data); private: size_t m_bufferSize; std::queue m_bufferQueue; std::mutex m_mtx; std::condition_variable m_cv; }; template DataPipe::DataPipe(size_t bufferSize) : m_bufferSize(bufferSize) {} template DataPipe::~DataPipe() {} template void DataPipe::pushData(T *data) { std::unique_lock lock(m_mtx); if (m_bufferQueue.size() >= m_bufferSize) { m_bufferQueue.pop(); } m_bufferQueue.push(data); m_cv.notify_one(); } template bool DataPipe::popData(T *&data) { std::unique_lock lock(m_mtx); if (m_bufferQueue.empty()) { return false; } data = m_bufferQueue.front(); m_bufferQueue.pop(); return true; } typedef std::shared_ptr> DataPipePtr; #endif // DATAPipe_H