.. _program_listing_file_include_queue.hpp: Program Listing for File queue.hpp ================================== |exhale_lsh| :ref:`Return to documentation for file ` (``include/queue.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #ifndef RIG_RECONFIGURE_QUEUE_HPP #define RIG_RECONFIGURE_QUEUE_HPP #include #include #include #include template class Queue { public: template void push(F&& data) { std::lock_guard guard(mutex); queue.push_back(std::forward(data)); cv.notify_one(); } T pop() { std::unique_lock lock(mutex); while (queue.empty()) { cv.wait(lock); } T data = std::move(queue.front()); queue.pop_front(); return data; } std::optional try_pop() { std::unique_lock lock(mutex); if (queue.empty()) { return std::nullopt; } T data = std::move(queue.front()); queue.pop_front(); return data; } size_t length() { std::lock_guard lock(mutex); return queue.size(); } private: std::deque queue; std::mutex mutex; std::condition_variable cv; }; #endif // RIG_RECONFIGURE_QUEUE_HPP