void MemSourceObject::initialize(){ //MemSourceState *myState = dynamic_cast<MemSourceState *>( getState() ); IntVTime sendTime = dynamic_cast<const IntVTime&>(getSimulationTime()); MemRequest *firstEvent = new MemRequest(sendTime, sendTime + 1, this, this); firstEvent->setProcessor(getName()); firstEvent->setStartTime(0); this->receiveEvent(firstEvent); }
void MemSourceObject::executeProcess(){ MemSourceState *myState = static_cast<MemSourceState *>(getState()); MemRequest* received = NULL; IntVTime sendTime = static_cast<const IntVTime&>(getSimulationTime()); //int id = getObjectID()->getSimulationObjectID(); while(true == haveMoreEvents()) { received = (MemRequest*)getEvent(); if(received != NULL){ myState->filter.update((double)((IntVTime &)getSimulationTime() - received->getStartTime() ).getTime() ); int requestsCompleted = myState->numMemRequests; if (requestsCompleted < maxMemRequests ) { double ldelay = 1.0; // we want the memRequest to get there at the exact scheduled time SimulationObject *receiver = getObjectHandle(destObjName); IntVTime recvTime = sendTime + (int) ldelay; MemRequest *newMemRequest = new MemRequest(sendTime, recvTime, this, receiver); newMemRequest->setProcessor(getName()); newMemRequest->setStartTime(sendTime.getTime()); myState->numMemRequests++; myState->oldDelay = sendTime; receiver->receiveEvent(newMemRequest); } } } }