56 avgStepDuration_(0.f),
57 previousTimeElapsed_(0.f),
58 description_(iDescription),
59 whitespace_(iConsoleWidth,
' '),
60 consoleWidth_(iConsoleWidth),
63 std::ostringstream stepInfo;
64 stepInfo.copyfmt(std::cout);
65 stepInfo << description_ <<
": 0%; CPU 0s" << whitespace_;
66 std::cout << stepInfo.str().substr(0, consoleWidth_ - 1) << std::flush;
81 if (iProgress >= num::NumTraits<double>::one)
86 std::ostringstream stepInfo;
87 stepInfo.copyfmt(std::cout);
88 stepInfo << description_ <<
": 100%; CPU " << Clock::humanize(clock_.time())
90 std::cout <<
"\r" << stepInfo.str().substr(0, consoleWidth_ - 1) << std::endl;
96 iProgress =
num::clamp(iProgress, num::NumTraits<double>::zero, num::NumTraits<double>::one);
97 const int promille =
static_cast<int>(1000 * iProgress);
99 const Clock::TTime updateRate = 0.025f;
101 if (promille > current_)
103 const Clock::TTime timeElapsed = clock_.time();
104 const Clock::TTime stepDuration = (timeElapsed - previousTimeElapsed_) / (promille - current_);
107 avgStepDuration_ = stepDuration;
111 avgStepDuration_ =
num::lerp(avgStepDuration_, stepDuration, updateRate);
113 const Clock::TTime timeLeft = (1000 - promille) * avgStepDuration_;
115 std::ostringstream stepInfo;
116 stepInfo.copyfmt(std::cout);
117 stepInfo << description_ <<
": " << std::fixed << std::setprecision(1) << (.1 * promille)
118 <<
"%; CPU " << Clock::humanize(timeElapsed)
119 <<
" [-" << Clock::humanize(timeLeft) <<
"]" << whitespace_;
120 std::cout <<
"\r" << stepInfo.str().substr(0, consoleWidth_ - 1) << std::flush;
123 previousTimeElapsed_ = timeElapsed;
const T & clamp(const T &x, const T &min, const T &max)
if x < min return min, else if x > max return max, else return x.