Skip to content

Commit 312c49b

Browse files
authored
Merge pull request #78 from csparker247/77-time-remaining-overflow
Mitigate overflow when calculating ETA
2 parents af7c004 + d11ffd9 commit 312c49b

File tree

4 files changed

+24
-10
lines changed

4 files changed

+24
-10
lines changed

include/indicators/block_progress_bar.hpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,10 @@ class BlockProgressBar {
200200

201201
if (saved_start_time) {
202202
auto eta = std::chrono::nanoseconds(
203-
progress_ > 0 ? static_cast<long long>(elapsed.count() * max_progress / progress_) : 0);
203+
progress_ > 0
204+
? static_cast<long long>(std::ceil(float(elapsed.count()) *
205+
max_progress / progress_))
206+
: 0);
204207
auto remaining = eta > elapsed ? (eta - elapsed) : (elapsed - eta);
205208
details::write_duration(os, remaining);
206209
} else {

include/indicators/progress_bar.hpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -255,9 +255,10 @@ class ProgressBar {
255255

256256
if (saved_start_time) {
257257
auto eta = std::chrono::nanoseconds(
258-
progress_ > 0 ? static_cast<long long>(elapsed_.count() *
259-
max_progress / progress_)
260-
: 0);
258+
progress_ > 0
259+
? static_cast<long long>(std::ceil(float(elapsed_.count()) *
260+
max_progress / progress_))
261+
: 0);
261262
auto remaining = eta > elapsed_ ? (eta - elapsed_) : (elapsed_ - eta);
262263
details::write_duration(os, remaining);
263264
} else {

include/indicators/progress_spinner.hpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,10 @@ class ProgressSpinner {
195195
else
196196
os << " [";
197197
auto eta = std::chrono::nanoseconds(
198-
progress_ > 0 ? static_cast<long long>(elapsed.count() * max_progress / progress_) : 0);
198+
progress_ > 0
199+
? static_cast<long long>(std::ceil(float(elapsed.count()) *
200+
max_progress / progress_))
201+
: 0);
199202
auto remaining = eta > elapsed ? (eta - elapsed) : (elapsed - eta);
200203
details::write_duration(os, remaining);
201204
os << "]";

single_include/indicators/indicators.hpp

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1788,9 +1788,10 @@ class ProgressBar {
17881788

17891789
if (saved_start_time) {
17901790
auto eta = std::chrono::nanoseconds(
1791-
progress_ > 0 ? static_cast<long long>(elapsed_.count() *
1792-
max_progress / progress_)
1793-
: 0);
1791+
progress_ > 0
1792+
? static_cast<long long>(std::ceil(float(elapsed_.count()) *
1793+
max_progress / progress_))
1794+
: 0);
17941795
auto remaining = eta > elapsed_ ? (eta - elapsed_) : (elapsed_ - eta);
17951796
details::write_duration(os, remaining);
17961797
} else {
@@ -2089,7 +2090,10 @@ class BlockProgressBar {
20892090

20902091
if (saved_start_time) {
20912092
auto eta = std::chrono::nanoseconds(
2092-
progress_ > 0 ? static_cast<long long>(elapsed.count() * max_progress / progress_) : 0);
2093+
progress_ > 0
2094+
? static_cast<long long>(std::ceil(float(elapsed.count()) *
2095+
max_progress / progress_))
2096+
: 0);
20932097
auto remaining = eta > elapsed ? (eta - elapsed) : (elapsed - eta);
20942098
details::write_duration(os, remaining);
20952099
} else {
@@ -2796,7 +2800,10 @@ class ProgressSpinner {
27962800
else
27972801
os << " [";
27982802
auto eta = std::chrono::nanoseconds(
2799-
progress_ > 0 ? static_cast<long long>(elapsed.count() * max_progress / progress_) : 0);
2803+
progress_ > 0
2804+
? static_cast<long long>(std::ceil(float(elapsed.count()) *
2805+
max_progress / progress_))
2806+
: 0);
28002807
auto remaining = eta > elapsed ? (eta - elapsed) : (elapsed - eta);
28012808
details::write_duration(os, remaining);
28022809
os << "]";

0 commit comments

Comments
 (0)