GCC Code Coverage Report


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