//-------------------------------------------------------------
// file: fifo1.cc
// (part of Fifo1 - an OMNeT++ demo simulation)
//-------------------------------------------------------------
#include "fifo1.h"
void FF1AbstractFifo::activity()
{
msgServiced = NULL;
endServiceMsg = new cMessage("end-service");
queue.setName("queue");
for(;;)
{
cMessage *msg = receive();
if (msg==endServiceMsg)
{
endService( msgServiced );
if (queue.empty())
{
msgServiced = NULL;
}
else
{
msgServiced = (cMessage *) queue.pop();
simtime_t serviceTime = startService( msgServiced );
scheduleAt( simTime()+serviceTime, endServiceMsg );
}
}
else if (!msgServiced)
{
arrival( msg );
msgServiced = msg;
simtime_t serviceTime = startService( msgServiced );
scheduleAt( simTime()+serviceTime, endServiceMsg );
}
else
{
arrival( msg );
queue.insert( msg );
}
}
}
void FF1AbstractFifo::finish()
{
ev << "*** Module: " << fullPath() << "***" << endl;
ev << "Stack allocated: " << stackSize() << " bytes";
ev << " (includes " << ev.extraStackForEnvir() << " bytes for environment)" << endl;
ev << "Stack actually used: " << stackUsage() << " bytes" << endl;
}
//------------------------------------------------
Define_Module( FF1PacketFifo );
simtime_t FF1PacketFifo::startService(cMessage *msg)
{
ev << "Starting service of " << msg->name() << endl;
return par("service_time");
}
void FF1PacketFifo::endService(cMessage *msg)
{
ev << "Completed service of " << msg->name() << endl;
send( msg, "out" );
}
//------------------------------------------------
Define_Module( FF1BitFifo );
simtime_t FF1BitFifo::startService(cMessage *msg)
{
ev << "Starting service of " << msg->name() << endl;
return msg->length() / (double)par("bits_per_sec");
}
void FF1BitFifo::endService(cMessage *msg)
{
ev << "Completed service of " << msg->name() << endl;
send( msg, "out" );
}
syntax highlighted by Code2HTML, v. 0.9.1