| // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "base/task_queue.h" |
| |
| #include "base/logging.h" |
| #include "base/stl_util-inl.h" |
| |
| TaskQueue::TaskQueue() { |
| } |
| |
| TaskQueue::~TaskQueue() { |
| // We own all the pointes in |queue_|. It is our job to delete them. |
| STLDeleteElements(&queue_); |
| } |
| |
| void TaskQueue::Push(Task* task) { |
| DCHECK(task); |
| |
| // Add the task to the back of the queue. |
| queue_.push_back(task); |
| } |
| |
| void TaskQueue::Clear() { |
| // Delete all the elements in the queue and clear the dead pointers. |
| STLDeleteElements(&queue_); |
| } |
| |
| bool TaskQueue::IsEmpty() const { |
| return queue_.empty(); |
| } |
| |
| void TaskQueue::Run() { |
| // Nothing to run if our queue is empty. |
| if (queue_.empty()) |
| return; |
| |
| std::deque<Task*> ready; |
| queue_.swap(ready); |
| |
| // Run the tasks that are ready. |
| std::deque<Task*>::const_iterator task; |
| for (task = ready.begin(); task != ready.end(); ++task) { |
| // Run the task and then delete it. |
| (*task)->Run(); |
| delete (*task); |
| } |
| } |