-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathprogress.h
More file actions
93 lines (76 loc) · 2.31 KB
/
progress.h
File metadata and controls
93 lines (76 loc) · 2.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
using namespace std;
#include <iostream>
#include <ctime>
class progressbar {
protected:
time_t starttime;
int estimate_sec;
int full;
int progress;
int lastdraw_progress;
public:
progressbar(void);
~progressbar(void);
progressbar(int totalsteps);
void reset(int totalsteps);
void update(int completedsteps);
void draw(void);
void erase(void);
};
progressbar::progressbar(int totalsteps) {
reset(totalsteps);
}
progressbar::~progressbar() {
erase();
}
void progressbar::reset(int totalsteps) {
starttime = time(NULL);
full = totalsteps;
progress = 0;
lastdraw_progress = 0;
estimate_sec = -1;
this->draw();
}
void progressbar::update(int completedsteps) {
time_t curtime = time(NULL);
progress = completedsteps;
if(progress > full)
progress = full;
if(progress > 0)
estimate_sec = int(curtime - starttime) * ((full-progress) / progress);
//if(int((lastdraw_progress/full)*1000) != int((progress/full)*1000))
this->draw();
}
void progressbar::erase(void) {
cerr<<"\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b";
cerr<<" ";
cerr<<"\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b";
}
void progressbar::draw(void) {
double per = 0.1*int((1.0*progress/full)*1000.0);
int pnum = int(per / 5);
int i;
lastdraw_progress = progress;
cerr<<"\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b";
cerr<<"[";
for(i=0;i<pnum;i++) {
cerr<<"*";
}
for(i=0;i<20-pnum;i++) {
cerr<<".";
}
cerr<<"] "<<progress<<"/"<<full<<" "<<per;
if(int(10*per) % 10 == 0) cerr<<".0";
cerr<<"% ";
if(estimate_sec > 0) {
if(estimate_sec > 7200) {
cerr<<int(estimate_sec/3600)<<"hr.";
} else if(estimate_sec > 120) {
cerr<<int(estimate_sec/60)<<"min.";
} else {
cerr<<int(estimate_sec)<<"sec.";
}
}
cerr<<" ";
cerr.flush();
}