Updated test example

This commit is contained in:
Pranav Srinivas KumaR
2019-12-03 21:55:38 -06:00
parent 781a8364e4
commit 1f0ce6288d
2 changed files with 34 additions and 7 deletions

View File

@@ -45,6 +45,13 @@ public:
_end = end;
}
void append_text(const std::string& text) {
std::unique_lock<std::mutex> lock{_mutex};
_text_after = text;
if (_text_after.length() > _max_text_after_length)
_max_text_after_length = _text_after.length();
}
void show_percentage(bool flag) { _show_percentage = flag; }
void set_progress(float value) {
@@ -78,11 +85,14 @@ public:
private:
float _progress{0.0};
size_t _bar_width{100};
std::string _text_before{""};
std::string _start{"["};
std::string _fill{"="};
std::string _lead{">"};
std::string _remainder{" "};
std::string _end{"]"};
std::string _text_after{""};
std::atomic<size_t> _max_text_after_length{0};
std::atomic<bool> _completed{false};
std::atomic<bool> _show_percentage{true};
std::mutex _mutex;
@@ -128,9 +138,8 @@ private:
}
std::cout << _end;
if (_show_percentage)
std::cout << " " << static_cast<int>(_progress) << "%\r";
else
std::cout << "\r";
std::cout << " " << static_cast<int>(_progress) << "%";
std::cout << " " << _text_after << std::string(_max_text_after_length, ' ') << "\r";
std::cout.flush();
if (_completed)
std::cout << termcolor::reset << std::endl;

View File

@@ -1,4 +1,5 @@
#include <progress/bar.hpp>
#include <vector>
int main() {
@@ -11,7 +12,7 @@ int main() {
bar.lead_progress_with("");
bar.fill_remainder_with("-");
bar.end_with(" ]");
bar.color(ProgressBar::Color::GREEN);
bar.color(ProgressBar::Color::YELLOW);
// As configured, the bar will look like this:
//
@@ -19,12 +20,29 @@ int main() {
//
//
auto job = [&bar]() {
std::atomic<size_t> index{0};
std::vector<std::string> status_text =
{
"Rocket.exe is not responding",
"Finding a replacement engineer",
"Buying more snacks",
"Assimilating the modding community",
"Crossing fingers",
"Porting KSP to a Nokia 3310"
"Flexing struts",
"Releasing space whales",
"Watching paint dry"
};
auto job = [&bar, &index, &status_text]() {
while (true) {
if (bar.completed())
if (bar.completed()) {
break;
}
bar.append_text(status_text[index % status_text.size()]);
bar.tick();
std::this_thread::sleep_for(std::chrono::milliseconds(100));
index += 1;
std::this_thread::sleep_for(std::chrono::milliseconds(2000));
}
};