1 #ifndef theplu_yat_utility_basic_queue 2 #define theplu_yat_utility_basic_queue 23 #include <condition_variable> 34 template<
class Derived,
typename T,
class Container>
56 std::unique_lock<std::mutex> lock(other.mutex_);
72 std::unique_lock<std::mutex> lock(mutex_);
82 std::unique_lock<std::mutex> lock(mutex_);
96 std::unique_lock<std::mutex> lock(mutex_);
98 condition_.wait(lock);
104 static_cast<Derived*
>(
this)->pop_impl(value, lock);
113 std::unique_lock<std::mutex> lock(mutex_);
114 static_cast<Derived*
>(
this)->push_impl(t, lock);
118 condition_.notify_one();
131 std::unique_lock<std::mutex> lock(mutex_);
132 static_cast<Derived*
>(
this)->push_impl(std::move(t), lock);
136 condition_.notify_one();
145 std::unique_lock<std::mutex> lock(mutex_);
156 std::unique_lock<std::mutex> lock(mutex_);
159 static_cast<Derived*
>(
this)->pop_impl(value, lock);
169 if (
this != &other) {
174 std::lock(mutex_, other.mutex_);
175 std::unique_lock<std::mutex> lock(mutex_, std::adopt_lock_t());
176 std::unique_lock<std::mutex> other_lock(other.mutex_,
177 std::adopt_lock_t());
185 mutable std::mutex mutex_;
186 std::condition_variable condition_;
Container::size_type size_type
Definition: BasicQueue.h:44
void clear(void)
clear queue
Definition: BasicQueue.h:70
BasicQueue(const BasicQueue &other)
Definition: BasicQueue.h:54
The Department of Theoretical Physics namespace as we define it.
bool try_pop(T &value)
Definition: BasicQueue.h:154
void assign(const BasicQueue &other)
Definition: BasicQueue.h:167
Definition: BasicQueue.h:35
BasicQueue(void)
Definition: BasicQueue.h:49
void push(const T &t)
insert an element into container
Definition: BasicQueue.h:111
void pop(T &value)
access next element in queue
Definition: BasicQueue.h:94
size_type size(void) const
Definition: BasicQueue.h:143
Container q_
data
Definition: BasicQueue.h:183
BasicQueue(const Container &container)
Definition: BasicQueue.h:63
void push(T &&t)
insert an element into container
Definition: BasicQueue.h:129
bool empty(void) const
Definition: BasicQueue.h:80
Container::value_type value_type
Type of object stored.
Definition: BasicQueue.h:39