NoGoalEvaluationByActivity :
Exception levée lorsqu'on a besoin d'évaluer l'atteinte d'un but par la mise en oeuvre d'une activité, mais que la méthode IntFutureValueByActivity de l'instance de IntGoal ou IFloatFutureValueByActivity de l'instance de FloatGoal n'a pas été dotée d'un corps.
Cette assignation d'un corps se fait explicitement par un appel pGoal->AssignBody([INT FLOAT]_FUTURE_VALUE_BY_ACTIVITY, f); , où f est une fonction spécifique à l'application, renvoyant un entier ou un flottant, et argumenté par un pointeur sur une EntityMethod. Par exemple :
int my_intFutureValueByActivity_Body(EntityMethod* pM){ int result = D_INTMAX; Entity* pGoal = pM->DescribedEntity(); BasicEntity* pSingle = pM->GetEntityArgValue(SINGLE_ACTIVITY_SET_ARGUMENT); pIntIntervalTab* domain = pM->GetIntDomainArgValue(TIME_DOMAIN_ARGUMENT); // ... le calcul de la valeur d'atteinte du but return result; };NoGoalEvaluationByActivityList :
Exception levée lorsqu'on a besoin d'évaluer l'atteinte d'un but par la mise en oeuvre d'un jeu d'activités, mais que la méthode IntFutureValueByActivityList de l'instance de IntGoal ou IFloatFutureValueByActivityList de l'instance de FloatGoal n'a pas été dotée d'un corps.
Cette assignation d'un corps peut se faire de deux manières :
- en donnant une valeur au descripteur ActivityActionMode du but (C_TAKE_MIN, C_TAKE_MEAN, C_TAKE_MAX) : c'est alors une des fonctions prédéfinies min mean max]StandardIntGoal_[int float]FutureValueByActivityList_Body qui est assigné comme corps ;
- explicitement par un appel pGoal->AssignBody([INT FLOAT]_FUTURE_VALUE_BY_ACTIVITY_LIST, f); , où f est une fonction spécifique à l'application, de signature identique aux fonctions prédéfinies nommées ci-dessus. Par exemple :
int my_intFutureValueByActivityList_Body(EntityMethod* pM) { int result = D_INTMAX; Entity* pGoal = pM->DescribedEntity(); IntEntityMethod* pMsub = (IntEntityMethod*)(pGoal->GetMethod(INT_FUTURE_VALUE_BY_ACTIVITY)); if(! pMsub->HasBodyAssigned()) NoGoalEvaluationByActivity((Goal*)pGoal); // exception pEntityTab* pSingleList = pM->GetEntityTabArgValue(SINGLE_LIST_ARGUMENT); pIntIntervalTab* domain = pM->GetIntDomainArgValue(TIME_DOMAIN_ARGUMENT); int nbSingle = pSingleList->size(); for (int k=0;k<nbSingle;k++) { BasicEntity* pSingle = pSingleList->get_nth(k); pMsub->SetArgValue(SINGLE_ACTIVITY_SET_ARGUMENT, pSingle); pIntIntervalTab* domainCopy = new pIntIntervalTab(*domain); pMsub->SetArgValue(TIME_DOMAIN_ARGUMENT, domainCopy); int result_k = pMsub->Body(pMsub); // ... le calcul de la contribution de cette activité // à la valeur d'atteinte du but par le jeu } return result; };