diff --git a/include/progress/spinner.hpp b/include/progress/spinner.hpp new file mode 100644 index 0000000..dad5f2f --- /dev/null +++ b/include/progress/spinner.hpp @@ -0,0 +1,32 @@ +#pragma once +#include +#include +#include +#include +#include +#include + +class ProgressSpinner { + std::string _name{"Running"}; + size_t _bar_width{80}; + std::string _start{"|"}; + std::string _end{"|"}; + std::mutex _mutex; + float _progress{0.0}; + size_t _index{0}; + std::vector _states{"⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"}; //{"-", "\\", "|", "/"}; + +public: + + explicit ProgressSpinner(const std::string& name) : _name(name) {} + + void increment(float value) { + std::unique_lock lock{_mutex}; + std::cout << _name << " ["; + _progress = value / 100.0; + float pos = _progress * static_cast(_bar_width); + std::cout << _states[_index % _states.size()] << "] " << static_cast(value) << "%\r"; + std::cout.flush(); + _index += 1; + } +};