summaryrefslogtreecommitdiff
path: root/vecteur.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'vecteur.cpp')
-rw-r--r--vecteur.cpp70
1 files changed, 70 insertions, 0 deletions
diff --git a/vecteur.cpp b/vecteur.cpp
new file mode 100644
index 0000000..d9a560c
--- /dev/null
+++ b/vecteur.cpp
@@ -0,0 +1,70 @@
+#include "vecteur.h"
+
+Vecteur::Vecteur(){
+ capacite = 1;
+ taille = 0;
+ formes = new Forme*[capacite];
+}
+
+Vecteur::~Vecteur(){
+ vider();
+ delete[] formes;
+}
+
+bool Vecteur::estVide(){
+ return (taille == 0);
+};
+
+Forme *Vecteur::getForme(int index){
+ return (index < 0 || index >= taille) ? NULL : formes[index];
+};
+
+int Vecteur::getTaille(){
+ return taille;
+};
+
+void Vecteur::afficher(ostream &s){
+ for (int i = 0; i < taille; i++) {
+ formes[i]->afficher(s);
+ }
+};
+
+bool Vecteur::ajouterForme(Forme *f) {
+ if (taille == capacite) {
+ // Double the size of the array
+ int newCapacite = capacite * 2;
+ Forme **newFormes = new (nothrow) Forme*[newCapacite];
+ if(newFormes==nullptr) return false;
+ for (int i = 0; i < taille; i++) {
+ newFormes[i] = formes[i];
+ }
+ capacite = newCapacite;
+ delete[] formes;
+ formes = newFormes;
+ }
+ formes[taille] = f;
+ taille++;
+ return true;
+};
+
+Forme *Vecteur::supprimerForme(int index) {
+ Forme *f = formes[index];
+ while (index < taille) {
+ formes[index] = formes[index + 1];
+ index++;
+ }
+ formes[taille] = NULL;
+ taille--;
+ return f;
+};
+
+void Vecteur::vider() {
+ for (int i = 0; i < taille; i++) {
+ delete formes[i];
+ }
+ capacite = 1;
+ taille = 0;
+ Forme **newFormes = new Forme*[capacite];
+ delete[] formes;
+ formes = newFormes;
+}