diff --git a/includes/Projet.hpp b/includes/Projet.hpp index 3925fae..a0ed0c7 100644 --- a/includes/Projet.hpp +++ b/includes/Projet.hpp @@ -48,11 +48,12 @@ protected: Tache *contains(const int id) const; Tache *contains(const std::string name) const; - // Donne une version du vecteur de tâches non modifiable - const std::vector consult_tasks() const; - // Corrige les éventuelles anomalies du vector de tâches void topologicalSort(); + +public: + // Donne une version du vecteur de tâches non modifiable + const std::vector consult_tasks() const; }; #endif diff --git a/includes/RunProjet.hpp b/includes/RunProjet.hpp index 6a3fd3a..1a95153 100644 --- a/includes/RunProjet.hpp +++ b/includes/RunProjet.hpp @@ -3,8 +3,13 @@ #include "ProtoProjet.hpp" -class RunProjet final : private ProtoProjet { +struct Consultant; +struct Expert; + +class RunProjet final : protected ProtoProjet { friend std::ostream &operator<<(std::ostream &, const RunProjet &); + friend Consultant; + friend Expert; public: RunProjet() = delete; // remove default constructor diff --git a/includes/Tache.hpp b/includes/Tache.hpp index e5ef796..b3f5716 100644 --- a/includes/Tache.hpp +++ b/includes/Tache.hpp @@ -12,8 +12,6 @@ class Tache final { enum Etat { EnAttente, Realisee }; friend std::ostream &operator<<(std::ostream &, const Etat &); - // Durée totale pour faire la tâche - int duree_total; // Etat actuelle de la tâche enum Etat etat; // Liste des dépendances @@ -29,6 +27,8 @@ public: const int unique_id; // Nom de la tâche std::string name; + // Durée totale pour faire la tâche + int duree_total; // Vrai si la tâche à été visitée par le parcours en profondeur bool visite; diff --git a/src/Consultant.cpp b/src/Consultant.cpp index 47c02cf..c68f6e8 100644 --- a/src/Consultant.cpp +++ b/src/Consultant.cpp @@ -16,5 +16,10 @@ const Consultant &Consultant::operator=(const Consultant &src) { std::pair, int> Consultant::avis(const RunProjet &projet) { // TODO - return std::make_pair(std::vector(), 0); + int duree_totale = 0; + for (const Tache *it : projet.consult_tasks()) { + duree_totale += it->duree_total; + } + + return std::make_pair(std::vector(), duree_totale); } diff --git a/src/Expert.cpp b/src/Expert.cpp index 41adc9e..968c66b 100644 --- a/src/Expert.cpp +++ b/src/Expert.cpp @@ -16,5 +16,7 @@ const Expert &Expert::operator=(const Expert &src) { std::pair, int> Expert::avis(const RunProjet &projet) { // TODO - return std::make_pair(std::vector(), 0); + const int duree_totale = projet.consult_tasks().front()->dureeParal(); + + return std::make_pair(std::vector(), duree_totale); } diff --git a/src/Tache.cpp b/src/Tache.cpp index 2247858..32badca 100644 --- a/src/Tache.cpp +++ b/src/Tache.cpp @@ -3,8 +3,8 @@ int Tache::counter_id = 0; Tache::Tache(const std::string n, const int duree) - : duree_total(duree), etat(EnAttente), dependances(std::vector()), - unique_id(counter_id++), name(n), visite(false) {} + : etat(EnAttente), dependances(std::vector()), + unique_id(counter_id++), name(n), duree_total(duree), visite(false) {} Tache::~Tache() {} @@ -17,8 +17,8 @@ void Tache::_copy(const Tache &src) { } Tache::Tache(const Tache &src) - : duree_total(src.duree_total), etat(src.etat), unique_id(counter_id++), - name(src.name), visite(src.visite) { + : etat(src.etat), unique_id(counter_id++), name(src.name), + duree_total(src.duree_total), visite(src.visite) { _copy(src); } @@ -26,9 +26,9 @@ const Tache &Tache::operator=(const Tache &src) { if (this == &src) { return *this; } - duree_total = src.duree_total; etat = src.etat; name = src.name; + duree_total = src.duree_total; visite = src.visite; _copy(src); return *this;