| #ifndef UTIL_ERSATZ_PROGRESS_H |
| #define UTIL_ERSATZ_PROGRESS_H |
|
|
| #include <iostream> |
| #include <string> |
| #include <stdint.h> |
|
|
| |
| |
|
|
| namespace util { |
|
|
| extern const char kProgressBanner[]; |
|
|
| class ErsatzProgress { |
| public: |
| |
| ErsatzProgress(); |
|
|
| |
| explicit ErsatzProgress(uint64_t complete, std::ostream *to = &std::cerr, const std::string &message = ""); |
|
|
| ~ErsatzProgress(); |
|
|
| ErsatzProgress &operator++() { |
| if (++current_ >= next_) Milestone(); |
| return *this; |
| } |
|
|
| ErsatzProgress &operator+=(uint64_t amount) { |
| if ((current_ += amount) >= next_) Milestone(); |
| return *this; |
| } |
|
|
| void Set(uint64_t to) { |
| if ((current_ = to) >= next_) Milestone(); |
| } |
|
|
| void Finished() { |
| Set(complete_); |
| } |
|
|
| private: |
| void Milestone(); |
|
|
| uint64_t current_, next_, complete_; |
| unsigned char stones_written_; |
| std::ostream *out_; |
|
|
| |
| ErsatzProgress(const ErsatzProgress &other); |
| ErsatzProgress &operator=(const ErsatzProgress &other); |
| }; |
|
|
| } |
|
|
| #endif |
|
|