AbstractQueue Class Reference

#include <AbstractQueue.h>

Inheritance diagram for AbstractQueue:

QueueBase QueueWithQoS IP IPv6 List of all members.

Detailed Description

Abstract base class for single-server queues.


Public Member Functions

 AbstractQueue ()
virtual ~AbstractQueue ()

Protected Member Functions

virtual void initialize ()
virtual void handleMessage (cMessage *msg)
virtual void arrival (cMessage *msg)=0
virtual cMessage * arrivalWhenIdle (cMessage *msg)=0
virtual simtime_t startService (cMessage *msg)=0
virtual void endService (cMessage *msg)=0

Protected Attributes

cQueue queue

Private Attributes

cMessage * msgServiced
cMessage * endServiceMsg


Constructor & Destructor Documentation

AbstractQueue::AbstractQueue (  ) 

00025 {
00026     msgServiced = endServiceMsg = NULL;
00027 }

AbstractQueue::~AbstractQueue (  )  [virtual]

00030 {
00031     delete msgServiced;
00032     cancelAndDelete(endServiceMsg);
00033 }


Member Function Documentation

virtual void AbstractQueue::arrival ( cMessage *  msg  )  [protected, pure virtual]

Called when a message arrives at the module. The method should either enqueue this message (usual behaviour), or discard it. It may also wrap the it into another message, and insert that one in the queue.

Most straightforward implementation: queue.insert(msg);

Implemented in QueueBase, and QueueWithQoS.

virtual cMessage* AbstractQueue::arrivalWhenIdle ( cMessage *  msg  )  [protected, pure virtual]

Called when a message arrives at the module when the queue is empty. The message doesn't need to be enqueued in this case, it can start service immmediately. This method may:

  1. simply return the the same pointer (usual behaviour), or
  2. discard the message and return NULL pointer (the effect being this message being ignored)
  3. or modify the message, wrap in into another message etc, and return the (new) message's pointer.

Most straightforward implementation: return msg;

Implemented in QueueBase, and QueueWithQoS.

virtual void AbstractQueue::endService ( cMessage *  msg  )  [protected, pure virtual]

Called when a message completes service. The function may send it to another module, discard it, or in general do anything with it.

Most straightforward implementation: send(msg,"out");

Implemented in IP, and IPv6.

void AbstractQueue::handleMessage ( cMessage *  msg  )  [protected, virtual]

00043 {
00044     if (msg==endServiceMsg)
00045     {
00046         endService( msgServiced );
00047         if (queue.empty())
00048         {
00049             msgServiced = NULL;
00050         }
00051         else
00052         {
00053             msgServiced = (cMessage *) queue.getTail();
00054             simtime_t serviceTime = startService( msgServiced );
00055             scheduleAt( simTime()+serviceTime, endServiceMsg );
00056         }
00057     }
00058     else if (!msgServiced)
00059     {
00060         cMessage *msg2 = arrivalWhenIdle( msg );
00061         if (msg2)
00062         {
00063             msgServiced = msg2;
00064             simtime_t serviceTime = startService( msgServiced );
00065             scheduleAt( simTime()+serviceTime, endServiceMsg );
00066         }
00067 
00068     }
00069     else
00070     {
00071         arrival( msg );
00072     }
00073 }

void AbstractQueue::initialize (  )  [protected, virtual]

Reimplemented in QueueBase, QueueWithQoS, IP, and IPv6.

00036 {
00037     msgServiced = NULL;
00038     endServiceMsg = new cMessage("end-service");
00039     queue.setName("queue");
00040 }

virtual simtime_t AbstractQueue::startService ( cMessage *  msg  )  [protected, pure virtual]

Called when a message starts service, and should return the service time.

Example implementation: return 1.0;

Implemented in QueueBase, and QueueWithQoS.


Member Data Documentation

cMessage* AbstractQueue::endServiceMsg [private]

cMessage* AbstractQueue::msgServiced [private]

cQueue AbstractQueue::queue [protected]

The queue. May be configured into a priority queue in initialize() if needed.


The documentation for this class was generated from the following files:
Generated on Wed Apr 4 13:20:19 2007 for INET Framework for OMNeT++/OMNEST by  doxygen 1.4.7