libsaria: Add tasks to the front and back of the queue

Queueing a task to run immediately can be useful, especially if it's
something like saving data as part of a "checkpoint"
This commit is contained in:
Bryan Schumaker 2011-09-26 08:19:39 -04:00
parent a97da1dd05
commit 517faceb99
4 changed files with 21 additions and 7 deletions

View File

@ -11,5 +11,6 @@ class IdleTask
int libsaria_idle_task();
int libsaria_queue_task(IdleTask *);
int libsaria_queue_task_front(IdleTask *);
#endif /* LIBSARIA_IDLE_H */

View File

@ -18,10 +18,20 @@ int libsaria_idle_task()
* goes from size is increased from 0 to 1. This will tell
* the UI that idle tasks have been queued.
*/
int libsaria_queue_task(IdleTask *task)
static int libsaria_queue_task_generic(IdleTask *task, bool front)
{
int queue_size = idle.queue_task(task);
int queue_size = idle.queue_task(task, front);
if (queue_size == 1)
trigger_callback(IDLE_TASK_QUEUED);
return queue_size;
}
int libsaria_queue_task(IdleTask *task)
{
return libsaria_queue_task_generic(task, false);
}
int libsaria_queue_task_front(IdleTask *task)
{
return libsaria_queue_task_generic(task, true);
}

View File

@ -15,14 +15,17 @@ int Idle::run_task()
if (idle_queue.size() == 0)
return idle_queue.size();
task = idle_queue.front();
idle_queue.pop();
idle_queue.pop_front();
task->run_task();
delete task;
return idle_queue.size();
}
int Idle::queue_task(IdleTask *task)
int Idle::queue_task(IdleTask *task, bool front)
{
idle_queue.push(task);
if (front == true)
idle_queue.push_front(task);
else
idle_queue.push_back(task);
return idle_queue.size();
}

View File

@ -9,14 +9,14 @@ using namespace std;
class Idle
{
private:
queue<IdleTask*> idle_queue;
deque<IdleTask*> idle_queue;
public:
Idle();
~Idle();
int run_task();
int queue_task(IdleTask *);
int queue_task(IdleTask *, bool);
};
#endif /* LIBSARIA_IDLE_COMPONENT_H */