Skip to content

Latest commit

 

History

History

pw05

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

ASD2022-L5 Buffer circulaire de capacité variable

Le but de ce laboratoire est de mettre en oeuvre un buffer circulaire de capacité variable sous la forme d'une classe générique ArrayDeque

Pour tester cette classe, nous vous fournissons 4 codechecks de difficulté croissante. Notez cependant qu'il s'agit ici d'un seul exercice, le même code final devant être capable de passer les 4 codechecks.

  • Buffer Circulaire (1) spécifie la capacité du buffer à la construction, et il n'est donc pas nécessaire d'avoir codé l'augmentation de capacité pour le passer.
  • Buffer Circulaire (2) reprend le même test mais en stockant des objets de type de la classe C utilisée dans le laboratoire sur l'allocation dynamique de mémoire affiche quels constructeurs, operator= et destructeurs sont appelés. Allocation de la mémoire et construction des éléments sont faites séparément, de même que destruction et libération. Pour rappel,
    • il faut réserver la mémoire nécessaire pour stocker capacité éléments avec operator new
    • quand on écrit dans un emplacement mémoire actuellement non utilisé, il faut construire l'élément avec le new en place.
    • quand on écrit dans un emplacement mémoire actuellement utilisé, il faut affecter avec l'opérateur =.
    • quand on n'utilise plus un emplacement mémoire, il faut détruire l'élément qui s'y trouvait en appelant explicitement le destructeur, codecheck ne connaissant malheureusement pas std::destroy_at.
    • quand on n'utilise plus de mémoire, il faut la libérer avec operator delete.
  • Buffer Circulaire (3) modifie le test en commençant avec un buffer de capacité nulle. Ensuite, il utilise la stratégie de doublement si nécessaire vue au cours pour augmenter au fur et à mesure la capacité. Il ajoute également une nouvelle méthode: shrink_to_fit, qui doit se comporter comme celle de std::vector.
  • Buffer Circulaire (4) reprend tout d'abord le même test mais en stockant des objets qui affichent quels constructeurs, operator= et destructeurs sont appelés. Ensuite, il vérifie les garanties offertes par les différentes méthodes et par le constructeur de copie quand la copie de certains éléments lève des exceptions. Toutes les méthodes doivent offrir des garanties fortes et le constructeur de copie la garantie faible.

Le code de ces 4 codechecks est disponible dans le répertoire src. Modifiez uniquement le fichier ArrayDeque.h. La sortie attendue de chacun des ces tests est disponible dans le répertoire txt.

Sauvegardez les fichiers zip générés par codecheck dans le répertoire zips.

Pour vous aider, vous pouvez voir ou revoir les capsules vidéos suivantes, issues du cours d'ASD1 de 2020 :