1 /* ScummVM - Graphic Adventure Engine
2 *
3 * ScummVM is the legal property of its developers, whose names
4 * are too numerous to list here. Please refer to the COPYRIGHT
5 * file distributed with this source distribution.
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 *
21 */
22
23 #include "mutationofjb/tasks/taskmanager.h"
24
25 #include "mutationofjb/tasks/task.h"
26
27 namespace MutationOfJB {
28
startTask(const TaskPtr & task)29 void TaskManager::startTask(const TaskPtr &task) {
30 _tasks.push_back(task);
31 task->setTaskManager(this);
32 task->start();
33 }
34
stopTask(const TaskPtr & task)35 void TaskManager::stopTask(const TaskPtr &task) {
36 TaskPtrs::iterator it = Common::find(_tasks.begin(), _tasks.end(), task);
37 if (it == _tasks.end()) {
38 warning("Task is not registered in TaskManager");
39 return;
40 }
41
42 task->stop();
43 assert(task->getState() != Task::RUNNING);
44 _tasks.erase(it);
45 }
46
getTask(Task * const task)47 TaskPtr TaskManager::getTask(Task *const task) {
48 for (TaskPtrs::iterator it = _tasks.begin(); it != _tasks.end(); ++it) {
49 if (it->get() == task) {
50 return *it;
51 }
52 }
53
54 return TaskPtr();
55 }
56
update()57 void TaskManager::update() {
58 for (TaskPtrs::iterator it = _tasks.begin(); it != _tasks.end();) {
59 const Task::State state = (*it)->getState();
60 if (state == Task::RUNNING) {
61 (*it)->update();
62 }
63
64 if (state == Task::FINISHED) {
65 it = _tasks.erase(it);
66 } else {
67 ++it;
68 }
69 }
70 }
71
72 }
73