2023-10-19 23:05:11 +02:00
|
|
|
#ifndef TP5_PROJET_HPP
|
|
|
|
#define TP5_PROJET_HPP 1
|
|
|
|
|
2023-10-27 21:51:27 +02:00
|
|
|
#include "Tache.hpp"
|
2023-10-27 18:01:17 +02:00
|
|
|
|
2023-10-27 21:40:27 +02:00
|
|
|
#include <algorithm>
|
|
|
|
|
2023-10-28 02:09:10 +02:00
|
|
|
struct RunProjet;
|
|
|
|
|
2023-10-27 20:29:48 +02:00
|
|
|
class Projet {
|
2023-10-24 16:47:59 +02:00
|
|
|
|
2023-10-27 21:51:27 +02:00
|
|
|
friend std::ostream &operator<<(std::ostream &, const Projet &);
|
2023-10-28 02:09:10 +02:00
|
|
|
friend RunProjet;
|
2023-10-27 21:51:27 +02:00
|
|
|
|
2023-10-27 23:27:41 +02:00
|
|
|
// Auxilliaire pour simplifier les copies
|
|
|
|
void _copy(const Projet &);
|
|
|
|
|
|
|
|
// Auxiliiaire pour simplifier la libération de mémoire des tâches
|
2023-10-28 02:09:10 +02:00
|
|
|
void free_taches();
|
|
|
|
|
|
|
|
// Remet tous les marquages à leur valeur initiale
|
|
|
|
virtual void cleanMarks() const = 0;
|
2023-10-27 23:27:41 +02:00
|
|
|
|
2023-10-27 21:51:27 +02:00
|
|
|
protected:
|
2023-10-27 21:40:27 +02:00
|
|
|
Tache
|
|
|
|
// Première tâche qui sera exécutée
|
2023-10-27 23:27:41 +02:00
|
|
|
*debut,
|
2023-10-27 20:29:48 +02:00
|
|
|
|
2023-10-27 21:40:27 +02:00
|
|
|
// Source du graphe aka la dernière à être exécutée
|
2023-10-27 23:27:41 +02:00
|
|
|
*fin;
|
2023-10-19 23:05:11 +02:00
|
|
|
|
2023-10-27 18:01:17 +02:00
|
|
|
Projet(); // constructor
|
2023-10-19 23:05:11 +02:00
|
|
|
virtual ~Projet(); // destructor
|
|
|
|
|
|
|
|
Projet(const Projet &); // copy constructor
|
|
|
|
const Projet &operator=(const Projet &); // copy assignement
|
2023-10-24 16:47:59 +02:00
|
|
|
|
2023-10-27 21:40:27 +02:00
|
|
|
// Graphe acyclique
|
|
|
|
std::vector<Tache *> taches;
|
|
|
|
|
2023-10-28 02:59:00 +02:00
|
|
|
// Auxiliaire pour simplifier l'affichage d'un projet
|
|
|
|
std::ostream &print(std::ostream &) const;
|
|
|
|
|
2023-10-24 16:47:59 +02:00
|
|
|
// Retourne une paire d'indentifiants de tâches au hasard
|
2023-10-27 20:29:48 +02:00
|
|
|
const std::pair<const int, const int> pick_two_random_tasks() const;
|
2023-10-24 16:47:59 +02:00
|
|
|
|
|
|
|
// Indique pour une tâche si elle fait partie du projet
|
2023-10-27 23:27:41 +02:00
|
|
|
Tache *contains(const int id) const;
|
|
|
|
Tache *contains(const std::string name) const;
|
2023-10-24 16:47:59 +02:00
|
|
|
|
2023-10-26 19:08:00 +02:00
|
|
|
// Corrige les éventuelles anomalies du vector de tâches
|
2023-10-28 01:34:58 +02:00
|
|
|
void topologicalSort();
|
2023-10-28 04:06:37 +02:00
|
|
|
|
|
|
|
public:
|
|
|
|
// Donne une version du vecteur de tâches non modifiable
|
|
|
|
const std::vector<const Tache *> consult_tasks() const;
|
2023-10-19 23:05:11 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|