1 #ifndef OSMIUM_THREAD_SORTED_QUEUE_HPP
2 #define OSMIUM_THREAD_SORTED_QUEUE_HPP
36 #include <condition_variable>
59 typedef typename std::deque<T>::size_type
size_type;
69 return m_queue.front() == T();
88 void push(T value, size_type num) {
89 std::lock_guard<std::mutex> lock(m_mutex);
92 if (m_queue.size() <= num + 1) {
93 m_queue.resize(num + 2);
95 m_queue[num] = std::move(value);
97 m_data_available.notify_one();
105 std::unique_lock<std::mutex> lock(m_mutex);
107 m_data_available.wait(lock, [
this] {
110 value = std::move(m_queue.front());
120 std::lock_guard<std::mutex> lock(m_mutex);
125 value = std::move(m_queue.front());
138 std::lock_guard<std::mutex> lock(m_mutex);
149 std::lock_guard<std::mutex> lock(m_mutex);
150 return m_queue.size();
159 #endif // OSMIUM_THREAD_SORTED_QUEUE_HPP
void wait_and_pop(T &value)
Definition: sorted_queue.hpp:104
void push(T value, size_type num)
Definition: sorted_queue.hpp:88
std::deque< T >::size_type size_type
Definition: sorted_queue.hpp:59
Namespace for everything in the Osmium library.
Definition: assembler.hpp:55
std::condition_variable m_data_available
Definition: sorted_queue.hpp:63
std::mutex m_mutex
Definition: sorted_queue.hpp:61
size_type m_offset
Definition: sorted_queue.hpp:65
Definition: sorted_queue.hpp:57
bool empty() const
Definition: sorted_queue.hpp:137
bool empty_intern() const
Definition: sorted_queue.hpp:68
SortedQueue()
Definition: sorted_queue.hpp:74
bool try_pop(T &value)
Definition: sorted_queue.hpp:119
size_t size() const
Definition: sorted_queue.hpp:148
std::deque< T > m_queue
Definition: sorted_queue.hpp:62