This repository has been archived on 2023-10-29. You can view files and clone it, but cannot push or open issues or pull requests.
GestionProjet/includes/Projet.hpp

60 lines
1.5 KiB
C++
Raw Normal View History

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
// Source du graphe aka la dernière à être exécutée
2023-10-28 12:09:52 +02:00
*fin,
// Première tâche qui sera exécutée
*debut;
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