| | 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 | |