PikeAero::CTaskQueue Class Reference

Implements a task queue. The task scheduling sequence is predetermined in the initialize() method. More...

#include <ctaskqueue.h>

Inheritance diagram for PikeAero::CTaskQueue:

Inheritance graph
[legend]
Collaboration diagram for PikeAero::CTaskQueue:

Collaboration graph
[legend]

Public Member Functions

 CTaskQueue ()
void initialize ()
 Create a sequence map of one complete cycle through priorities and task list by task index number into mSequence.
ITasknext ()
virtual ~CTaskQueue ()

Private Attributes

CMachine::ubit32 mIndex
CByteArray mSequence

Detailed Description

Implements a task queue. The task scheduling sequence is predetermined in the initialize() method.

Author:
Michael Sharkey <mike@pikeaero.com>

Definition at line 34 of file ctaskqueue.h.


Constructor & Destructor Documentation

PikeAero::CTaskQueue::CTaskQueue (  ) 

Definition at line 26 of file ctaskqueue.cpp.

00027  : inherited()
00028  , mIndex(0)
00029 {
00030 }

PikeAero::CTaskQueue::~CTaskQueue (  )  [virtual]

Definition at line 33 of file ctaskqueue.cpp.

00034 {
00035 }


Member Function Documentation

void PikeAero::CTaskQueue::initialize ( void   ) 

Create a sequence map of one complete cycle through priorities and task list by task index number into mSequence.

worst case

Definition at line 40 of file ctaskqueue.cpp.

References PikeAero::CObjectList::at(), PikeAero::CMemHeap::compress(), PikeAero::CObjectList::count(), mIndex, mSequence, PikeAero::ITask::priority(), PikeAero::ITask::PriorityHigh, PikeAero::ITask::PriorityLow, PikeAero::CByteArray::resize(), and PikeAero::CByteArray::set().

Referenced by PikeAero::CTaskScheduler::run().

00041 {
00042     mIndex=0;
00043     mSequence.resize(count()*(ITask::PriorityHigh+1)); /** worst case */
00044     for( CMachine::ubit32 priority=(CMachine::ubit32)ITask::PriorityLow; priority <= (CMachine::ubit32)ITask::PriorityHigh; priority++ )
00045     {
00046         for( CMachine::ubit32 taskid=0; taskid < count(); taskid++ )
00047         {
00048             ITask* task = (ITask*)at(taskid);
00049             if ( (CMachine::ubit32)task->priority() >= priority )
00050             {
00051                 mSequence.set( mIndex++, (CMachine::ubit8)taskid );
00052             }
00053         }
00054     }
00055     mSequence.resize(mIndex);
00056     CMemHeap::compress();
00057     mIndex=0;
00058 }

Here is the call graph for this function:

Here is the caller graph for this function:

ITask* PikeAero::CTaskQueue::next (  )  [inline]

Definition at line 40 of file ctaskqueue.h.

References PikeAero::CByteArray::at(), PikeAero::CObjectList::at(), mIndex, mSequence, and PikeAero::CByteArray::size().

Referenced by PikeAero::CTaskScheduler::run1().

00040 {return (ITask*)at( mSequence.at((++mIndex)>=mSequence.size()?(mIndex=0):mIndex) );}

Here is the call graph for this function:

Here is the caller graph for this function:


Field Documentation

Definition at line 42 of file ctaskqueue.h.

Referenced by initialize(), and next().

Definition at line 43 of file ctaskqueue.h.

Referenced by initialize(), and next().


The documentation for this class was generated from the following files:

Generated on Sun Oct 25 14:00:26 2009 for stingray3 by  doxygen 1.5.8