2023-10-19 23:05:11 +02:00
|
|
|
#ifndef TP5_TACHE_HPP
|
|
|
|
#define TP5_TACHE_HPP 1
|
|
|
|
|
|
|
|
#include <iostream>
|
2023-10-26 19:08:00 +02:00
|
|
|
#include <vector>
|
2023-10-19 23:05:11 +02:00
|
|
|
|
2023-10-27 18:52:27 +02:00
|
|
|
class Tache final {
|
2023-10-26 19:08:00 +02:00
|
|
|
// Compteur global pour les IDs
|
|
|
|
static int counter_id;
|
|
|
|
|
|
|
|
// Etat
|
|
|
|
enum Etat { EnAttente, Realisee };
|
|
|
|
friend std::ostream &operator<<(std::ostream &, const Etat &);
|
|
|
|
|
2023-10-28 04:14:51 +02:00
|
|
|
// Nom de la tâche
|
|
|
|
std::string name;
|
|
|
|
// Durée totale pour faire la tâche
|
|
|
|
int duree_total;
|
2023-10-26 19:08:00 +02:00
|
|
|
// Etat actuelle de la tâche
|
|
|
|
enum Etat etat;
|
|
|
|
// Liste des dépendances
|
|
|
|
std::vector<Tache *> dependances;
|
|
|
|
|
2023-10-19 23:05:11 +02:00
|
|
|
friend std::ostream &operator<<(std::ostream &, const Tache &);
|
|
|
|
|
2023-10-26 19:08:00 +02:00
|
|
|
// Auxilliaire pour simplifier les copies
|
|
|
|
void _copy(const Tache &);
|
|
|
|
|
2023-10-19 23:05:11 +02:00
|
|
|
public:
|
2023-10-27 23:27:41 +02:00
|
|
|
// ID unique de la tâche
|
|
|
|
const int unique_id;
|
2023-10-27 21:40:27 +02:00
|
|
|
// Vrai si la tâche à été visitée par le parcours en profondeur
|
|
|
|
bool visite;
|
|
|
|
|
2023-10-27 19:31:44 +02:00
|
|
|
Tache(const std::string, const int); // constructor
|
|
|
|
virtual ~Tache(); // destructor
|
2023-10-19 23:05:11 +02:00
|
|
|
|
|
|
|
Tache(const Tache &); // copy constructor
|
|
|
|
const Tache &operator=(const Tache &); // copy assignement
|
2023-10-26 19:08:00 +02:00
|
|
|
|
|
|
|
// Déclenche la réalisation de la tâche après vérification
|
|
|
|
bool realise();
|
|
|
|
|
|
|
|
// Indique si la tâche courante dépend d'une autre
|
|
|
|
bool depends_from(const Tache &) const;
|
|
|
|
|
|
|
|
// Ajoute une dépendance si possible
|
|
|
|
bool ajouteDependance(Tache &);
|
|
|
|
|
|
|
|
// Calcule la durée totale max de réalisation d'une tâche et des dépendances
|
|
|
|
int dureeParal() const;
|
2023-10-27 21:40:27 +02:00
|
|
|
|
|
|
|
// Parcours en profondeur
|
2023-10-28 01:34:58 +02:00
|
|
|
void PP_postfixe(std::vector<Tache *> &);
|
2023-10-28 04:14:51 +02:00
|
|
|
|
|
|
|
// Récupère la durée totale
|
|
|
|
int get_duree_totale() const;
|
|
|
|
|
|
|
|
// Récupère le nom
|
|
|
|
std::string get_name() const;
|
2023-10-19 23:05:11 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|