De la chaîne affichant un élément d'énumération à un entier


o AssignEnumToInt
Fonction de passage entre symboles d'énumération et entiers correspondants.
Les fichiers externes de données en entrée de la simulation peuvent contenir des chaînes de caractères représantant des éléments d'énumération. Par exemple, déclarer que le descripteur X, d'une instance de la classe B, prend pour valeur le symbole de classe de la classe A, on écrira :

+ I unB B
    x = ID_A;

Dans le fichier externe, le mot 'ID_A' est lu comme une chaîne de caractères, alors que le descripteur X est à valeur entière (un symbole de classe). L'interpréteur doit donc effectuer une conversion.

Pour les classes prédéfinies d'entités, de descripteurs, de méthodes et d'arguments, la fonction D_EnumToInt assure la conversion de la chaîne de caractères en l'entier correspondant. Ainsi, l'interprétation d'une ligne X=BD_ENTITY; du fichier externe affectera la valeur 2 au descripteur X.
D_EnumToInt assure aussi la conversion pour les énumérations QuantificatorId, EntitySpecMode et RelationalOperator.

Pour l'interprétation des chaînes correspondant aux symboles dans la couche applicative, le développeur pourra écrire une fonction globale, nommée par exemple App_EnumToInt. Elle commencera par invoquer D_EnumToInt, puis enchaînera la traduction des symboles de l'application :

int App_EnumToInt (char* token) {
  int result;
  int resultFromDiese = D_EnumToInt(token);
  if(resultFromDiese >= 0) {
    result = resultFromDiese;
  }
  else if(!strcmp(token, "ID_A")) result = 11;
  else if(!strcmp(token, "ID_B")) result = 12;
  else if(!strcmp(token, "ID_A_ELEM")) result = 13;
  else if(!strcmp(token, "ID_SET_OF_A")) result = 14;
  return result;
}

Certains services de DIESE ont intérêt à connaitre la correspondance, installée dans l'application, entre les symboles d'énumération et la valeur entière. C'est notamment dle cas de l'interprétaion des fichiers en entrée, dont la programmation générale doit s'appliquer aux applications particulières. A cet effet DIESE possède une fonction globale, EnumToInt, surchargeable par une autre fonction, AssingEnumToInt. Il suffit alors au développeur de l'application d'écrire, en début d'exécution ... :

int main (...) {
  ...
  AssignEnumToInt(App_EnumToInt);
  ...
}
... pour que DIESE sache interpréter les chaînes propres à l'application.

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