PhoenixMock  1.8.7
Tools to split/merge/print mock used in Phoenix
ProgressTime.cpp
Go to the documentation of this file.
1 /***************************************
2  Auteur : Pierre Aubert
3  Mail : pierre.aubert@lapp.in2p3.fr
4  Licence : CeCILL-C
5 ****************************************/
6 
7 #include "ProgressTime.h"
8 #include "string_utils.h"
9 #include "string_color.h"
10 
11 using namespace std;
12 
14 
17  initialisationProgressTime(0, '=', '>', ' ');
18 }
19 
21 
27 ProgressTime::ProgressTime(size_t nbSteps, char chPlein, char chMiddle, char chEnd){
28  initialisationProgressTime(nbSteps, chPlein, chMiddle, chEnd);
29 }
30 
32 
35  p_buffer = NULL;
36  copyProgressTime(other);
37 }
38 
41  if(p_buffer != NULL){
42  delete [] p_buffer;
43  }
44 }
45 
48  p_startTime = clock();
49  p_iCurrent = 0;
50  p_oldAvancement = 0;
51  p_avancement = 0;
52  p_secondesRestantes = 0;
53  p_oldTempsRestant = 0;
54 }
55 
58  ++p_iCurrent;
59  p_avancement = (p_iCurrent*p_sizeBarr)/p_nbSteps;
60  p_tempsRestant = (clock_t)(((clock() - p_startTime)*((clock_t)(p_nbSteps - p_iCurrent)))/((clock_t)p_iCurrent));
61  if(p_oldAvancement != p_avancement || p_oldTempsRestant != p_tempsRestant){
62  p_pourcent = (p_iCurrent*100)/p_nbSteps;
63  //on efface la ligne de la console où il y a la barre de chargement
64  clear();
65  cerr << "\r" << p_buffer << "\r\r\r\r";
66  //on affiche la barre de chargement
67  feelbuffer(p_avancement);
68  p_secondesRestantes = p_tempsRestant/CLOCKS_PER_SEC;
69  cerr << "[" << p_buffer << "|" << p_pourcent << "%] " << p_secondesRestantes << "s";
70  //on met old_taille à jour
71  p_oldAvancement = p_avancement;
72  p_oldTempsRestant = p_tempsRestant;
73  }
74 }
75 
78  clear();
79  cerr << "\r" << p_buffer << "\r\r\r\r";
80  feelbuffer(p_sizeBarr);
81  cerr << "[" << p_buffer << "|" << p_pourcent << "%] " << p_secondesRestantes << "s";
82  cerr << endl;
83 }
84 
86 
88 void ProgressTime::setNbSteps(size_t nbSteps){
89  p_nbSteps = nbSteps;
90 }
91 
93 
95 void ProgressTime::setChPlein(char chPlein){
96  p_chPlein = chPlein;
97 }
98 
100 
102 void ProgressTime::setChMiddle(char chMiddle){
103  p_chMiddle = chMiddle;
104 }
105 
107 
109 void ProgressTime::setChEnd(char chEnd){
110  p_chEnd = chEnd;
111 }
112 
114 
118  copyProgressTime(other);
119  return *this;
120 }
121 
123 
126  if(p_buffer != NULL){
127  delete [] p_buffer;
128  }
129  p_buffer = new char[other.p_sizeBarr + 1]; //on pense au caractère \0
130  p_startTime = other.p_startTime;
131  p_tempsRestant = other.p_tempsRestant;
132  p_nbSteps = other.p_nbSteps;
133  p_iCurrent = other.p_iCurrent;
134  p_avancement = other.p_avancement;
135  p_oldAvancement = other.p_oldAvancement;
136  p_secondesRestantes = other.p_secondesRestantes;
137  p_oldTempsRestant = other.p_oldTempsRestant;
138  p_consoleWidth = other.p_consoleWidth;
139  p_pourcent = other.p_pourcent;
140  p_sizeBarr = other.p_sizeBarr;
141  p_chPlein = other.p_chPlein;
142  p_chMiddle = other.p_chMiddle;
143  p_chEnd = other.p_chEnd;
144 
145  p_buffer[p_sizeBarr] = '\0';
146 }
147 
149 
154 void ProgressTime::initialisationProgressTime(size_t nbSteps, char chPlein, char chMiddle, char chEnd){
155  p_nbSteps = nbSteps;
156  p_chPlein = chPlein;
157  p_chMiddle = chMiddle;
158  p_chEnd = chEnd;
159  start();
160  p_consoleWidth = getNbColTerminal();
161  p_sizeBarr = (3u*p_consoleWidth)/4u; //on prend 3/4 de la taille de la console
162  p_buffer = new char[p_sizeBarr + 1u];
163 }
164 
166 
168 void ProgressTime::feelbuffer(unsigned int taille){
169  if(taille <= p_sizeBarr){
170  for(unsigned int i(0); i < taille; ++i){
171  p_buffer[i] = p_chPlein;
172  }
173  p_buffer[taille] = p_chMiddle;
174  }
175  for(unsigned int i(taille + 1); i <= p_sizeBarr; ++i){
176  p_buffer[i] = p_chEnd;
177  }
178  p_buffer[p_sizeBarr] = '\0';
179 }
180 
183  for(unsigned int i(0); i < p_sizeBarr; ++i){
184  p_buffer[i] = '\r';
185  }
186  p_buffer[p_sizeBarr] = '\0';
187 }
188 
getNbColTerminal
short unsigned int getNbColTerminal()
fonction qui renvoie le nombre de colonnes du terminal
Definition: string_color.cpp:206
string_utils.h
ProgressTime::setNbSteps
void setNbSteps(size_t nbSteps)
fonction qui initialise le nombre d'étapes à faire
Definition: ProgressTime.cpp:88
ProgressTime::setChMiddle
void setChMiddle(char chMiddle)
init le charactère au bout de la ligne de remplissage
Definition: ProgressTime.cpp:102
ProgressTime::~ProgressTime
virtual ~ProgressTime()
destructeur de ProgressTime
Definition: ProgressTime.cpp:40
ProgressTime::operator=
ProgressTime & operator=(const ProgressTime &other)
Opérateur = de ProgressTime.
Definition: ProgressTime.cpp:117
ProgressTime::p_tempsRestant
clock_t p_tempsRestant
Definition: ProgressTime.h:45
ProgressTime::setChEnd
void setChEnd(char chEnd)
init le charactère de remplissage de la barre vide
Definition: ProgressTime.cpp:109
ProgressTime::p_avancement
unsigned int p_avancement
Definition: ProgressTime.h:48
ProgressTime::start
void start()
fonction qui démarre le chronomètre de la ProgressTime
Definition: ProgressTime.cpp:47
ProgressTime::p_consoleWidth
unsigned int p_consoleWidth
Definition: ProgressTime.h:52
ProgressTime::initialisationProgressTime
void initialisationProgressTime(size_t nbSteps, char chPlein, char chMiddle, char chEnd)
fonction d'initialisation de ProgressTime
Definition: ProgressTime.cpp:154
ProgressTime::ProgressTime
ProgressTime()
Constructeur par défaut de ProgressTime.
Definition: ProgressTime.cpp:16
ProgressTime::p_startTime
clock_t p_startTime
Definition: ProgressTime.h:44
ProgressTime::p_nbSteps
size_t p_nbSteps
Definition: ProgressTime.h:46
ProgressTime::p_chMiddle
char p_chMiddle
charactère au bout de la ligne de remplissage
Definition: ProgressTime.h:59
ProgressTime::p_chEnd
char p_chEnd
charactère de remplissage de la barre vide
Definition: ProgressTime.h:61
ProgressTime::feelbuffer
void feelbuffer(unsigned int taille)
affiche la barre de chargement
Definition: ProgressTime.cpp:168
ProgressTime.h
ProgressTime::p_chPlein
char p_chPlein
caractère de remplissage
Definition: ProgressTime.h:57
ProgressTime::print
void print()
fonction qui affiche la ProgressTime
Definition: ProgressTime.cpp:57
ProgressTime::clear
void clear()
fonction qui efface la barre de chargement
Definition: ProgressTime.cpp:182
ProgressTime::p_secondesRestantes
unsigned int p_secondesRestantes
Definition: ProgressTime.h:50
ProgressTime::finish
void finish()
affiche la barre de chargement finie
Definition: ProgressTime.cpp:77
ProgressTime::p_pourcent
unsigned int p_pourcent
Definition: ProgressTime.h:53
ProgressTime::copyProgressTime
void copyProgressTime(const ProgressTime &other)
fonction de copie de ProgressTime
Definition: ProgressTime.cpp:125
ProgressTime
classe qui permet de gérer des barres de chargement en console avec l'affichage et le calcul du temps...
Definition: ProgressTime.h:15
ProgressTime::p_oldAvancement
unsigned int p_oldAvancement
Definition: ProgressTime.h:49
ProgressTime::p_sizeBarr
unsigned int p_sizeBarr
Definition: ProgressTime.h:54
ProgressTime::p_iCurrent
size_t p_iCurrent
Definition: ProgressTime.h:47
ProgressTime::p_oldTempsRestant
clock_t p_oldTempsRestant
Definition: ProgressTime.h:51
ProgressTime::setChPlein
void setChPlein(char chPlein)
init le caractère de remplissage
Definition: ProgressTime.cpp:95
string_color.h