19 #ifndef MCLOUD_API_TASKQUEUE_H_ 20 #define MCLOUD_API_TASKQUEUE_H_ 33 template<
typename T,
typename Container = std::deque<T>>
36 typedef std::shared_ptr<TaskQueue>
Ptr;
45 std::lock_guard<std::mutex> lock(mutex_);
46 tasks_ = std::move(queue.tasks_);
50 std::lock_guard<std::mutex> lock(mutex_);
51 tasks_ = queue.tasks_;
56 std::lock_guard<std::mutex> lock1(mutex_);
57 std::lock_guard<std::mutex> lock2(queue.mutex_);
58 tasks_ = queue.tasks_;
64 typename Container::iterator
begin() {
65 std::lock_guard<std::mutex> lock(mutex_);
66 return tasks_.begin();
69 typename Container::iterator
end() {
70 std::lock_guard<std::mutex> lock(mutex_);
74 typename Container::iterator
cbegin()
const {
75 std::lock_guard<std::mutex> lock(mutex_);
76 return tasks_.cbegin();
79 typename Container::iterator
cend()
const {
80 std::lock_guard<std::mutex> lock(mutex_);
85 std::lock_guard<std::mutex> lock(mutex_);
90 std::lock_guard<std::mutex> lock(mutex_);
91 return tasks_.empty();
95 std::lock_guard<std::mutex> lock(mutex_);
96 tasks_.push_back(task);
100 std::lock_guard<std::mutex> lock(mutex_);
101 for (
const T & task: queue.tasks_){
102 tasks_.push_back(task);
107 std::lock_guard<std::mutex> lock(mutex_);
112 task = tasks_.front();
118 std::lock_guard<std::mutex> lock(mutex_);
119 return tasks_[index];
125 mutable std::mutex mutex_;
131 #endif // MCLOUD_API_TASKQUEUE_H_ A thread-safe deque template.
Container::iterator cend() const
Container::const_iterator const_iterator
Container::iterator cbegin() const
void push(const TaskQueue &queue)
TaskQueue(TaskQueue &&queue)
const T & operator[](int index) const
TaskQueue & operator=(const TaskQueue &queue)
TaskQueue(const TaskQueue &queue)
Container::iterator begin()
std::shared_ptr< TaskQueue > Ptr
virtual ~TaskQueue()=default
Container::size_type size_type
Container::iterator end()