Comme vous l'aurez probablement remarqué, les fonctions d'exportation peuvent seulement accéder à l'emploi du temps sous sa forme chromosomique de base (les fonctions d'ajustage peuvent aussi accéder aux formes slist et extension). Il a déjà été dit que sous la forme d'extension chromosomique, l'emploi du temps ressemble à la forme lisible par les humains. Pour cette raison, il est souvent utile de recourir à cette forme dans la fonction d'exportation plutôt qu'à celle chromosomique simple.
Pourtant, l'extension chromosomique qui est utilisée dans les fonctions d'ajustage n'est pas adaptée pour être utilisée dans les modules d'exportation car des évènements (tuples) peuvent être perdus dans la conversion. Par conséquent, les modules d'exportation utilise une autre forme appelée extension de sortie (output extension) qui n'a pas cet inconvénient.
La structure d'extension de sortie outputext est très proche de la structure de l'extension normale ext . Elle est également définie par un type de ressource constante et un type de ressource variable, et est également constituée d'un tableau à deux dimensions. Cependant, au lieu de contenir de simples identifiants de tuples dans l'extension normale, le tableau à deux dimensions contient ici des listes de tuples (enregistrés dans la structure tuplelist).
Considérons l'exemple suivant : si vous construisez une extension de sortie outputext pour un type de ressource constante avec l'identifiant de type con_typeid et un type de ressource variable avec l'identifiant de type var_typeid, alors l'élément suivant du tableau à deux dimension :
outputext.list[c][v]
est un pointeur vers la structure tuplelist qui contient une liste d'identifiants de tuples (évènements) qui utilisent la ressource constante d'identifiant c avec l'identifiant de type con_typeid et la ressource variable d'identifiant v avec l'identifiant de type var_typeid.
Note: Si vous ne comprenez pas cet exemple, voir la section sur les extensions de chromosomes dans la première partie de cet HOW-TO (particulièrement la partie portant sur la visualisation). Gardez à l'esprit que dans la plupart des cas, le type de ressource variable utilisé est le temps.
La structure tuplelist contient un simple tableau de tuples. Le champs tupleid est un tableau d'identifiants de tuple tuplenum.
Trois fonctions sont disponibles pour convertir la forme chromosomique de l'emploi du temps vers une extension de sortie :
outputext_new(), outputext_update() et outputext_free(). L'exemple qui suit montre comment les utiliser :
int export_function(table *tab, moduleoption *opt, char *file)
{
outputext *ext;
ext=outputext_new("dummy-constant-type", "dummy-variable-type");
outputext_update(ext, tab);
...
outputext_free(ext);
return(0);
}
La fonction outputext_new() créé une nouvelle structure d'extension de sortie et initialise ses valeurs. Le premier argument est le nom du type de ressource constante et le second le nom du type de ressource variable. Au cas où l'allocation mémoire échoue ou que les types de ressources ne sont pas trouvés, cette fonction retourne NULL. L'exemple ci-dessus ne fait pas de vérification d'erreur (qui doit être faite dans le cas d'un module réel).
La fonction outputext_update() remplit le tableau à deux dimensions dans l'extension de sortie avec les valeurs de la structure de l'emploi du temps. Après l'appel de cette fonction, l'extension de sortie est prête à être utilisée.
La fonction outputext_free() libère tous les emplacements mémoire pris par l'extension de sortie. Elle doit être appelée une fois que la structure de l'extension de sortie n'est plus nécessaire, pour éviter toute fuite de mémoire.
| Précédent | Sommaire | Suivant |
| Compiler votre module | Niveau supérieur | Internationalisation |