projet stuff
This commit is contained in:
parent
f098d1977e
commit
3232e8ea7f
5 changed files with 73 additions and 64 deletions
19
TODO.md
19
TODO.md
|
@ -12,22 +12,23 @@ TODO avant rendu :
|
||||||
|
|
||||||
### Projet
|
### Projet
|
||||||
|
|
||||||
- [ ] Se décompose en tâches
|
- [x] Ne dois **pas** être instanciée directement
|
||||||
- [ ] Durée totale dépend du degré de parallélisme que le gestionnaire décide
|
- [x] Se décompose en tâches (vecteur de tâches)
|
||||||
- [ ] Deux natures de projets dépendantent de `Projet`
|
- [x] Durée totale dépend du degré de parallélisme que le gestionnaire décide
|
||||||
|
- [x] Deux natures de projets dépendantent de `Projet`
|
||||||
- En cours d'élaboration (`ProtoProjet`)
|
- En cours d'élaboration (`ProtoProjet`)
|
||||||
- En cours d'exécution (`RunProjet`)
|
- En cours d'exécution (`RunProjet`)
|
||||||
- Peut être vu comme un graphe acyclique (utilisation de `vector`) des tâches
|
- [x] Peut être vu comme un graphe acyclique (utilisation de `vector`) des tâches
|
||||||
- Les sommets sont des tâches
|
- Les sommets sont des tâches
|
||||||
- Une tâche `fin` servira de source au graphe
|
- Une tâche `fin` servira de source au graphe
|
||||||
- Garder un ordre topologique (triée par dépendances)
|
- Garder un ordre topologique (triée par dépendances)
|
||||||
- [ ] Mère des deux classes `ProtoProjet` et `RunProjet`
|
- [x] Mère des deux classes `ProtoProjet` et `RunProjet`
|
||||||
- [ ] Méthodes utiles qu'à ses sous-classes
|
- [x] Méthodes utiles qu'à ses sous-classes
|
||||||
- Méthodes (cf. le PDF du prof)
|
- Méthodes (cf. le PDF du prof)
|
||||||
- [ ] `pick_two_random_tasks()`
|
- [x] `pick_two_random_tasks()`
|
||||||
- [ ] `contains()`
|
- [ ] `contains()`
|
||||||
- [ ] Surcharge : afficher toutes les tâches
|
- [x] Surcharge : afficher toutes les tâches
|
||||||
- [ ] `consult_tasks()`
|
- [ ] `consult_tasks()` <!-- faudrait testé si elles sont vraiment pas modifiable avant de cocher cette case -->
|
||||||
- [ ] `topologicalSort()`
|
- [ ] `topologicalSort()`
|
||||||
|
|
||||||
#### ProtoProjet
|
#### ProtoProjet
|
||||||
|
|
|
@ -3,38 +3,37 @@
|
||||||
|
|
||||||
#include "../includes/Tache.hpp"
|
#include "../includes/Tache.hpp"
|
||||||
|
|
||||||
struct Projet {
|
class Projet {
|
||||||
// Alias parce que le type est long
|
// Graphe acyclique
|
||||||
using VecTaches = std::vector<std::pair<Tache *, bool>>;
|
std::vector<Tache *> taches;
|
||||||
|
|
||||||
private:
|
// Première tâche qui sera exécutée
|
||||||
// Héritage de tache ?
|
const Tache debut;
|
||||||
// Tache fin;
|
|
||||||
VecTaches taches;
|
// Source du graphe aka la dernière à être exécutée
|
||||||
|
const Tache fin;
|
||||||
|
|
||||||
friend std::ostream &operator<<(std::ostream &, const Projet &);
|
friend std::ostream &operator<<(std::ostream &, const Projet &);
|
||||||
|
|
||||||
public:
|
protected:
|
||||||
Projet(); // constructor
|
Projet(); // constructor
|
||||||
Projet(VecTaches); // constructor
|
|
||||||
virtual ~Projet(); // destructor
|
virtual ~Projet(); // destructor
|
||||||
|
|
||||||
Projet(const Projet &); // copy constructor
|
Projet(const Projet &); // copy constructor
|
||||||
const Projet &operator=(const Projet &); // copy assignement
|
const Projet &operator=(const Projet &); // copy assignement
|
||||||
|
|
||||||
VecTaches getTaches() { return taches; }
|
|
||||||
|
|
||||||
// Retourne une paire d'indentifiants de tâches au hasard
|
// Retourne une paire d'indentifiants de tâches au hasard
|
||||||
std::pair<int, int> pick_two_random_tasks();
|
const std::pair<const int, const int> pick_two_random_tasks() const;
|
||||||
|
|
||||||
// Indique pour une tâche si elle fait partie du projet
|
// Indique pour une tâche si elle fait partie du projet
|
||||||
Tache *contains(int id);
|
const Tache *contains(const int) const;
|
||||||
|
const Tache *contains(const std::string) const;
|
||||||
|
|
||||||
// Donne une version du vecteur de tâches non modifiable
|
// Donne une version du vecteur de tâches non modifiable
|
||||||
const VecTaches consult_tasks() const { return taches; };
|
const std::vector<Tache *> consult_tasks() const;
|
||||||
|
|
||||||
// Corrige les éventuelles anomalies du vector de tâches
|
// Corrige les éventuelles anomalies du vector de tâches
|
||||||
const VecTaches topologicalSort();
|
void topologicalSort() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -8,19 +8,17 @@ class ProtoProjet : public Projet {
|
||||||
friend std::ostream &operator<<(std::ostream &, const ProtoProjet &);
|
friend std::ostream &operator<<(std::ostream &, const ProtoProjet &);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ProtoProjet();
|
ProtoProjet(); // constructor
|
||||||
ProtoProjet(VecTaches taches, Tache debut,
|
|
||||||
Tache fin); // constructor
|
|
||||||
virtual ~ProtoProjet(); // destructor
|
virtual ~ProtoProjet(); // destructor
|
||||||
|
|
||||||
ProtoProjet(const ProtoProjet &); // copy constructor
|
ProtoProjet(const ProtoProjet &); // copy constructor
|
||||||
const ProtoProjet &operator=(const ProtoProjet &); // copy assignement
|
const ProtoProjet &operator=(const ProtoProjet &); // copy assignement
|
||||||
|
|
||||||
// Remet tous les marquages à leur valeur initiale
|
// Remet tous les marquages à leur valeur initiale
|
||||||
void cleanMarks();
|
/* void cleanMarks();
|
||||||
|
|
||||||
// Insère une nouvelle tâche en la plaçant entre deux tâches au hasars
|
// Insère une nouvelle tâche en la plaçant entre deux tâches au hasars
|
||||||
bool ajoute(std::string nom, int duree);
|
bool ajoute(std::string nom, int duree); */
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
#include "../includes/Projet.hpp"
|
#include "../includes/Projet.hpp"
|
||||||
|
|
||||||
Projet::Projet() {}
|
Projet::Projet() : debut(Tache("Début", 0)), fin(Tache("Fin", 0)) {
|
||||||
|
fin.depends_from(debut);
|
||||||
Projet::Projet(VecTaches t) : taches(t) {}
|
}
|
||||||
|
|
||||||
Projet::~Projet() {}
|
Projet::~Projet() {}
|
||||||
|
|
||||||
Projet::Projet(const Projet &) {}
|
Projet::Projet(const Projet &src) : debut(src.debut), fin(src.fin) {}
|
||||||
|
|
||||||
const Projet &Projet::operator=(const Projet &src) {
|
const Projet &Projet::operator=(const Projet &src) {
|
||||||
if (this == &src) {
|
if (this == &src) {
|
||||||
|
@ -16,42 +16,59 @@ const Projet &Projet::operator=(const Projet &src) {
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<int, int> Projet::pick_two_random_tasks() {
|
std::ostream &operator<<(std::ostream &out, const Projet &data) {
|
||||||
|
for (Tache *t : data.taches) {
|
||||||
|
out << *t << " ";
|
||||||
|
}
|
||||||
|
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::pair<const int, const int> Projet::pick_two_random_tasks() const {
|
||||||
|
// Choix aléatoire d'une tâche
|
||||||
size_t size = this->taches.size();
|
size_t size = this->taches.size();
|
||||||
size_t rand1 = static_cast<size_t>(rand()) % size;
|
size_t rand1 = static_cast<size_t>(rand()) % size;
|
||||||
size_t rand2 = static_cast<size_t>(rand()) % size;
|
size_t rand2 = static_cast<size_t>(rand()) % size;
|
||||||
if (this->taches[rand1].first->depends_from(*this->taches[rand2].first))
|
|
||||||
pick_two_random_tasks();
|
|
||||||
|
|
||||||
// Heritage de tache ?
|
Tache *tache1 = this->taches[rand1];
|
||||||
int id1 = this->taches[rand1].first->unique_id;
|
Tache *tache2 = this->taches[rand2];
|
||||||
int id2 = this->taches[rand2].first->unique_id;
|
|
||||||
|
// - tache2 ne doit pas dépendre transitivement de tache1
|
||||||
|
// - permet aussi de vérifier si tache1 == tache2
|
||||||
|
if (tache2->depends_from(*tache1)) {
|
||||||
|
return pick_two_random_tasks();
|
||||||
|
}
|
||||||
|
|
||||||
|
int id1 = tache1->unique_id;
|
||||||
|
int id2 = tache2->unique_id;
|
||||||
return std::make_pair(id1, id2);
|
return std::make_pair(id1, id2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Comment acceder à unique_id ici ?
|
const Tache *Projet::contains(const int id) const {
|
||||||
Tache *Projet::contains(int id) {
|
for (Tache *t : this->taches) {
|
||||||
for (auto t : this->taches) {
|
if (id == t->unique_id) {
|
||||||
if (id == t.first->unique_id) {
|
return t;
|
||||||
return t.first;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Comment acceder à taches ici ?
|
const Tache *Projet::contains(const std::string name) const {
|
||||||
std::ostream &operator<<(std::ostream &out, const Projet &data) {
|
for (Tache *t : this->taches) {
|
||||||
for (auto t : data.taches) {
|
if (name == t->name) {
|
||||||
out << t.first << " is " << std::boolalpha << t.second;
|
return t;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return out;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
const Projet::VecTaches Projet::topologicalSort() {
|
const std::vector<Tache *> Projet::consult_tasks() const { return taches; }
|
||||||
|
|
||||||
|
void Projet::topologicalSort() const {
|
||||||
// Recupere le calcul fait par PP_postfixe et construit son tri
|
// Recupere le calcul fait par PP_postfixe et construit son tri
|
||||||
// PP_postfixe(this->taches);
|
// PP_postfixe(this->taches);
|
||||||
|
|
||||||
return VecTaches(); /* TODO */
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,15 +2,9 @@
|
||||||
|
|
||||||
ProtoProjet::ProtoProjet() {}
|
ProtoProjet::ProtoProjet() {}
|
||||||
|
|
||||||
ProtoProjet::ProtoProjet(VecTaches t, Tache debut, Tache fin) : Projet(t) {
|
|
||||||
/* taches.push_back(debut);
|
|
||||||
taches.push_back(fin); */
|
|
||||||
debut.ajouteDependance(fin);
|
|
||||||
}
|
|
||||||
|
|
||||||
ProtoProjet::~ProtoProjet() {}
|
ProtoProjet::~ProtoProjet() {}
|
||||||
|
|
||||||
ProtoProjet::ProtoProjet(const ProtoProjet &) : Projet(VecTaches() /* TODO*/) {}
|
ProtoProjet::ProtoProjet(const ProtoProjet &) : Projet() {}
|
||||||
|
|
||||||
const ProtoProjet &ProtoProjet::operator=(const ProtoProjet &src) {
|
const ProtoProjet &ProtoProjet::operator=(const ProtoProjet &src) {
|
||||||
if (this == &src) {
|
if (this == &src) {
|
||||||
|
@ -20,12 +14,12 @@ const ProtoProjet &ProtoProjet::operator=(const ProtoProjet &src) {
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProtoProjet::cleanMarks(){
|
/* void ProtoProjet::cleanMarks(){
|
||||||
/* for (auto t : this->getTaches()) {
|
for (auto t : this->getTaches()) {
|
||||||
t.second = false;
|
t.second = false;
|
||||||
} */
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
bool ProtoProjet::ajoute(std::string /* nom */, int /* duree */) {
|
bool ProtoProjet::ajoute(std::string nom, int duree) {
|
||||||
return false; /* TODO */
|
return false;
|
||||||
}
|
} */
|
||||||
|
|
Reference in a new issue