GCC Code Coverage Report


Directory: ./
File: src/ProgressTime.cpp
Date: 2024-09-19 16:05:14
Exec Total Coverage
Lines: 101 101 100.0%
Branches: 16 20 80.0%

Line Branch Exec Source
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
13 ///Constructeur par défaut de ProgressTime
14 /** Cette fonction démarre le chronomètre par défaut
15 */
16 1 ProgressTime::ProgressTime(){
17 1 initialisationProgressTime(0, '=', '>', ' ');
18 1 }
19
20 ///Constructeur de ProgressTime
21 /** @param nbSteps : nombre d'étapes total à effectuer pour la barre de chargement
22 * @param chPlein : charactère de remplissage de la barre plein
23 * @param chMiddle : charactère au bout de la ligne de remplissage
24 * @param chEnd : charactère de remplissage de la barre vide
25 * Cette fonction démarre le chronomètre par défaut
26 */
27 2 ProgressTime::ProgressTime(size_t nbSteps, char chPlein, char chMiddle, char chEnd){
28 2 initialisationProgressTime(nbSteps, chPlein, chMiddle, chEnd);
29 2 }
30
31 ///constructeur de copie de ProgressTime
32 /** @param other : ProgressTime à copier
33 */
34 1 ProgressTime::ProgressTime(const ProgressTime & other){
35 1 p_buffer = NULL;
36 1 copyProgressTime(other);
37 1 }
38
39 ///destructeur de ProgressTime
40 8 ProgressTime::~ProgressTime(){
41
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
8 if(p_buffer != NULL){
42
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
8 delete [] p_buffer;
43 }
44 }
45
46 ///fonction qui démarre le chronomètre de la ProgressTime
47 4 void ProgressTime::start(){
48 4 p_startTime = clock();
49 4 p_iCurrent = 0;
50 4 p_oldAvancement = 0;
51 4 p_avancement = 0;
52 4 p_secondesRestantes = 0;
53 4 p_oldTempsRestant = 0;
54 4 }
55
56 ///fonction qui affiche la ProgressTime
57 1001 void ProgressTime::print(){
58 1001 ++p_iCurrent;
59 1001 p_avancement = (p_iCurrent*p_sizeBarr)/p_nbSteps;
60 1001 p_tempsRestant = (clock_t)(((clock() - p_startTime)*((clock_t)(p_nbSteps - p_iCurrent)))/((clock_t)p_iCurrent));
61
4/4
✓ Branch 0 taken 1000 times.
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 998 times.
✓ Branch 3 taken 2 times.
1001 if(p_oldAvancement != p_avancement || p_oldTempsRestant != p_tempsRestant){
62 999 p_pourcent = (p_iCurrent*100)/p_nbSteps;
63 //on efface la ligne de la console où il y a la barre de chargement
64 999 clear();
65 999 cerr << "\r" << p_buffer << "\r\r\r\r";
66 //on affiche la barre de chargement
67 999 feelbuffer(p_avancement);
68 999 p_secondesRestantes = p_tempsRestant/CLOCKS_PER_SEC;
69 999 cerr << "[" << p_buffer << "|" << p_pourcent << "%] " << p_secondesRestantes << "s";
70 //on met old_taille à jour
71 999 p_oldAvancement = p_avancement;
72 999 p_oldTempsRestant = p_tempsRestant;
73 }
74 1001 }
75
76 ///affiche la barre de chargement finie
77 2 void ProgressTime::finish(){
78 2 clear();
79 2 cerr << "\r" << p_buffer << "\r\r\r\r";
80 2 feelbuffer(p_sizeBarr);
81 2 cerr << "[" << p_buffer << "|" << p_pourcent << "%] " << p_secondesRestantes << "s";
82 2 cerr << endl;
83 2 }
84
85 ///fonction qui initialise le nombre d'étapes à faire
86 /** @param nbSteps : nombre d'étapes à faire pour arriver à 100%
87 */
88 1 void ProgressTime::setNbSteps(size_t nbSteps){
89 1 p_nbSteps = nbSteps;
90 1 }
91
92 ///init le caractère de remplissage
93 /** @param chPlein : caractère de remplissage
94 */
95 1 void ProgressTime::setChPlein(char chPlein){
96 1 p_chPlein = chPlein;
97 1 }
98
99 ///init le charactère au bout de la ligne de remplissage
100 /** @param chMiddle : charactère au bout de la ligne de remplissage
101 */
102 1 void ProgressTime::setChMiddle(char chMiddle){
103 1 p_chMiddle = chMiddle;
104 1 }
105
106 ///init le charactère de remplissage de la barre vide
107 /** @param chEnd : charactère de remplissage de la barre vide
108 */
109 1 void ProgressTime::setChEnd(char chEnd){
110 1 p_chEnd = chEnd;
111 1 }
112
113 ///Opérateur = de ProgressTime
114 /** @param other : ProgressTime à copier
115 * @return ProgressTime copié
116 */
117 2 ProgressTime & ProgressTime::operator = (const ProgressTime & other){
118 2 copyProgressTime(other);
119 2 return *this;
120 }
121
122 ///fonction de copie de ProgressTime
123 /** @param other : ProgressTime à copier
124 */
125 3 void ProgressTime::copyProgressTime(const ProgressTime & other){
126
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 1 times.
3 if(p_buffer != NULL){
127
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 delete [] p_buffer;
128 }
129 3 p_buffer = new char[other.p_sizeBarr + 1]; //on pense au caractère \0
130 3 p_startTime = other.p_startTime;
131 3 p_tempsRestant = other.p_tempsRestant;
132 3 p_nbSteps = other.p_nbSteps;
133 3 p_iCurrent = other.p_iCurrent;
134 3 p_avancement = other.p_avancement;
135 3 p_oldAvancement = other.p_oldAvancement;
136 3 p_secondesRestantes = other.p_secondesRestantes;
137 3 p_oldTempsRestant = other.p_oldTempsRestant;
138 3 p_consoleWidth = other.p_consoleWidth;
139 3 p_pourcent = other.p_pourcent;
140 3 p_sizeBarr = other.p_sizeBarr;
141 3 p_chPlein = other.p_chPlein;
142 3 p_chMiddle = other.p_chMiddle;
143 3 p_chEnd = other.p_chEnd;
144
145 3 p_buffer[p_sizeBarr] = '\0';
146 3 }
147
148 ///fonction d'initialisation de ProgressTime
149 /** @param nbSteps : nombre d'étapes à faire pour arriver à 100%
150 * @param chPlein : caractère de remplissage de la barre de chargement
151 * @param chMiddle : caractère entre la partie vide et la partie remplie de la barre de chargement
152 * @param chEnd : caractère de la partie vide de la barre de chargement
153 */
154 3 void ProgressTime::initialisationProgressTime(size_t nbSteps, char chPlein, char chMiddle, char chEnd){
155 3 p_nbSteps = nbSteps;
156 3 p_chPlein = chPlein;
157 3 p_chMiddle = chMiddle;
158 3 p_chEnd = chEnd;
159 3 start();
160 3 p_consoleWidth = getNbColTerminal();
161 3 p_sizeBarr = (3u*p_consoleWidth)/4u; //on prend 3/4 de la taille de la console
162 3 p_buffer = new char[p_sizeBarr + 1u];
163 3 }
164
165 ///affiche la barre de chargement
166 /** @param taille : taille de la barre à afficher
167 */
168 1001 void ProgressTime::feelbuffer(unsigned int taille){
169
1/2
✓ Branch 0 taken 1001 times.
✗ Branch 1 not taken.
1001 if(taille <= p_sizeBarr){
170
2/2
✓ Branch 0 taken 35166 times.
✓ Branch 1 taken 1001 times.
36167 for(unsigned int i(0); i < taille; ++i){
171 35166 p_buffer[i] = p_chPlein;
172 }
173 1001 p_buffer[taille] = p_chMiddle;
174 }
175
2/2
✓ Branch 0 taken 33532 times.
✓ Branch 1 taken 1001 times.
34533 for(unsigned int i(taille + 1); i <= p_sizeBarr; ++i){
176 33532 p_buffer[i] = p_chEnd;
177 }
178 1001 p_buffer[p_sizeBarr] = '\0';
179 1001 }
180
181 ///fonction qui efface la barre de chargement
182 1001 void ProgressTime::clear(){
183
2/2
✓ Branch 0 taken 68698 times.
✓ Branch 1 taken 1001 times.
69699 for(unsigned int i(0); i < p_sizeBarr; ++i){
184 68698 p_buffer[i] = '\r';
185 }
186 1001 p_buffer[p_sizeBarr] = '\0';
187 1001 }
188
189