Commit 439b75d0 authored by Victor Blanchet's avatar Victor Blanchet
Browse files

fichiers en têtes et méthode

Please enter the commit message for your changes. Lines starting
send
parent 91703168
#include "reseau_cellule_etats.h"
#include <iostream>
#include <iomanip>
//méthodes de la classe EnsembleEtat
EnsembleEtat::Handler EnsembleEtat::handler;
EnsembleEtat::EnsembleEtat() {
for (size_t i = 0; i < nbEtatsMax; i++) ensEtats[i] = nullptr;
}
EnsembleEtat::~EnsembleEtat() {
for (size_t i = 0; i < nbEtats; i++) delete ensEtats[i];
}
EnsembleEtat& EnsembleEtat::getInstance() {
if (handler.instance == nullptr)
handler.instance = new EnsembleEtat;
return *handler.instance;
}
void EnsembleEtat::libererInstance() {
delete handler.instance;
handler.instance = nullptr;
}
void EnsembleEtat::ajouterEtat(unsigned int ind, std::string lab,std::string col){
handler.instance->ensEtats[nbEtats] = new Etat(ind, lab, col);
nbEtats++;
}
void EnsembleEtat::supprimerEtat(const unsigned int ind){
unsigned int i = 0;
for(i=0; i<nbEtats; i++)
{
if(ensEtats[i]->indice == ind)
{
for(unsigned j = i; j<(nbEtats-1); j++){
ensEtats[j] = ensEtats[j+1];}
//ensEtats[j]->indice--; à voir si l'on veut laisser ou non l'utilisateur gérer les indices
delete ensEtats[nbEtats];
nbEtats--;
}
}
}
void EnsembleEtat::initEtat(const Etat* init_etats){
/*if(ensEtats != nullptr){
delete[] ensEtats;}*/
for(unsigned int i=0; i< (sizeof (init_etats)-1); i++)
ensEtats[i] = new Etat(init_etats[i].indice, init_etats[i].label, init_etats[i].color);
nbEtats = sizeof (init_etats);
}
//méthodes de la classe Etat
//méthodes dela classe Cellule
Cellule::Cellule():indEtat(0), abs(0), ord(0){};
void Cellule::initCellule(const unsigned int ind, const unsigned int &x, const unsigned int &y){
this->indEtat = ind;
this->abs = x;
this->ord = y;
}
//méthodes de la classe Reseau
Reseau::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 car pas possible avec l'allocation dynamique
for(unsigned int j=0; j<largeur; j++)
reseau[i][j].initCellule(1,i,j);}
Reseau::~Reseau(){
for(unsigned int i=0; i<hauteur; i++)
delete[] reseau[i];
delete[] reseau;
}
void Reseau::affiche(){
for(unsigned int i=0; i<hauteur; i++)
{
for(unsigned int j=0; j<largeur; j++){
std::cout<<std::setw(9)<<EnsembleEtat::getInstance().getEtat((reseau[i][j]).indEtat).getLabel();
}
std::cout<<"\n";
}
}
#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();
};
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment