package com.indyforge.twod.engine.util.task; import java.util.Deque; import java.util.LinkedList; /** * A simple task queue. * * @author Christopher Probst */ public class TaskQueue implements CancellableTask { /** * */ private static final long serialVersionUID = 1L; /* * Here we store all tasks. */ private final Deque<Task> tasks; public TaskQueue() { this(new LinkedList<Task>()); } public TaskQueue(Deque<Task> tasks) { if (tasks == null) { throw new NullPointerException("tasks"); } this.tasks = tasks; } /** * @return all tasks. */ public Deque<Task> tasks() { return tasks; } /* * (non-Javadoc) * * @see com.indyforge.twod.engine.util.task.CancellableTask#cancel() */ @Override public void cancel() { Task task; while ((task = tasks.poll()) != null) { if (task instanceof CancellableTask) { ((CancellableTask) task).cancel(); } } } /* * (non-Javadoc) * * @see com.indyforge.twod.engine.util.task.Task#update(float) */ @Override public boolean update(float tpf) { // The task var Task task; // Poll... while ((task = tasks.poll()) != null) { // Update... if (!task.update(tpf)) { // Reoffer... tasks.offerFirst(task); // Wait for next invocation break; } } return tasks.isEmpty(); } }