From d4c87677b360ddd8839b5a3d8389432432791e02 Mon Sep 17 00:00:00 2001
From: Anthony Noir <anthony.noir@etu.utc.fr>
Date: Fri, 11 Jun 2021 23:03:32 +0200
Subject: [PATCH] =?UTF-8?q?p=C3=A9riodicit=C3=A9=20avec=20modification=20m?=
 =?UTF-8?q?anuelle?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 include/grid.h         | 2 +-
 include/simulation.hpp | 5 +++--
 src/grid.cpp           | 2 +-
 src/interface.cpp      | 4 ++--
 src/simulation.cpp     | 8 +++-----
 5 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/include/grid.h b/include/grid.h
index 7964252..520f544 100644
--- a/include/grid.h
+++ b/include/grid.h
@@ -107,7 +107,7 @@ public:
     Grid& operator=(const Grid& g);
 
     //! \brief Vérifie si deux grilles sont identiques
-    bool operator==(const Grid&);
+    bool operator==(const Grid&) const;
 
     //! \brief Retourne une structure représentant le contenu non-nul de la Grid (les cellules d'état != 0), pour un enregistrement dans un fichier par exemple.
     Structure to_structure() const;
diff --git a/include/simulation.hpp b/include/simulation.hpp
index 1bc710e..2176ca4 100644
--- a/include/simulation.hpp
+++ b/include/simulation.hpp
@@ -18,7 +18,7 @@ class Simulation {
 private:
     bool canRun;
     unsigned int time;
-    unsigned int period;
+    int period;
     Automaton automaton;
     Grid startGrid;
     History hist;
@@ -89,8 +89,9 @@ public:
     //! \brief Donne la période de la simulation
     //!
     //! Si elle n'est pas encore obtenue : vaut 0
+    //! Si elle ne pourra jamais l'être : vaut -1 (s'il y a eu une modification de la grille en cours d'éxécution)
     //! \return période de la simulation
-    unsigned int getPeriod() {return period;}
+    int getPeriod() {return period;}
 
     //! \brief Indique l'étape actuelle de la simulation
     //! \return nombre de pas depuis le début
diff --git a/src/grid.cpp b/src/grid.cpp
index 63111a1..4134229 100644
--- a/src/grid.cpp
+++ b/src/grid.cpp
@@ -44,7 +44,7 @@ Grid& Grid::operator=(const Grid& g){
     return *this;
 }
 
-bool Grid::operator==(const Grid & G) {
+bool Grid::operator==(const Grid & G) const {
     return nb_rows==G.nb_rows && nb_col==G.nb_col && matrix==G.matrix;
 }
 
diff --git a/src/interface.cpp b/src/interface.cpp
index 09e673b..9f61965 100644
--- a/src/interface.cpp
+++ b/src/interface.cpp
@@ -942,7 +942,7 @@ void MainWindow::on_nextButton_clicked()
     simulation.setGrid(ui->grid_view->get_grid());
     simulation.step();
     ui->grid_view->copy_grid(simulation.getGrid());
-    ui->stepsPeriodLabel->setText(QString::number(simulation.getPeriod())+" steps");
+    ui->stepsPeriodLabel->setText(simulation.getPeriod()!=-1?QString::number(simulation.getPeriod())+" steps":"none");
     ui->nbStepsLabel->setText(QString::number(simulation.getTime())+" steps");
     if(simulation.frozen()) {
         ui->simStatusLabel->setText("Status : frozen");
@@ -955,7 +955,7 @@ void MainWindow::on_prevButton_clicked()
         QMessageBox::warning(this, "Unable to step back", "Empty history : unable to step back");
     }
     ui->grid_view->copy_grid(simulation.getGrid());
-    ui->nbStepsLabel->setText(QString::number(simulation.getTime())+" steps");
+    ui->nbStepsLabel->setText(simulation.getPeriod()!=-1?QString::number(simulation.getPeriod())+" steps":"none");
 }
 
 void MainWindow::on_playPauseButton_clicked()
diff --git a/src/simulation.cpp b/src/simulation.cpp
index 04c06be..897827f 100644
--- a/src/simulation.cpp
+++ b/src/simulation.cpp
@@ -34,6 +34,8 @@ void Simulation::setGrid(const Grid & grid) {
         hist = History(hist.get_nbMax());
     } else if((grid.get_col() != automaton.getGrid().get_col())&&(grid.get_rows() != automaton.getGrid().get_rows())) {
         return;
+    } else if(!(automaton.getGrid() == grid)) { //S'il y a modification manuelle de la grille pendant la simulation
+        period = -1;
     }
     automaton.setGrid(grid);
 }
@@ -65,7 +67,6 @@ void Simulation::resize(size_t l,size_t c) {
     hist = History(hist.get_nbMax());
 }
 
-#include <QElapsedTimer>
 void Simulation::step() {
     if(!canRun) {
         return;
@@ -73,13 +74,10 @@ void Simulation::step() {
     ++time;
     hist.pushGrid(automaton.getGrid());
 
-    QElapsedTimer t;
-    t.start();
     automaton.runOnce();
-    qDebug() << t.elapsed();
 
     automaton.getNeighborhoodRule()->update_generation(time);
-    if(!period && startGrid == automaton.getGrid()) {
+    if(period==0 && startGrid == automaton.getGrid()) {
         period = time;
     }
 }
-- 
GitLab