history.hpp 2.14 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
\file history.h
\date 24/04/2021
\author Merwane Bouri
\version 1
\brief History

Cette classe représente un historique de Grids.

        **/

#ifndef HISTORY_H
#define HISTORY_H

15
#include "grid.hpp"
Merwane Bouri's avatar
Merwane Bouri committed
16
#include <string>
17
#include <deque>
Merwane Bouri's avatar
Merwane Bouri committed
18
#include <exception>
19
20

//! \brief Exception lancée lors d'une erreur de manipulation de l'historique.
Merwane Bouri's avatar
Merwane Bouri committed
21
22
23
24
25
class HistoryException : public std::exception
{
    std::string _msg;
public:
    HistoryException(const std::string& msg) : _msg(msg){}
26

Merwane Bouri's avatar
Merwane Bouri committed
27
28
29
30
31
    virtual const char* what() const noexcept override
    {
        return _msg.c_str();
    }
};
Merwane Bouri's avatar
Merwane Bouri committed
32
33
34
35
36
37
38
39

/**
\struct History
\brief Représente l'historique des grilles.

Cette structure représente l'historique des grilles.
**/

40
41
42
43
class History{
    unsigned int nbMax;
    std::deque<Grid> tab;
public:
Merwane Bouri's avatar
Merwane Bouri committed
44
    //! \brief Constructeur par défaut, génère un historique capable de stocker un nombre max de grilles.
45
46
    History(unsigned int nbM);

Merwane Bouri's avatar
Merwane Bouri committed
47
48
    //! \brief Accesseur sur le nombre max
    //! \return Retourne le nombre de lignes de la Grille
49
50
    unsigned int get_nbMax()const{return nbMax;}

51
52
53
54
55
56
57
58
59
60
61
62
    //! \brief Retourne le nombre de grilles contenues dans l'historique.
    unsigned int size() const
    { return tab.size(); }

    //! \brief Accède à la grille d'indice i.
    Grid at(unsigned int i) const
    {
        if (i >= size())
            throw HistoryException("The stack is empty.");
        return tab[i];
    }

Merwane Bouri's avatar
Merwane Bouri committed
63
    //! \brief Ajoute une grille dans l'historique
64
    void pushGrid(const Grid& g);
Merwane Bouri's avatar
Merwane Bouri committed
65
66
67

    //! \brief Fonction qui retire la dernière grille de l'historique, et la renvoie
    //! \return Retourne la dernière grille ajoutée de l'historique
68
    Grid popGrid();
Merwane Bouri's avatar
Merwane Bouri committed
69
70
71

    //! \brief Fonction qui retourne la dernière grille sans la retirer
    //! \return Retourne la dernière grille ajoutée de l'historique
72
73
74
75
    Grid topGrid()
    {
        if(tab.size()>0)
            return tab.back();
76
        throw HistoryException("The stack is empty.");
77
    }
Merwane Bouri's avatar
Merwane Bouri committed
78
79
    //! \brief Fonction qui vérifie si l'historique est vide ou pas
    //! \return Retourne un booléen selon si le prédicat "l'historique est vide"
80
81
82
83
84
85
86
87
    bool isEmpty()
    {
        return tab.empty();
    }

};

#endif // HISTORY_H