nathanaaaa

Untitled

Jan 21st, 2018
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.28 KB | None | 0 0
  1. /**
  2. * @file ConteneurTDE.cpp
  3. * Projet sem04-tp-Cpp1-3
  4. * @author l'équipe pédagogique
  5. * @version 2 26/11/11
  6. * @brief Composant de conteneur d'items de capacité extensible
  7. * Structures de données et algorithmes - DUT1 Paris 5
  8. */
  9.  
  10. #include <iostream>
  11. #include <cassert>
  12. using namespace std;
  13.  
  14. #include "ConteneurTDE.h"
  15.  
  16. /**
  17. * @brief Initialise un conteneur d'items
  18. * Allocation en mémoire dynamique du conteneur d'items
  19. * de capacité (capa) extensible par pas d'extension (p)
  20. * @see detruire, pour sa désallocation en fin d'utilisation
  21. * @param[out] c : le conteneur d'items
  22. * @param [in] capa : capacité du conteneur
  23. * @param [in] p : pas d'extension de capacité
  24. * @pre capa>0 et p>0
  25. */
  26. void initialiser(ConteneurTDE& c, unsigned int capa, unsigned int p) {
  27.     assert((capa>0) && (p>0));
  28.     c.capacite = capa;
  29.     c.pasExtension = p;
  30.     // arrêt du programme en cas d'erreur d'allocation
  31.     c.tab = new MessageEnCours[capa];
  32.     /* Affichage pour une trace de l'allocation en TP
  33.     * Affichage à supprimer après le test du conteneur */
  34.     //cout << "Allocation initiale de " << capa*sizeof(Item) << " octets ("
  35.     //   << capa << " item(s))" << endl;
  36. }
  37.  
  38. /**
  39. * @brief Désalloue un conteneur d'items en mémoire dynamique
  40. * @see initialiser, le conteneur d'items a déjà été alloué
  41. * @param[in,out] c : le conteneur d'items
  42. */
  43. void detruire(ConteneurTDE& c) {
  44.     delete[] c.tab;
  45.     c.tab = NULL;
  46. }
  47.  
  48. /**
  49. * @brief Lecture d'un item d'un conteneur d'items
  50. * @param[in] c : le conteneur d'items
  51. * @param[in] i : la position de l'item dans le conteneur
  52. * @return l'item à la position i
  53. * @pre i < c.capacite
  54. */
  55. MessageEnCours lire(const ConteneurTDE& c, unsigned int i) {
  56.     assert(i < c.capacite);
  57.     return c.tab[i];
  58. }
  59.  
  60. /**
  61. * @brief Ecrire un item dans un conteneur d'items
  62. * @param[in,out] c : le conteneur d'items
  63. * @param[in] i : la position où ajouter/modifier l'item
  64. * @param[in] it : l'item à écrire
  65. */
  66. void ecrire(ConteneurTDE& c, unsigned int i, const MessageEnCours& it) {
  67.     if (i >= c.capacite) {
  68.         /* Stratégie de réallocation proportionnelle au pas d'extension :
  69.         * initialisez la nouvelle taille du conteneur (newTaille)
  70.         * à i * c.pasExtension */
  71.         unsigned int newTaille = (i + 1) * c.pasExtension;
  72.         /* Allouez en mémoire dynamique un nouveau tableau (newT)
  73.         * à cette nouvelle taille*/
  74.         MessageEnCours* newT = new MessageEnCours[newTaille];
  75.         /* Recopiez les items déjà stockés dans le conteneur */
  76.         for (unsigned int i = 0; i < c.capacite; ++i)
  77.             newT[i] = c.tab[i];
  78.         /* Désallouez l'ancien tableau support du conteneur */
  79.         delete[] c.tab;
  80.         /* Actualiser la mise à jour du conteneur en mémoire dynamique
  81.         * Faites pointer le tableau support du conteneur
  82.         * sur le nouveau tableau en mémoire dynamique */
  83.         c.tab = newT;
  84.         /* Actualisez la taille du conteneur */
  85.         c.capacite = newTaille;
  86.         /* Affichage pour une trace de l'allocation en TP
  87.         * En TP, pour tracer l'extension de l'allocation en mémoire,
  88.         * affichez les informations qui suivent.
  89.         * Cet affichage sera supprimé après le test du conteneur */
  90.         //cout << "Extension - Allocaton/Réallocation de " << newTaille*sizeof(Item)
  91.         // << " octets (" << newTaille << " items)." << endl;
  92.     }
  93.     /* Ecriture de l'item (it) à la position i dans le conteneur */
  94.     c.tab[i] = it;
  95. }
Add Comment
Please, Sign In to add comment