home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-08-28 | 3.7 KB | 149 lines | [TEXT/CWIE] |
- // ===========================================================================
- // UDelayedTaskQueue.cp © 1995, Éric Forget. All rights reserved.
- // ===========================================================================
- //
- // ************************************************************************
- // * *
- // * Before using this code you should read the "License Agreement" *
- // * document and agree with it. *
- // * *
- // ************************************************************************
- //
- // UDelayedTaskQueue is an utility class to help LDelayedTask.
- //
- // ---------------------------------------------------------------------------
- //
- // Instruction Notes:
- // -----------------
- //
- // Look in the class LDelayedTask for instructions.
- //
- // ---------------------------------------------------------------------------
-
- #ifdef PowerPlant_PCH
- #include PowerPlant_PCH
- #endif
-
- #include "UDelayedTaskQueue.h"
- #include <LDynamicArray.h>
- #include "LDelayedTask.h"
-
-
- // ---------------------------------------------------------------------------
- // • Static members
- // ---------------------------------------------------------------------------
-
-
- LDynamicArray* UDelayedTaskQueue::sTaskQ = nil;
- UDelayedTaskQueue* UDelayedTaskQueue::sDelayedTaskQueue = nil;
-
-
-
- // ---------------------------------------------------------------------------
- // • UDelayedTaskQueue
- // ---------------------------------------------------------------------------
- // Default constructor
-
- UDelayedTaskQueue::UDelayedTaskQueue()
- {
- }
-
-
- // ---------------------------------------------------------------------------
- // • ~UDelayedTaskQueue
- // ---------------------------------------------------------------------------
- // Destructor
-
- UDelayedTaskQueue::~UDelayedTaskQueue()
- {
- if(sTaskQ != nil) {
-
- LTask *theTask;
-
- for(Int32 i = sTaskQ->GetCount(); i > 0; i--) {
-
- sTaskQ->FetchItemAt(i, &theTask);
- Assert_(!theTask->IsExecuting());
-
- delete theTask;
- sTaskQ->RemoveItemsAt(1, i);
- }
-
- delete sTaskQ;
- }
- }
-
-
- // ---------------------------------------------------------------------------
- // • AddTask
- // ---------------------------------------------------------------------------
- // Add Task in the to delete queue
-
- void
- UDelayedTaskQueue::AddTask(
- LDelayedTask *inTask)
- {
- if (sTaskQ == nil) { // Create queue if it doesn't exist
-
- sTaskQ = new LList;
- }
-
- if (sDelayedTaskQueue == nil) { // Create object if it doesn't exist
-
- sDelayedTaskQueue = new UDelayedTaskQueue;
- }
-
- // Add to end of the to delete queue
- sTaskQ->InsertItemsAt(1, arrayIndex_Last, &inTask);
- sDelayedTaskQueue->StartRepeating();
- }
-
-
- // ---------------------------------------------------------------------------
- // • RemoveTask
- // ---------------------------------------------------------------------------
-
- void
- UDelayedTaskQueue::RemoveTask(
- LDelayedTask *inTask)
- {
- Int32 index = sTaskQ->FetchIndexOf(&inTask);
-
-
- if(index != arrayIndex_Bad) {
-
- sTaskQ->RemoveItemsAt(1, index);
-
- if(sTaskQ->GetCount() == 0) {
-
- delete sTaskQ;
- sTaskQ = nil;
- delete sDelayedTaskQueue;
- sDelayedTaskQueue = nil;
- }
- }
- }
-
-
- // ---------------------------------------------------------------------------
- // • SpendTime
- // ---------------------------------------------------------------------------
-
- void
- UDelayedTaskQueue::SpendTime(
- const EventRecord &/*inMacEvent*/)
- {
- LDelayedTask *theTask;
-
-
- for(Int32 i = sTaskQ->GetCount(); i > 0; i--) {
-
- sTaskQ->FetchItemAt(i, &theTask);
-
- if(theTask->IsItTimeToExecute()) {
-
- theTask->ExecuteTask();
- }
- }
- }
-