#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.
Definition at line 30 of file DuplicatesGenerator.h.
void DuplicatesGenerator::finish | ( | ) | [protected, virtual] |
Definition at line 93 of file DuplicatesGenerator.cc.
{ recordScalar("total packets", numPackets); recordScalar("total duplicated", numDuplicated); }
void DuplicatesGenerator::handleMessage | ( | cMessage * | msg | ) | [protected, virtual] |
Definition at line 44 of file DuplicatesGenerator.cc.
{ 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] |
Definition at line 22 of file DuplicatesGenerator.cc.
{ 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] |
Definition at line 67 of file DuplicatesGenerator.cc.
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] |
Definition at line 36 of file DuplicatesGenerator.h.
Referenced by handleMessage(), initialize(), and parseVector().
bool DuplicatesGenerator::generateFurtherDuplicates [protected] |
Definition at line 35 of file DuplicatesGenerator.h.
Referenced by handleMessage(), and initialize().
unsigned int DuplicatesGenerator::numDuplicated [protected] |
Definition at line 34 of file DuplicatesGenerator.h.
Referenced by finish(), handleMessage(), and initialize().
unsigned int DuplicatesGenerator::numPackets [protected] |
Definition at line 33 of file DuplicatesGenerator.h.
Referenced by finish(), handleMessage(), and initialize().