예제 #1
0
// Returns the event to be processed
Event*
TimeWarpReceiverQueue::getEvent(SimulationObject* object) {
  ASSERT(object != NULL);
  Event* eventToProcess = 0;
  eventToProcess = peekEvent(object);
  
  if(eventToProcess != 0) {
    const OBJECT_ID receiverId = mySimulationManager->getObjectId( eventToProcess->getReceiver() );

    ReceiverQueueContainer* receiverQContainer = myReceiverQueue[receiverId.getSimulationObjectID()];
    TimeWarpEventSet* receiverQ = receiverQContainer->eventSet;
    
    receiverQ->getEvent(object);
    schedulingData->PopHeapFlag(true);
    Event* nextEvent = receiverQ->peekEvent(object);
    if(nextEvent != 0) {
      //Add the current head Event into the
      //scheduleList 
      receiverQContainer->headEventPtr = nextEvent;
    }
    else {
      receiverQContainer->headEventPtr = DummyEvent::instance();
    }
    push_heap(schedulingData->scheduleList->begin(), schedulingData->scheduleList->end(),
	      GreaterThan_ScheduleListContainerWithReceiverID()); 
  }
  //return the event
  return eventToProcess;
}
예제 #2
0
Event*
TimeWarpReceiverQueue::getEvent(SimulationObject* object, 
				 const VTIME& time) {
  ASSERT(object != NULL);
  Event* eventToProcess = 0;
  eventToProcess = peekEvent(object, time);
  
  if(eventToProcess != 0) {
    const OBJECT_ID receiverId = mySimulationManager->getObjectId( eventToProcess->getReceiver() );

    ReceiverQueueContainer* receiverQContainer = myReceiverQueue[receiverId.getSimulationObjectID()];
    TimeWarpEventSet* receiverQ = receiverQContainer->eventSet;
    
    receiverQ->getEvent(object);

    Event* nextEvent = receiverQ->peekEvent(object);
    if(nextEvent != 0) {
      //Add the current head Event into the
      //scheduleList 
      receiverQContainer->headEventPtr = nextEvent;
    }
    else {
      receiverQContainer->headEventPtr = DummyEvent::instance();
    }
    schedulingData->MakeHeapFlag(true);
  }
  //return the event
  return eventToProcess;
} // End of getEvent(...)