reseau_cellule_etats.h 2.33 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#pragma once
#include <iostream>
#include <array>

class Cellule{
private:
    unsigned int indEtat;
    unsigned int abs;
    unsigned int ord;
    Cellule();
    //inline Cellule():indEtat(0), abs(0), ord(0){};
    void initCellule(const unsigned int ind, const unsigned int &x, const unsigned int &y);
    friend class Reseau;
};

class Etat{
private:
    unsigned int indice;
    std::string label;
    std::string color;
    inline Etat(unsigned int ind, std::string lab, std::string col):
    indice(ind),label(lab),color(col){}; //constructeur privé (l'utilisateur ne doit pas pouvoir créer un Etat par ce biais)
    friend class EnsembleEtat;

public:
    inline std::string& getLabel(){return label;}
};

class EnsembleEtat{ //singleton qui regroupe l'ensemble des états
private:          //permet d'éviter que chaque cellule inclue une instance d'Etat
    size_t nbEtats = 0;
    static const size_t nbEtatsMax = 10;
    Etat* ensEtats[nbEtatsMax];
    struct Handler {
        EnsembleEtat* instance=nullptr;
        ~Handler() { delete instance; }
    };
    static Handler handler;
    friend struct Handler;
    EnsembleEtat();
    ~EnsembleEtat();
    EnsembleEtat(const EnsembleEtat&) = delete;
    EnsembleEtat operator=(const EnsembleEtat&) = delete;

public:
    void ajouterEtat(unsigned int ind, std::string lab, std::string col);
    void supprimerEtat(const unsigned int ind);
    static EnsembleEtat& getInstance();
    static void libererInstance();
    void initEtat(const Etat* init_etats = nullptr);//initialisation du tableau d'Etats à partir d'un tableau externe
    inline Etat& getEtat(const unsigned int &ind){return *ensEtats[ind];}
};

class Reseau{
private:
    unsigned int hauteur;
    unsigned int largeur;
    Cellule** reseau;

public:
    /* inline Reseau(const unsigned int &h, const unsigned int &l):hauteur(h),largeur(l){
            reseau = new Cellule* [hauteur];
                for(unsigned int i=0; i<hauteur; i++)
                    reseau[i] = new Cellule [largeur];
            for(unsigned int i=0; i<hauteur; i++) //initialisation des cellules dans un second temps car pas possible avec l'allocation dynamique
                for(unsigned int j=0; j<largeur; j++)
                    reseau[i][j].initCellule(0,i,j);
    }*/
    Reseau(const unsigned int &h, const unsigned int &l);
    ~Reseau();
    void affiche();
};