| 187 | __Les modificateurs relatifs aux signaux__ : |
| 188 | * Ajout d'un signal. Faire une vérification de cohérence, on ne doit pas |
| 189 | avoir deux signaux de même nom. |
| 190 | * {{{void addSignal ( const std::string&, unsigned int type );}}} |
| 191 | * Destruction d'un signal, par nom ou diectement par pointeur. |
| 192 | * {{{void removeSignal ( const std::string& );}}} |
| 193 | * {{{void removeSignal ( Losig* );}}} |
| 194 | * Recherche d'un signal, par nom ou par identificateur. Si le signal |
| 195 | n'existe pas, renvoyer {{{NULL}}}. |
| 196 | * {{{Losig* findSignal ( const std::string& );}}} |
| 197 | * {{{Losig* findSignal ( unsigned int id );}}} |
| 198 | * Renvoie un nouvel identificateur de signal. Il doit avoir la garentie |
| 199 | d'être unique. |
| 200 | * {{{unsigned int _newSignalId ();}}} |
| 201 | |
| 202 | |
| 203 | __Fonctions statiques__ : |
| 204 | * Retourne la liste de toutes les {{{Lofig}}} présentent en mémoire. |
| 205 | * {{{static std::list<Lofig*>& getAll ();}}} |
| 206 | * Recherche une {{{Lofig}}} dans la liste générale. |
| 207 | * {{{static Lofig* findFromAll ( const std::string& );}}} |
| 208 | * Désalloue la totalité des {{{Lofig}}}. |
| 209 | * {{{static void destroyAll ();}}} |
| 210 | * Ajoute une {{{Lofig}}} à la liste générale (vérifier l'unicité). |
| 211 | * {{{static void _addToAll ( Lofig* );}}} |
| 212 | * Retire une {{{Lofig}}} de la liste générale (par nom ou directement par |
| 213 | pointeur). |
| 214 | * {{{static void _removeFromAll ( Lofig* );}}} |
| 215 | * {{{static void _removeFromAll ( const std::string& );}}} |
| 216 | |
| 217 | |
| 218 | De plus, le code de deux fonctions membres vous sont fournies pour pouvoir |
| 219 | afficher l'objet dans un flux. Dans {{{Lofig.h}}} : |
| 220 | {{{ |
| 221 | class Lofig { |
| 222 | public: |
| 223 | static std::string modeToString ( unsigned int ); |
| 224 | public: |
| 225 | void xmlDrive ( std::ostream& ); |
| 226 | }; |
| 227 | }}} |
| 228 | |
| 229 | Le code de la fonction utilitaire d'affichage dans un flux : |
| 230 | [attachment:Lofig-Skeleton.cpp] |
| 231 | |
| 232 | |
| 233 | == Destruction de la Base de Données == |
| 234 | |
| 235 | Cette base de donnée est composées d'objets contenant des pointeurs sur |
| 236 | différents autres objets. La destruction de l'un de ces objets doit donc |
| 237 | se faire de façon à préserver la cohérence de la base de données. |
| 238 | |
| 239 | Par exemple, la destruction d'un signal ''devrait'' entrainer son retrait |
| 240 | des différents {{{Locon}}} qui pointent sur lui. De même, la destruction |
| 241 | d'une {{{Lofig}}} devrait entraîner sa suppression de toutes les listes |
| 242 | de modèles. |
| 243 | |
| 244 | Cette gestion est beaucoup trop compliquée à implanter dans le cadre d'un |
| 245 | TME, nous ne le ferons donc pas. |
| 246 | |
| 247 | En revanche, la fonction {{{Lofig:destroyAll}}} détruisant la totalité |
| 248 | de la base de données sera implantée. |
| 249 | |
| 250 | |
| 251 | = Travail à réaliser = |
| 252 | |
| 253 | Implanter la structure de donnée {{{Lofig}}} à partir la spécification |
| 254 | ci-dessus. |
| 255 | |
| 256 | Pour valider votre travail, il vous est demandé de décrire la ''netlist'' |
| 257 | ci dessous, représentant un ''full adder'' (brique de base des additionneurs). |
| 258 | |
| 259 | [[Image(fulladder-1.png)]] |
| 260 | |
| 261 | Un ''full adder'' se décompose en deux ''half adder''. A titre d'exemple, la |
| 262 | construction du ''half adder'' vous est fournie [attachment::Main-Skeleton.cpp]. |
| 263 | La représentation compléte du ''full adder'' sous forme de structure {{{Lofig}}} |
| 264 | est présentée figure 2. |
| 265 | |
| 266 | [[Image(fulladder-2.png)]] |
| 267 | |
| 268 | |
| 269 | [[Image(Library-1.png)]] |
| 270 | |