void Process::executeProcess(){ IntVTime sendTime = dynamic_cast<const IntVTime&>(getSimulationTime()); do { PHOLDEvent* recvEvent = (PHOLDEvent*) getEvent(); if( recvEvent != NULL ){ ProcessState* myState = (ProcessState *) getState(); myState->eventReceived(); SimulationObject* receiver = getDestination(myState); // Generate the delay between the send and receive times. int ldelay = msgDelay(); IntVTime recvTime = sendTime + 1 + ldelay; PHOLDEvent* newRequest = new PHOLDEvent(sendTime, recvTime, this, receiver); newRequest->numberOfHops = recvEvent->numberOfHops + 1; newRequest->eventNumber = recvEvent->eventNumber; computationGrain(); receiver->receiveEvent(newRequest); myState->eventSent(); } } while(haveMoreEvents() == true); // end of while loop }
void Process::initialize() { for (int i = 0; i < outputNames.size(); i++) outputHandles.push_back(getObjectHandle(outputNames[i])); // replace hotspots with their indexes in our output handles // delete hotspots that are not in our neighborhood vector<vector<int> >::iterator it(hotspots.begin()); for(; it != hotspots.end(); ++it) { vector<int>::iterator iit((*it).begin()); while(iit != (*it).end()) { int n = procNumToOutputNum(*iit); if(n < 0 || n >= numberOfOutputs) (*it).erase(iit); else *iit++ = n; } } ProcessState* myState = dynamic_cast<ProcessState *>( getState() ); ASSERT(myState != NULL); delete myState->gen; // delete old copy myState->gen = new MLCG(processNumber, (processNumber + 1)); for (int i = 0; i < myState->sizeOfStateData; i++) { myState->stateBulk[i] = '1'; } // Process numbers have to be 0, 1, 2, ... to get a fully ordered // and sequenced set of event numbers in steps of 1. int eventNumberBase = numberOfTokens * processNumber; for(int i = 1; i <= numberOfTokens; i++ ) { IntVTime sendTime = dynamic_cast<const IntVTime&>(getSimulationTime()); int ldelay = msgDelay(); PHOLDEvent *event = new PHOLDEvent(sendTime, sendTime + 1 + ldelay, this, this); event->eventNumber = eventNumberBase + i; receiveEvent(event); myState->eventSent(); } }