blob: f884d62feaf35059242c5bdd1568923fa8288c2b [file] [log] [blame]
Patrick Venturecf9b2192019-06-27 12:09:52 -07001#pragma once
2
3#include <cstdint>
4
5namespace host_tool
6{
7
8class ProgressInterface
9{
10 public:
11 virtual ~ProgressInterface() = default;
12
13 /** Update the progress by X bytes. This will inform any listening
14 * interfaces (just write to stdout mostly), and tick off as time passed.
15 */
16 virtual void updateProgress(std::int64_t bytes) = 0;
17 virtual void start(std::int64_t bytes) = 0;
18};
19
20/**
21 * @brief A progress indicator that writes to stdout. It deliberately
22 * overwrites the same line when it's used, so it's advised to not interject
23 * other non-error messages.
24 */
25class ProgressStdoutIndicator : public ProgressInterface
26{
27 public:
28 ProgressStdoutIndicator() = default;
29
30 void updateProgress(std::int64_t bytes) override;
31 void start(std::int64_t bytes) override;
32
33 private:
34 std::int64_t totalBytes = 0;
35 std::int64_t currentBytes = 0;
36};
37
38} // namespace host_tool