Cet exemple 2 est identique à l'exemple 1, sans l'utilisation de singletons.
Fichier .axl – Partie <options>
Pour commencer, voici les options du fichier axl :
SimpleTableComparatorExample2.axl
<options>
<service-instance name="st-output" type="Arcane::ISimpleTableOutput">
<description>ST Output</description>
</service-instance>
<service-instance name="st-comparator" type="Arcane::ISimpleTableComparator">
<description>ST Comparator</description>
</service-instance>
</options>
On peut constater la présence des deux services.
Fichier .arc – Partie option du module
Voici le .arc
correspondant :
SimpleTableComparatorExample2.arc
<simple-table-comparator-example2>
<st-output name="SimpleCsvOutput">
<tableDir>example2</tableDir>
<tableName>Results_Example2</tableName>
</st-output>
<st-comparator name="SimpleCsvComparator">
</st-comparator>
</simple-table-comparator-example2>
Ce que l'on peut voir ici est que le comparator n'a pas d'option.
Point d'entrée initial
Voici le point d'entrée start-init
:
SimpleTableComparatorExample2Module.cc
void SimpleTableComparatorExample2Module::
initModule()
{
srand(1234);
options()->stOutput()->init();
}
Point d'entrée loop
Le point d'entrée compute-loop
:
SimpleTableComparatorExample2Module.cc
void SimpleTableComparatorExample2Module::
loopModule()
{
options()->stOutput()->addColumn("Iteration " + String::fromNumber(m_global_iteration()));
Integer nb_fissions = rand()%99;
Integer nb_collisions = rand()%99;
options()->stOutput()->addElementInRow("Nb de Fissions", nb_fissions);
options()->stOutput()->addElementInRow("Nb de Collisions", nb_collisions);
if (m_global_iteration() == 3)
subDomain()->timeLoopMng()->stopComputeLoop(true);
}
Point d'entrée exit
Enfin, voici le point d'entrée exit
:
SimpleTableComparatorExample2Module.cc
void SimpleTableComparatorExample2Module::
endModule()
{
options()->stComparator()->init(options()->stOutput());
if(!options()->stComparator()->isReferenceExist()){
info() << "Écriture du fichier de référence";
options()->stComparator()->writeReferenceFile();
}
else {
if(options()->stComparator()->compareWithReference()){
info() << "Mêmes valeurs !!!";
}
else{
error() << "Valeurs différentes :(";
IArcaneMain::arcaneMain()->setErrorCode(1);
}
}
options()->stOutput()->writeFile();
}
Pas de surprises, c'est la même utilisation.