5#include <condition_variable>
11namespace Lightweight::detail
31 std::scoped_lock
const lock(_mutex);
32 _queue.push_back(std::move(item));
34 _condition.notify_one();
40 bool WaitAndPop(T& out)
42 std::unique_lock lock(_mutex);
43 _condition.wait(lock, [&] {
return !_queue.empty() || _finished; });
46 out = std::move(_queue.front());
55 std::scoped_lock
const lock(_mutex);
58 _condition.notify_all();
62 [[nodiscard]]
bool Empty()
const
64 std::scoped_lock
const lock(_mutex);
65 return _queue.empty();
69 [[nodiscard]] std::size_t Size()
const
71 std::scoped_lock
const lock(_mutex);
76 mutable std::mutex _mutex;
77 std::condition_variable _condition;
79 bool _finished =
false;