runproject uwu

This commit is contained in:
Mylloon 2023-10-28 02:09:10 +02:00
parent 8d3b9973a6
commit 7b2726c5d2
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
8 changed files with 31 additions and 19 deletions

View file

@ -51,7 +51,7 @@ TODO avant rendu :
#### RunProjet #### RunProjet
- [ ] Construit uniquement via un `ProtoProjet` - [x] Construit uniquement via un `ProtoProjet`
- [ ] Avance vers sa conclusion en prenant en compte des tâches ponctuelles <!-- ?? --> - [ ] Avance vers sa conclusion en prenant en compte des tâches ponctuelles <!-- ?? -->
- [ ] Vide le contenu d'un `ProtoProjet` pour se construire, rendre les tâches "read-only" - [ ] Vide le contenu d'un `ProtoProjet` pour se construire, rendre les tâches "read-only"
- Méthodes (cf. le PDF du prof) - Méthodes (cf. le PDF du prof)

View file

@ -5,15 +5,21 @@
#include <algorithm> #include <algorithm>
struct RunProjet;
class Projet { class Projet {
friend std::ostream &operator<<(std::ostream &, const Projet &); friend std::ostream &operator<<(std::ostream &, const Projet &);
friend RunProjet;
// Auxilliaire pour simplifier les copies // Auxilliaire pour simplifier les copies
void _copy(const Projet &); void _copy(const Projet &);
// Auxiliiaire pour simplifier la libération de mémoire des tâches // Auxiliiaire pour simplifier la libération de mémoire des tâches
void _free(); void free_taches();
// Remet tous les marquages à leur valeur initiale
virtual void cleanMarks() const = 0;
protected: protected:
Tache Tache
@ -44,9 +50,6 @@ protected:
// Corrige les éventuelles anomalies du vector de tâches // Corrige les éventuelles anomalies du vector de tâches
void topologicalSort(); void topologicalSort();
// Remet tous les marquages à leur valeur initiale
virtual void cleanMarks() const = 0;
}; };
#endif #endif

View file

@ -7,6 +7,8 @@ class ProtoProjet : public Projet {
friend std::ostream &operator<<(std::ostream &, const ProtoProjet &); friend std::ostream &operator<<(std::ostream &, const ProtoProjet &);
void cleanMarks() const;
public: public:
ProtoProjet(); // constructor ProtoProjet(); // constructor
virtual ~ProtoProjet(); // destructor virtual ~ProtoProjet(); // destructor
@ -14,8 +16,6 @@ public:
ProtoProjet(const ProtoProjet &); // copy constructor ProtoProjet(const ProtoProjet &); // copy constructor
const ProtoProjet &operator=(const ProtoProjet &); // copy assignement const ProtoProjet &operator=(const ProtoProjet &); // copy assignement
void cleanMarks() const;
// Insère une nouvelle tâche en la plaçant entre deux tâches au hasard // Insère une nouvelle tâche en la plaçant entre deux tâches au hasard
bool ajoute(const std::string nom, const int duree); bool ajoute(const std::string nom, const int duree);

View file

@ -7,7 +7,8 @@ class RunProjet final : public ProtoProjet {
friend std::ostream &operator<<(std::ostream &, const RunProjet &); friend std::ostream &operator<<(std::ostream &, const RunProjet &);
public: public:
RunProjet(); // constructor RunProjet() = delete; // constructor
RunProjet(ProtoProjet &); // constructor
virtual ~RunProjet(); // destructor virtual ~RunProjet(); // destructor
RunProjet(const RunProjet &); // copy constructor RunProjet(const RunProjet &); // copy constructor

View file

@ -7,21 +7,21 @@ Projet::Projet() : debut(new Tache("Début", 0)), fin(new Tache("Fin", 0)) {
taches.push_back(debut); taches.push_back(debut);
} }
Projet::~Projet() { _free(); } Projet::~Projet() { free_taches(); }
void Projet::_copy(const Projet &src) { void Projet::_copy(const Projet &src) {
// Copie des tâches // Copie des tâches
taches.reserve(src.taches.size()); taches.reserve(src.taches.size());
for (Tache *t : src.taches) { for (Tache *t : src.taches) {
Tache *tache = new Tache(*t); taches.push_back(new Tache(*t));
taches.push_back(tache);
} }
} }
void Projet::_free() { void Projet::free_taches() {
for (Tache *it : taches) { for (Tache *it : taches) {
delete it; delete it;
} }
taches.clear();
} }
Projet::Projet(const Projet &src) : debut(src.debut), fin(src.fin) { Projet::Projet(const Projet &src) : debut(src.debut), fin(src.fin) {
@ -34,7 +34,7 @@ const Projet &Projet::operator=(const Projet &src) {
} }
debut = src.debut; debut = src.debut;
fin = src.fin; fin = src.fin;
_free(); free_taches();
_copy(src); _copy(src);
return *this; return *this;
} }

View file

@ -4,7 +4,7 @@ ProtoProjet::ProtoProjet() {}
ProtoProjet::~ProtoProjet() {} ProtoProjet::~ProtoProjet() {}
ProtoProjet::ProtoProjet(const ProtoProjet &) : Projet() {} ProtoProjet::ProtoProjet(const ProtoProjet &src) : Projet(src) {}
const ProtoProjet &ProtoProjet::operator=(const ProtoProjet &src) { const ProtoProjet &ProtoProjet::operator=(const ProtoProjet &src) {
if (this == &src) { if (this == &src) {

View file

@ -1,10 +1,10 @@
#include "../includes/RunProjet.hpp" #include "../includes/RunProjet.hpp"
RunProjet::RunProjet() { std::cout << "Hello, runProject!\n"; } RunProjet::RunProjet(ProtoProjet &src) : ProtoProjet(src) { src.free_taches(); }
RunProjet::~RunProjet() {} RunProjet::~RunProjet() {}
RunProjet::RunProjet(const RunProjet &) : ProtoProjet() {} RunProjet::RunProjet(const RunProjet &src) : ProtoProjet(src) {}
const RunProjet &RunProjet::operator=(const RunProjet &src) { const RunProjet &RunProjet::operator=(const RunProjet &src) {
if (this == &src) { if (this == &src) {
@ -13,3 +13,11 @@ const RunProjet &RunProjet::operator=(const RunProjet &src) {
return *this; return *this;
} }
std::ostream &operator<<(std::ostream &out, const RunProjet &data) {
for (Tache *t : data.taches) {
out << *t << "\n";
}
return out;
}

View file

@ -15,11 +15,11 @@ int main() {
cout << pp; cout << pp;
cout << "\n----------" << endl; cout << "\n----------" << endl;
/* RunProjet rp{pp}; RunProjet rp{pp};
cout << "----- verification : ProtoProjet vide " << endl; cout << "----- verification : ProtoProjet vide " << endl;
cout << pp << endl; cout << pp << endl;
Consultant c; /* Consultant c;
cout << c.avis(rp).second << endl; // dira 25 cout << c.avis(rp).second << endl; // dira 25
Expert e; Expert e;