|
INET Framework for OMNeT++/OMNEST
|
#include <DuplicatesGenerator.h>
Protected Member Functions | |
| virtual void | initialize () |
| virtual void | handleMessage (cMessage *msg) |
| virtual void | parseVector (const char *vector) |
| virtual void | finish () |
Protected Attributes | |
| unsigned int | numPackets |
| unsigned int | numDuplicated |
| bool | generateFurtherDuplicates |
| std::vector< unsigned int > | duplicatesVector |
Duplicates generator.
| void DuplicatesGenerator::finish | ( | ) | [protected, virtual] |
{
recordScalar("total packets", numPackets);
recordScalar("total duplicated", numDuplicated);
}
| void DuplicatesGenerator::handleMessage | ( | cMessage * | msg | ) | [protected, virtual] |
{
numPackets++;
if (generateFurtherDuplicates)
{
if (numPackets==duplicatesVector[0])
{
EV << "DuplicatesGenerator: Duplicating packet number " << numPackets << " " << msg << endl;
cMessage *dupmsg = (cMessage*) msg->dup();
send(dupmsg, "out");
numDuplicated++;
duplicatesVector.erase(duplicatesVector.begin());
if (duplicatesVector.size()==0)
{
EV << "DuplicatesGenerator: End of duplicatesVector reached." << endl;
generateFurtherDuplicates = false;
}
}
}
send(msg, "out");
}
| void DuplicatesGenerator::initialize | ( | ) | [protected, virtual] |
{
numPackets = 0;
numDuplicated = 0;
generateFurtherDuplicates = false;
WATCH(numPackets);
WATCH(numDuplicated);
WATCH(generateFurtherDuplicates);
const char *vector = par("duplicatesVector");
parseVector(vector);
if (duplicatesVector.size()==0)
{EV << "DuplicatesGenerator: Empty duplicatesVector" << endl;}
else
{
EV << "DuplicatesGenerator: duplicatesVector=" << vector << endl;
generateFurtherDuplicates = true;
}
}
| void DuplicatesGenerator::parseVector | ( | const char * | vector | ) | [protected, virtual] |
Referenced by initialize().
{
const char *v = vector;
while (*v)
{
// parse packet numbers
while (isspace(*v)) v++;
if (!*v || *v==';') break;
if (!isdigit(*v))
throw cRuntimeError("syntax error in duplicatesVector: packet number expected");
if (duplicatesVector.size()>0 && duplicatesVector.back() >= (unsigned int)atoi(v))
throw cRuntimeError("syntax error in duplicatesVector: packet numbers in ascending order expected");
duplicatesVector.push_back(atoi(v));
while (isdigit(*v)) v++;
// skip delimiter
while (isspace(*v)) v++;
if (!*v) break;
if (*v!=';')
throw cRuntimeError("syntax error in duplicatesVector: separator ';' missing");
v++;
while (isspace(*v)) v++;
}
}
std::vector<unsigned int> DuplicatesGenerator::duplicatesVector [protected] |
Referenced by handleMessage(), initialize(), and parseVector().
bool DuplicatesGenerator::generateFurtherDuplicates [protected] |
Referenced by handleMessage(), and initialize().
unsigned int DuplicatesGenerator::numDuplicated [protected] |
Referenced by finish(), handleMessage(), and initialize().
unsigned int DuplicatesGenerator::numPackets [protected] |
Referenced by finish(), handleMessage(), and initialize().