<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wiki.bht.fr/index.php?action=history&amp;feed=atom&amp;title=Tutoriel_de_Data_Flow_Generator_V0</id>
	<title>Tutoriel de Data Flow Generator V0 - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.bht.fr/index.php?action=history&amp;feed=atom&amp;title=Tutoriel_de_Data_Flow_Generator_V0"/>
	<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=Tutoriel_de_Data_Flow_Generator_V0&amp;action=history"/>
	<updated>2026-08-09T07:30:03Z</updated>
	<subtitle>Historique des révisions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=Tutoriel_de_Data_Flow_Generator_V0&amp;diff=4938&amp;oldid=prev</id>
		<title>WikiAdmin : 1 version importée : dfg</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=Tutoriel_de_Data_Flow_Generator_V0&amp;diff=4938&amp;oldid=prev"/>
		<updated>2026-07-24T17:08:24Z</updated>

		<summary type="html">&lt;p&gt;1 version importée : dfg&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fr&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Version précédente&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version du 24 juillet 2026 à 17:08&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;fr&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Aucune différence)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://wiki.bht.fr/index.php?title=Tutoriel_de_Data_Flow_Generator_V0&amp;diff=4937&amp;oldid=prev</id>
		<title>toross&gt;WikiAdmin : /* Explication des sources */</title>
		<link rel="alternate" type="text/html" href="https://wiki.bht.fr/index.php?title=Tutoriel_de_Data_Flow_Generator_V0&amp;diff=4937&amp;oldid=prev"/>
		<updated>2024-02-16T22:00:55Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Explication des sources&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{IntroductionDFG}}&lt;br /&gt;
== Tuto_002 : Développement en c++ sous LINUX ==&lt;br /&gt;
=== L'objectif ===&lt;br /&gt;
{{parW|1=&lt;br /&gt;
L'objectif est de montrer comment créer rapidement un driver en c++ pour écrire/lire dans/depuis un fichier au format {{mb|xml}} dont les données sont modélisées par le diagramme suivant :&lt;br /&gt;
{{c|&lt;br /&gt;
&amp;lt;uml&amp;gt;&lt;br /&gt;
class CDessin {&lt;br /&gt;
} &lt;br /&gt;
CDessin  *--&amp;gt; &amp;quot;1&amp;quot; CBase : base &lt;br /&gt;
CPoint  --|&amp;gt; CBase&lt;br /&gt;
CPoint : float x &lt;br /&gt;
CPoint : float y &lt;br /&gt;
CSegment  --|&amp;gt; CBase&lt;br /&gt;
CSegment  *--&amp;gt; &amp;quot;1&amp;quot; CPoint : A &lt;br /&gt;
CSegment  *--&amp;gt; &amp;quot;1&amp;quot; CPoint : B &lt;br /&gt;
CCercle  --|&amp;gt; CBase&lt;br /&gt;
CCercle  *--&amp;gt; &amp;quot;1&amp;quot; CPoint : C &lt;br /&gt;
CCercle : float R &lt;br /&gt;
CCompound  --|&amp;gt; CBase&lt;br /&gt;
CCompound  *--&amp;gt; &amp;quot;*&amp;quot; CBase : elements &lt;br /&gt;
hide empty methods&lt;br /&gt;
hide empty fields&lt;br /&gt;
&amp;lt;/uml&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
=== Pour commencer ===&lt;br /&gt;
{{parW|1=&lt;br /&gt;
&lt;br /&gt;
Pour commencer créer les répertoires {{m|tuto_002/}} {{m|myXercesTools}} et {{m|utilities}} dans un répertoire commun dans lesquels nous allons travailler. Pour ceci tapez :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir tuto_002 &lt;br /&gt;
mkdir myXercesTools&lt;br /&gt;
mkdir utilities&lt;br /&gt;
mkdir tuto_002/generated&lt;br /&gt;
mkdir tuto_002/generated_out &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Vous aurez alors :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
├── myXercesTools&lt;br /&gt;
├── tuto_002&lt;br /&gt;
│   ├── generated&lt;br /&gt;
│   └── generated_out&lt;br /&gt;
└── utilities&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Le modèle ===&lt;br /&gt;
{{parW|1=&lt;br /&gt;
&lt;br /&gt;
Le modèle utilisé par DataFlowGenerator correspondant au modèle uml précédent  est le suivant :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;grammar type=&amp;quot;xml&amp;quot; version=&amp;quot;1.0.0&amp;quot; FileFormatVersion=&amp;quot;1.0.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;el name=&amp;quot;dessin&amp;quot; type=&amp;quot;CDessin&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;el name=&amp;quot;base&amp;quot; type=&amp;quot;CBase&amp;quot;  OnlyDefinition=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/el&amp;gt;&lt;br /&gt;
        &amp;lt;el name=&amp;quot;point&amp;quot; type=&amp;quot;CPoint&amp;quot;  heritances=&amp;quot;CBase&amp;quot;  OnlyDefinition=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;el name=&amp;quot;x&amp;quot; type=&amp;quot;float&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;el name=&amp;quot;y&amp;quot; type=&amp;quot;float&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/el&amp;gt;&lt;br /&gt;
        &amp;lt;el name=&amp;quot;segment&amp;quot; type=&amp;quot;CSegment&amp;quot;  heritances=&amp;quot;CBase&amp;quot;  OnlyDefinition=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;el name=&amp;quot;A&amp;quot; type=&amp;quot;@CPoint&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;el name=&amp;quot;B&amp;quot; type=&amp;quot;@CPoint&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/el&amp;gt;&lt;br /&gt;
        &amp;lt;el name=&amp;quot;cercle&amp;quot; type=&amp;quot;CCercle&amp;quot;  heritances=&amp;quot;CBase&amp;quot;  OnlyDefinition=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;el name=&amp;quot;C&amp;quot; type=&amp;quot;@CPoint&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;el name=&amp;quot;R&amp;quot; type=&amp;quot;float&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/el&amp;gt;&lt;br /&gt;
        &amp;lt;el name=&amp;quot;compound&amp;quot; type=&amp;quot;CCompound&amp;quot; cardinality=&amp;quot;*&amp;quot;  heritances=&amp;quot;CBase&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;el name=&amp;quot;elements&amp;quot; type=&amp;quot;@CBase&amp;quot; cardinality=&amp;quot;*&amp;quot;&lt;br /&gt;
           accept=&amp;quot;CPoint:CSegment:CCercle:CCompound&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/el&amp;gt;&lt;br /&gt;
    &amp;lt;/el&amp;gt;&lt;br /&gt;
&amp;lt;/grammar&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
&lt;br /&gt;
Sur le site http://dfg.bht.fr, copiez ce modèle dans le champ de texte nommé {{mb|grammar_file_name}} et dans le champ de texte nommé {{mb|data_name}} écrivez &amp;quot;tuto_002_&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Sélectionnez {{mb|Générer du c++ avec Xerces}} et puis cliquez sur le bouton {{mb|Générer}} pour créer les fichiers suivants :&lt;br /&gt;
* Les variables :&lt;br /&gt;
** tuto_002_XMLDriver_pkg_version.h&lt;br /&gt;
** tuto_002_XMLDriver.h&lt;br /&gt;
** tuto_002_XMLDriver.cxx&lt;br /&gt;
* Les fixes&lt;br /&gt;
** my_xerces_impl.h&lt;br /&gt;
** my_xerces_impl.cxx&lt;br /&gt;
** utilities.h&lt;br /&gt;
** utilities.cxx&lt;br /&gt;
&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
&lt;br /&gt;
Copier ces fichiers dans les répertoires {{m|myXercesTools}}, {{m|utilities}} et  {{m|tuto_002/generated}} :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
.&lt;br /&gt;
├── myXercesTools&lt;br /&gt;
│   ├── my_xerces_impl.cxx&lt;br /&gt;
│   └── my_xerces_impl.h&lt;br /&gt;
├── tuto_002&lt;br /&gt;
│   ├── generated&lt;br /&gt;
│   │   ├── tuto_002_XMLDriver.cxx&lt;br /&gt;
│   │   ├── tuto_002_XMLDriver.h&lt;br /&gt;
│   │   └── tuto_002_XMLDriver_pkg_version.h&lt;br /&gt;
└── utilities&lt;br /&gt;
    ├── utilities.cxx&lt;br /&gt;
    └── utilities.h&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Compilation ===&lt;br /&gt;
==== Si XERCES 2.7 n'est pas installé sur votre système ====&lt;br /&gt;
{{parW|1=&lt;br /&gt;
Les sources de XERCES peuvent être téléchargées sous la forme de fichier nommé xerces-c-src_2_7_0.tar.gz depuis le site de [http://archive.apache.org/dist/xml/xerces-c/Xerces-C_2_7_0/source/ archive.apache.org/dist/xml/xerces-c/Xerces-C_2_7_0/source/].&lt;br /&gt;
&lt;br /&gt;
}}{{parW|1=&lt;br /&gt;
&lt;br /&gt;
En notant {{m|&amp;lt;install_bin_dir&amp;gt;}} le répertoire dans lequel sera installée XERCES et {{m|&amp;lt;install_src_dir&amp;gt;}} le&lt;br /&gt;
répertoire à partir duquel l'installation est réalisée, les opérations suivantes permettent l'installation :&lt;br /&gt;
{{code|lang=bash|line|code=&lt;br /&gt;
 1 mkdir {{m|&amp;lt;install_bin_dir&amp;gt;}}/xerces-c-lib_2_7_0&lt;br /&gt;
 2 export {{m|XERCESCROOT}}=&amp;lt;install_src_dir&amp;gt;&lt;br /&gt;
 3 cd {{m|&amp;lt;install_src_dir&amp;gt;}}/src/xercesc&lt;br /&gt;
 4 autoconf&lt;br /&gt;
 5 ./runConfigure -plinux -P {{m|&amp;lt;install_bin_dir&amp;gt;}}&lt;br /&gt;
 6 make&lt;br /&gt;
 7 make install&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
==== Le programme tuto_002 ====&lt;br /&gt;
{{parW|1=&lt;br /&gt;
&lt;br /&gt;
Maintenant la variable XERCESCROOT doit être positionné sur le librairie XERCES installé donc cette fois-ci : &lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export XERCESCROOT=&amp;lt;install_bin_dir&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
par exemple :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export XERCESCROOT=/local01/atoross/exe/xerces-c-lib_2_7_0  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Afin de pouvoir exécuter le programme compilé il faut aussi modifier LD_LIBRARY_PATH comme suit :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export LD_LIBRARY_PATH=$XERCESCROOT/lib:$LD_LIBRARY_PATH&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Le répertoire XERCESCROOT doit contenir les répertoires :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
.&lt;br /&gt;
├── include&lt;br /&gt;
└── lib&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Créer un fichier nommé &amp;quot;{{m|Makefile}}&amp;quot; dans le répertoire tuto_002 et copier le texte suivant dans ce fichier :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
proj=tuto_002&lt;br /&gt;
all : test&lt;br /&gt;
&lt;br /&gt;
test : ${proj} &lt;br /&gt;
	&lt;br /&gt;
${proj} : util.o myxerces.o xmldriver.o  main.cpp     	&lt;br /&gt;
	g++ -I${XERCESCROOT}/include -I../utilities  -Igenerated -I../myXercesTools -L${XERCESCROOT}/lib  -lxerces-c    main.cpp util.o myxerces.o xmldriver.o -o ${proj}&lt;br /&gt;
	&lt;br /&gt;
util.o	: ../utilities/utilities.cxx  ../utilities/utilities.h&lt;br /&gt;
	g++ -I../utilities ../utilities/utilities.cxx  -c -o util.o&lt;br /&gt;
&lt;br /&gt;
xmldriver.o :generated/$(proj)_XMLDriver.cxx  generated/$(proj)_XMLDriver.h generated/$(proj)_XMLDriver_pkg_version.h&lt;br /&gt;
	echo &amp;quot;g++ -I${XERCESCROOT}/include -I../utilities -I../myXercesTools  -Igenerated  -L${XERCESCROOT}/lib   generated/${proj}_XMLDriver.cxx -c -o xmldriver.o&amp;quot;&lt;br /&gt;
	g++ -I${XERCESCROOT}/include -I../utilities -I../myXercesTools  -Igenerated  -L${XERCESCROOT}/lib   generated/${proj}_XMLDriver.cxx -c -o xmldriver.o&lt;br /&gt;
&lt;br /&gt;
myxerces.o:   ../myXercesTools/my_xerces_impl.cxx ../myXercesTools/my_xerces_impl.h&lt;br /&gt;
	echo &amp;quot;g++ -I../utilities -I../myXercesTools -I${XERCESCROOT}/include -L${XERCESCROOT}/lib    ../myXercesTools/my_xerces_impl.cxx -c -o myxerces.o&amp;quot;&lt;br /&gt;
	g++ -I../utilities -I../myXercesTools -I${XERCESCROOT}/include -L${XERCESCROOT}/lib    ../myXercesTools/my_xerces_impl.cxx -c -o myxerces.o&lt;br /&gt;
clean :&lt;br /&gt;
	-rm *.o *~ ${proj} ./generated_out/*&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Les sources du programme doivent être écrite dans le fichier nommé &amp;quot;{{m|main.cpp}}&amp;quot; et créé dans tuto_002, copier ces sources depuis le paragraphe &amp;quot;[[#Le_programme_complet|le programme complet]]&amp;quot; dans ce fichier.&lt;br /&gt;
Nous avons maintenant les fichiers suivants : &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
.&lt;br /&gt;
├── myXercesTools&lt;br /&gt;
│   ├── my_xerces_impl.cxx&lt;br /&gt;
│   └── my_xerces_impl.h&lt;br /&gt;
├── tuto_002&lt;br /&gt;
│   ├── generated&lt;br /&gt;
│   │   ├── tuto_002_XMLDriver.cxx&lt;br /&gt;
│   │   ├── tuto_002_XMLDriver.h&lt;br /&gt;
│   │   └── tuto_002_XMLDriver_pkg_version.h&lt;br /&gt;
│   ├── generated_out&lt;br /&gt;
│   ├── main.cpp&lt;br /&gt;
│   ├── Makefile&lt;br /&gt;
└── utilities&lt;br /&gt;
    ├── utilities.cxx&lt;br /&gt;
    └── utilities.h&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Pour compiler entrer dans le répertoire tuto_002 et tapez :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Pour exécuter le programme entrer dans le répertoire tuto_002 et tapez :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./tuto_002&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Vous verrez alors aparaître le fichiers :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
generated_out/&lt;br /&gt;
├── dessin1.xml&lt;br /&gt;
└── dessin2.xml&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Explication des sources ===&lt;br /&gt;
&lt;br /&gt;
==== Extension, utilisation de la fabrique ====&lt;br /&gt;
{{parW|1=&lt;br /&gt;
&lt;br /&gt;
Avoir des données sans pouvoir ajouter des traitements ou extensions ce n'est pas très intéressant. Pour étendre les classes générées on utilise l' héritage et le polymorphisme des classes. Afin de pouvoir utiliser les nouveaux types de classe on utilise un {{m|fabrique}} qui est un {{m|singleton}}.&lt;br /&gt;
&lt;br /&gt;
Par exemple si nous voulions ajouter un traitement aux cercle, une translation, on peut écrire le code suivant :  &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
class myCCercle : public CCercle&lt;br /&gt;
{&lt;br /&gt;
public :&lt;br /&gt;
    int my_attr ;&lt;br /&gt;
    myCCercle() : CCercle(), my_attr(0)&lt;br /&gt;
    {&lt;br /&gt;
    } ;&lt;br /&gt;
    void move( double dx, double dy )&lt;br /&gt;
    {&lt;br /&gt;
        C-&amp;gt;x = C-&amp;gt;x+dx ;&lt;br /&gt;
        C-&amp;gt;y = C-&amp;gt;y+dy ;&lt;br /&gt;
    }  &lt;br /&gt;
};&lt;br /&gt;
CDessinBase * myCCercle_factory()&lt;br /&gt;
{&lt;br /&gt;
    return  new myCCercle() ;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mais il ne faut pas oublier d'enregistrer cette classe dans la fabrique, voici comment le faire :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
CDessinBase_factory::instance()-&amp;gt;register_creator( &amp;quot;CCercle&amp;quot;, myCCercle_factory ) ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour créer la classe il suffit d'appeler la fabrique :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
CCercle * cercle =  (CCercle *) factory-&amp;gt;create( &amp;quot;CCercle&amp;quot; ) ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici l'exemple qui montre comment appliquer le translation :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
myCCercle* mycercle = (myCCercle*) cercle ;&lt;br /&gt;
mycercle-&amp;gt;move( 10.0, 10.0 ) ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
==== Construction des données ====&lt;br /&gt;
{{parW|1=&lt;br /&gt;
&lt;br /&gt;
La construction se fait en appelant la fabrique. Pour les structures ayant une cardinal diffèrent de 1 nous utilisons les {{m|vecteur}} de la librairie {{m|STL}}.&lt;br /&gt;
Exemple :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
CDessinBase_factory * factory =CDessinBase_factory::instance();&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
CDessin * Med = (CDessin *) factory-&amp;gt;create( &amp;quot;CDessin&amp;quot; ) ;&lt;br /&gt;
CCompound * comp =  (CCompound *) factory-&amp;gt;create( &amp;quot;CCompound&amp;quot; ) ;&lt;br /&gt;
Med-&amp;gt;compound.push_back( comp ) ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Remarque|texte=La mémoire allouée est libérée par le code généré}}&lt;br /&gt;
}}&lt;br /&gt;
==== Charger et décharger ====&lt;br /&gt;
{{parW|1=&lt;br /&gt;
En utilisant une instance de {{m|CFileFormatInfo}} nous pouvons sauvegarder ou charger tout fichier contenant les données conforme au modèle. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
CFileFormatInfo Info ;&lt;br /&gt;
Info.Save2XMLFile( Med , &amp;quot;generated_out/dessin1.xml&amp;quot; ) ;&lt;br /&gt;
&lt;br /&gt;
CDessin * Med2 = Info.LoadFromXMLFile( &amp;quot;generated_out/dessin1.xml&amp;quot; ) ;&lt;br /&gt;
Info.Save2XMLFile( Med2 , &amp;quot;generated_out/dessin2.xml&amp;quot; ) ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Remarque|texte=La classe {{m|CFileFormatInfo}} cache bon nombre d'initialisations XERCES.}}&lt;br /&gt;
}}&lt;br /&gt;
==== Le programme complet ====&lt;br /&gt;
{{parW|1=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;generated/tuto_002_XMLDriver.h&amp;quot;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;typeinfo&amp;gt;&lt;br /&gt;
using namespace tuto_002_XMLDriver_ns ;&lt;br /&gt;
&lt;br /&gt;
class myCCercle : public CCercle&lt;br /&gt;
{&lt;br /&gt;
public :&lt;br /&gt;
    int my_attr ;&lt;br /&gt;
    myCCercle() : CCercle(), my_attr(0)&lt;br /&gt;
    {&lt;br /&gt;
    } ;&lt;br /&gt;
    void move( double dx, double dy )&lt;br /&gt;
    {&lt;br /&gt;
        C-&amp;gt;x = C-&amp;gt;x+dx ;&lt;br /&gt;
        C-&amp;gt;y = C-&amp;gt;y+dy ;&lt;br /&gt;
    }  &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
CDessinBase * myCCercle_factory()&lt;br /&gt;
{&lt;br /&gt;
    return  new myCCercle() ;&lt;br /&gt;
};&lt;br /&gt;
 &lt;br /&gt;
int main(int argc, char * argv[ ])&lt;br /&gt;
{&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;start&amp;quot; &amp;lt;&amp;lt; std::endl ;&lt;br /&gt;
    &lt;br /&gt;
    //enregistrement du créateur&lt;br /&gt;
    CDessinBase_factory::instance()-&amp;gt;register_creator( &amp;quot;CCercle&amp;quot;, myCCercle_factory ) ;&lt;br /&gt;
        &lt;br /&gt;
    &lt;br /&gt;
    // Instance sur la fabrique de classe&lt;br /&gt;
    CDessinBase_factory * factory =CDessinBase_factory::instance();&lt;br /&gt;
&lt;br /&gt;
    // Créaton dans la mémoire&lt;br /&gt;
    CDessin * Med = (CDessin *) factory-&amp;gt;create( &amp;quot;CDessin&amp;quot; ) ;&lt;br /&gt;
    CCompound * comp =  (CCompound *) factory-&amp;gt;create( &amp;quot;CCompound&amp;quot; ) ;&lt;br /&gt;
    Med-&amp;gt;compound.push_back( comp ) ;&lt;br /&gt;
&lt;br /&gt;
    CCercle * cercle =  (CCercle *) factory-&amp;gt;create( &amp;quot;CCercle&amp;quot; ) ;&lt;br /&gt;
    cercle-&amp;gt;C-&amp;gt;x = 12.0 ;&lt;br /&gt;
    cercle-&amp;gt;C-&amp;gt;x = 3.0 ;&lt;br /&gt;
    cercle-&amp;gt;R = 40.0 ;&lt;br /&gt;
    comp-&amp;gt;elements.push_back( (CBase *) cercle  ) ;&lt;br /&gt;
&lt;br /&gt;
    CSegment * segment =  (CSegment *) factory-&amp;gt;create( &amp;quot;CSegment&amp;quot; ) ;&lt;br /&gt;
    segment-&amp;gt;A-&amp;gt;x = 5.0 ;&lt;br /&gt;
    segment-&amp;gt;A-&amp;gt;y = 6.0 ;&lt;br /&gt;
    segment-&amp;gt;B-&amp;gt;x = 1.0 ;&lt;br /&gt;
    segment-&amp;gt;B-&amp;gt;y = -2.0 ;&lt;br /&gt;
    comp-&amp;gt;elements.push_back( (CBase *) segment  ) ;&lt;br /&gt;
&lt;br /&gt;
    CCompound * comp2 =  (CCompound *) factory-&amp;gt;create( &amp;quot;CCompound&amp;quot; ) ;&lt;br /&gt;
    comp-&amp;gt;elements.push_back( (CBase *) comp2  ) ;&lt;br /&gt;
    cercle =  (CCercle *) factory-&amp;gt;create( &amp;quot;CCercle&amp;quot; ) ;&lt;br /&gt;
    cercle-&amp;gt;C-&amp;gt;x = 16.0 ;&lt;br /&gt;
    cercle-&amp;gt;C-&amp;gt;x = 7.0 ;&lt;br /&gt;
    cercle-&amp;gt;R = 30.0 ;&lt;br /&gt;
    comp2-&amp;gt;elements.push_back( (CBase *) cercle  ) ;&lt;br /&gt;
&lt;br /&gt;
    comp = comp2 ;&lt;br /&gt;
&lt;br /&gt;
    comp2 =  (CCompound *) factory-&amp;gt;create( &amp;quot;CCompound&amp;quot; ) ;&lt;br /&gt;
    comp-&amp;gt;elements.push_back( (CBase *) comp2  ) ;&lt;br /&gt;
    cercle =  (CCercle *) factory-&amp;gt;create( &amp;quot;CCercle&amp;quot; ) ;&lt;br /&gt;
    cercle-&amp;gt;C-&amp;gt;x = 13.0 ;&lt;br /&gt;
    cercle-&amp;gt;C-&amp;gt;x = 4.0 ;&lt;br /&gt;
    cercle-&amp;gt;R = 20.0 ;&lt;br /&gt;
    comp2-&amp;gt;elements.push_back( (CBase *) cercle  ) ;&lt;br /&gt;
&lt;br /&gt;
    comp =  (CCompound *) factory-&amp;gt;create( &amp;quot;CCompound&amp;quot; ) ;&lt;br /&gt;
    Med-&amp;gt;compound.push_back( comp ) ;&lt;br /&gt;
    comp-&amp;gt;copy( comp2 ) ;&lt;br /&gt;
&lt;br /&gt;
    myCCercle* mycercle = (myCCercle*) cercle ;&lt;br /&gt;
    mycercle-&amp;gt;move( 10.0, 10.0 ) ;&lt;br /&gt;
&lt;br /&gt;
    try&lt;br /&gt;
    {&lt;br /&gt;
        CFileFormatInfo Info ;&lt;br /&gt;
        Info.Save2XMLFile( Med , &amp;quot;generated_out/dessin1.xml&amp;quot; ) ;&lt;br /&gt;
&lt;br /&gt;
        CDessin * Med2 = Info.LoadFromXMLFile( &amp;quot;generated_out/dessin1.xml&amp;quot; ) ;&lt;br /&gt;
        Info.Save2XMLFile( Med2 , &amp;quot;generated_out/dessin2.xml&amp;quot; ) ;&lt;br /&gt;
    }&lt;br /&gt;
    catch (const my_xerces::myXercesError&amp;amp; toCatch)&lt;br /&gt;
    {&lt;br /&gt;
        std::cerr &amp;lt;&amp;lt; toCatch.what() &amp;lt;&amp;lt; std::endl ;&lt;br /&gt;
    }&lt;br /&gt;
    Med-&amp;gt;clear() ;&lt;br /&gt;
    delete Med ;&lt;br /&gt;
&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;end&amp;quot; &amp;lt;&amp;lt; std::endl ;&lt;br /&gt;
    return 0 ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{:DataFlowGenerator:see_too}}&lt;/div&gt;</summary>
		<author><name>toross&gt;WikiAdmin</name></author>
	</entry>
</feed>