#include <GiaTokenFactory.h>
It grants the next token to the node which has fewest tokens. If some nodes have the same amount of granted tokens, the node with the highest capacity will obtain the token.
Public Member Functions | |
virtual int | numInitStages () const |
Sets init stage. | |
virtual void | initialize (int stage) |
Initializes this class and set some WATCH(variable) for OMNeT++. | |
virtual void | handleMessages (cMessage *msg) |
This module doesn't handle OMNeT++ messages. | |
virtual void | setNeighbors (GiaNeighbors *neighbors) |
Set neighbors. | |
void | setMaxHopCount (uint maxHopCount) |
Set maximum hop count. | |
virtual void | grantToken () |
Sends a token to a GiaNode. | |
Protected Types | |
typedef std::priority_queue< GiaNode, std::vector< GiaNode >, tokenCompareGiaNode > | TokenQueue |
Protected Member Functions | |
void | createPriorityQueue () |
Creates priority queue. | |
void | clearTokenQueue () |
Clears tokenQueue. | |
void | updateQueueVector () |
Update TokenQueue-Vector (for OMNeT++ WATCH). | |
void | updateSentTokens () |
Increase sentTokens at neighbor-node which is on top of priority queue. | |
void | sendToken () |
Sends token to node on top of priority queue. | |
Protected Attributes | |
Gia * | gia |
TokenQueue | tokenQueue |
prioriry queue of all current neighbors | |
GiaNeighbors * | neighbors |
pointer to our current neighbors | |
std::vector< GiaNode > | tokenQueueVector |
uint | maxHopCount |
a vector of the priority queue (to visualize current priority state) maximum hop count | |
uint | stat_sentTokens |
number of sent tokens | |
Classes | |
class | tokenCompareGiaNode |
typedef std::priority_queue<GiaNode, std::vector<GiaNode>, tokenCompareGiaNode> GiaTokenFactory::TokenQueue [protected] |
virtual int GiaTokenFactory::numInitStages | ( | ) | const [inline, virtual] |
void GiaTokenFactory::initialize | ( | int | stage | ) | [virtual] |
Initializes this class and set some WATCH(variable) for OMNeT++.
stage | Level of initialization (OMNeT++) |
00031 { 00032 // wait until IPAddressResolver finished his initialization 00033 if(stage != MIN_STAGE_OVERLAY) 00034 return; 00035 00036 gia = check_and_cast<Gia*>(parentModule()->submodule("gia")); 00037 00038 stat_sentTokens = 0; 00039 00040 WATCH(stat_sentTokens); 00041 WATCH_VECTOR(tokenQueueVector); 00042 }
void GiaTokenFactory::handleMessages | ( | cMessage * | msg | ) | [virtual] |
void GiaTokenFactory::setNeighbors | ( | GiaNeighbors * | neighbors | ) | [virtual] |
Set neighbors.
neighbors | pointer to our neighborlist |
00050 { 00051 neighbors = nghbors; 00052 }
void GiaTokenFactory::setMaxHopCount | ( | uint | maxHopCount | ) |
Set maximum hop count.
maxHopCount |
00055 { 00056 this->maxHopCount = maxHopCount; 00057 }
void GiaTokenFactory::grantToken | ( | ) | [virtual] |
Sends a token to a GiaNode.
00060 { 00061 // create priority queue 00062 createPriorityQueue(); 00063 00064 // update sentTokenCount at node on top of priority queue 00065 updateSentTokens(); 00066 00067 // send token to top of queue 00068 gia->sendToken(tokenQueue.top()); 00069 00070 // increse statistic variable 00071 stat_sentTokens++; 00072 00073 updateQueueVector(); 00074 }
void GiaTokenFactory::createPriorityQueue | ( | ) | [protected] |
Creates priority queue.
00077 { 00078 clearTokenQueue(); 00079 for ( uint i=0; i<neighbors->getSize(); i++ ) 00080 tokenQueue.push(neighbors->get(i)); 00081 }
void GiaTokenFactory::clearTokenQueue | ( | ) | [protected] |
void GiaTokenFactory::updateQueueVector | ( | ) | [protected] |
Update TokenQueue-Vector (for OMNeT++ WATCH).
00090 { 00091 // fill tokenQueueVector 00092 tokenQueueVector.clear(); 00093 while (!tokenQueue.empty()) { 00094 tokenQueueVector.push_back(tokenQueue.top()); 00095 tokenQueue.pop(); 00096 } 00097 }
void GiaTokenFactory::updateSentTokens | ( | ) | [protected] |
Increase sentTokens at neighbor-node which is on top of priority queue.
00100 { 00101 GiaNeighborInfo* nodeInfo = neighbors->get(tokenQueue.top().getNodeHandle()); 00102 nodeInfo->sentTokens++; 00103 }
void GiaTokenFactory::sendToken | ( | ) | [protected] |
Sends token to node on top of priority queue.
Gia* GiaTokenFactory::gia [protected] |
TokenQueue GiaTokenFactory::tokenQueue [protected] |
prioriry queue of all current neighbors
GiaNeighbors* GiaTokenFactory::neighbors [protected] |
pointer to our current neighbors
std::vector<GiaNode> GiaTokenFactory::tokenQueueVector [protected] |
uint GiaTokenFactory::maxHopCount [protected] |
a vector of the priority queue (to visualize current priority state) maximum hop count
uint GiaTokenFactory::stat_sentTokens [protected] |
number of sent tokens