// 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 ready; queue_.swap(ready); // Run the tasks that are ready. std::deque::const_iterator task; for (task = ready.begin(); task != ready.end(); ++task) { // Run the task and then delete it. (*task)->Run(); delete (*task); } }