Auto-génération d'un événement


o standardEvent_generateNextEvent_Body
o GenerateNextEvent
Le corps, affecté par SetGenerateNextEvent, génére un nouvel événement à partir de celui qui est en cours d'exécution, avant de l'insérer dans l'agenda. Le nouvel événement est d'une classe différente ou de la même classe, selon qu'une invocation de SetNextEventClassName a été faite ou non lors de la construction. Par défaut d'un tel appel, les deux noms de classe sont les mêmes.

bool pingEvent_generateNextEvent_Body(EventMethod* pM) {
  bool succeed = TRUE;
  Event* pCurrentEvent = pM->DescribedEvent();
  ...
  Event* pNextEvent = new PongEvent();
  ...
  pCurrentEvent->SetNextEvent(pNextEvent);
  ...
  return succeed;
}
PingEvent::PingEvent() 
   : Event(PING_EVENT, "pingEvent") {
  ...
  SetGenerateNextEvent(pingEvent_generateNextEvent_Body);
  ...
};

Le constructeur GenerateNextEvent() affecte le symbole de classe GENERATE_NEXTEVENT et le nom de classe "generateNextEvent". Ainsi, on peut écrire :

int main(...) {
  ...
  Event* pEv = new PingEvent();
  bool succeed;

  // le code ci-dessous ...
  Method* pM = pEv->GetMethod(GENERATE_NEXTEVENT);
  succeed = ((EventPredicate*)pM)->Body((EventMethod*)pM);

  // ... est équivalent à celui-ci
  succeed = pEv->ExecPredicate(GENERATE_NEXTEVENT);
  ...
}

This page was generated with the help of DOC++.