2023-10-19 23:05:11 +02:00
|
|
|
#include "../includes/ProtoProjet.hpp"
|
|
|
|
|
2023-10-27 18:01:17 +02:00
|
|
|
ProtoProjet::ProtoProjet() {}
|
|
|
|
|
2023-10-19 23:05:11 +02:00
|
|
|
ProtoProjet::~ProtoProjet() {}
|
|
|
|
|
2023-10-27 20:29:48 +02:00
|
|
|
ProtoProjet::ProtoProjet(const ProtoProjet &) : Projet() {}
|
2023-10-19 23:05:11 +02:00
|
|
|
|
|
|
|
const ProtoProjet &ProtoProjet::operator=(const ProtoProjet &src) {
|
|
|
|
if (this == &src) {
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
return *this;
|
|
|
|
}
|
2023-10-26 19:08:00 +02:00
|
|
|
|
2023-10-28 00:10:54 +02:00
|
|
|
std::ostream &operator<<(std::ostream &out, const ProtoProjet &data) {
|
|
|
|
for (Tache *t : data.taches) {
|
|
|
|
out << *t << " ";
|
|
|
|
}
|
|
|
|
|
|
|
|
return out;
|
|
|
|
}
|
|
|
|
|
2023-10-27 23:27:41 +02:00
|
|
|
void ProtoProjet::cleanMarks() const {
|
2023-10-27 21:40:27 +02:00
|
|
|
for (auto t : taches) {
|
|
|
|
t->visite = false;
|
|
|
|
}
|
2023-10-27 18:01:17 +02:00
|
|
|
};
|
|
|
|
|
2023-10-27 23:27:41 +02:00
|
|
|
bool ProtoProjet::ajoute(const std::string nom, const int duree) {
|
|
|
|
// Sélection de 2 tâches au hasard
|
|
|
|
auto tasks = pick_two_random_tasks();
|
|
|
|
|
|
|
|
// Ajout des tâches
|
|
|
|
return ajoute(nom, duree, tasks.first, tasks.second);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool ProtoProjet::ajoute(const std::string nom, const int duree, const int id) {
|
|
|
|
// Ajout de la tâche entre l'ID voulu et la tâche finale
|
|
|
|
return ajoute(nom, duree, id, fin->unique_id);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool ProtoProjet::ajoute(const std::string nom, const int duree, const int id1,
|
|
|
|
const int id2) {
|
|
|
|
Tache *tache1 = contains(id1);
|
|
|
|
Tache *tache2 = contains(id2);
|
|
|
|
|
|
|
|
// Vérifie que les tâches avec les id1 et id2 existent bien dans la liste
|
|
|
|
if (!tache1 || !tache2) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Création des dépendances
|
|
|
|
Tache *tache = new Tache(nom, duree);
|
|
|
|
if (!tache1->ajouteDependance(*tache)) {
|
|
|
|
// Problème de dépendance
|
|
|
|
delete tache;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
if (!tache->ajouteDependance(*tache2)) {
|
|
|
|
// Problème de dépendance
|
|
|
|
delete tache;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Mise à jour du vecteur avec tri topologique
|
|
|
|
taches.push_back(tache);
|
|
|
|
taches = topologicalSort();
|
|
|
|
return true;
|
|
|
|
}
|