25 void MM_maxWP_Out::initialize() {
26 defaultMaxWP = par(
"defWP").longValue();
27 if(defaultMaxWP < 0) { error(
"Error at DL_Out. defWP must be >=0!"); }
30 cXMLElement* Xml = NULL;
31 if (par(
"data").xmlValue() != NULL && par(
"data").xmlValue()->hasChildren()){
32 Xml = par(
"data").xmlValue();
36 cXMLElementList queues = Xml->getChildrenByTagName(
"queue");
37 for(
auto queue : queues){
38 if (!queue->getAttribute(
"id")) { error(
"Error parsing DL_Out Queue. Its ID is missing!"); }
39 std::string
id = queue->getAttribute(
"id");
40 if (
id==
"") { error(
"Error parsing DL_Out Queue. Queue ID cannot be empty!"); }
42 if (!queue->getAttribute(
"wp")) { error(
"Error parsing DL_Out Queue. Its wp is missing!"); }
43 int wp = atoi(queue->getAttribute(
"wp"));
44 if (wp<0) { error(
"Error parsing DL_Out Queue. Queue wp must be >=0!"); }
48 if (queue->getAttribute(
"multip")) {
49 multip = atof(queue->getAttribute(
"multip"));
50 if (multip<=0) { error(
"Error parsing DL_Out Queue. Queue multip must be >0!"); }
53 queueName2WP[id] = wp;
54 queueName2Multip[id] = multip;
58 MM_maxWP_Out::~MM_maxWP_Out(){}
60 void MM_maxWP_Out::finish() {}
63 queueInS[q].push_back(portS[p]);
68 queueInS[q].pop_back();
74 portQueues[p].insert(q);
75 if(queueName2WP.find(q->getName()) != queueName2WP.end()) {
76 queueWP[q] = queueName2WP[q->getName()];
78 queueWP[q] = defaultMaxWP;
80 if(queueName2Multip.find(q->getName()) != queueName2Multip.end()) {
81 queueMultip[q] = queueName2Multip[q->getName()];
92 for(
auto & q : portQueues[p]) {
93 if(!queueInS[q].empty()) {
94 double temp = queueWP[q] - now + queueInS[q].front();
96 temp *= queueMultip[q];
106 queueInS[ret].pop_front();
112 simtime_t MM_maxWP_Out::getnextTime(
RMTPort * p) {
Define_Module(MM_maxWP_Out)