Méthodes prédéfinies de spécifications d'ensembles d'entités


o EntitySelector
o EntityInstantiator
o EntityListInstantiator
o QuantityEvaluator
De manière générale, le corps d'une de ces méthodes spécifie un ensemble d'entités ... :

Lorsqu'il s'agit de sélectionner, l'utilisateur code une fonction comme suit :

bool myEntitySpec_selectorPredicate_Body(EntitySpecMethod* pM) {
  bool result = false;
  Entity* pCandidate = pM->GetEntityArgValue(CANDIDATEENTITY_ARGUMENT);
  Entity* pEref = pM->GetEntityArgValue(REFERENCEENTITY_ARGUMENT);
  // détermination si pCandidate doit être sélectionnée ou non
  return result;
};

Puis, par AssignSelectorPredicate, il l'attache comme corps de la méthode EntitySelector d'une sous-classe d'EntitySpec de son domaine d'application :

MyEntitySpec::MyEntitySpec() : EntitySpec(SOME_ENTITY_CLASS_ID) {
	ClassName("myEntitySpec");
	SetQuantificatorId(NFIRST);
	SetMode(RETURN_INSTANCES);
	IntQuantity(1);
	AssignSelectorPredicate(myEntitySpec_selectorPredicate_Body);
};

Lorsqu'il s'agit d'instancier des entités que le moteur de simulation va assembler lui-même dans une liste, l'utilisateur code une fonction comme suit :

BasicEntity* myEntitySpec_entityInstantiator_Body(EntitySpecMethod* pM) {
  Entity* pEref = pM->GetEntityArgValue(REFERENCEENTITY_ARGUMENT);
  UserClassId classId = pM->GetIntArgValue(CLASSID_ARGUMENT);
  Entity* result = App_NewEntityFromId(classId);
  ... // compléments de construction de l'entité qui sera renvoyée
  return result;
};

L'attachage comme corps de la méthode EntityInstantiator d'une sous-classe d'EntitySpec du domaine d'application se fait par AssignEntityInstantiator.

Lorsqu'il s'agit d'instancier des entités et de les assembler dans une liste, l'utilisateur code une fonction comme suit :

pEntityTab* myEntitySpec_entityListInstantiator_Body(EntitySpecMethod* pM) {
  Entity* pEref = pM->GetEntityArgValue(REFERENCEENTITY_ARGUMENT);
  UserClassId classId = pM->GetIntArgValue(CLASSID_ARGUMENT);
  int listSise = pM->GetIntArgValue(LISTSIZE_ARGUMENT); 
  pEntityTab* result = new pEntityTab();
  for(int k=0;k<listSize;k++) {
    Entity* pE_k = App_NewEntityFromId(classId);
    ... // compléments de construction de l'entité qui sera renvoyée
	  result->push_back(pE_k);
  }
  return result;
};

L'attachage comme corps de la méthode EntityListInstantiator d'une sous-classe d'EntitySpec du domaine d'application se fait par AssignEntityListInstantiator.

Pour la spécification du nombre d'entités à sélectionner ou à instancier, l'utilisateur code une fonction comme suit :

int myEntitySpec_quantityEvaluator_Body(EntitySpecMethod* pM) {
  Entity* pEref = pM->GetEntityArgValue(REFERENCEENTITY_ARGUMENT);
  int result;
  ... // détermination du nombre
  return result;
};

L'attachage comme corps de la méthode QuantityEvaluator d'une sous-classe d'EntitySpec du domaine d'application se fait par AssignQuantityEvaluator.


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