#include <xtd/as>
#include <xtd/console>
#include <xtd/iprogress>
#include <xtd/math>
class generic_progress {
public:
generic_progress() = default;
generic_progress(int val, int min = 0, int max = 100, const string& msg = "") : message_(msg) {
minimum(min);
maximum(max);
value(val);
}
int maximum() const noexcept {return maximum_;}
generic_progress& maximum(int maximum) noexcept {
maximum_ = maximum;
return *this;
}
int minimum() const noexcept {return minimum_;}
generic_progress& minimum(int minimum) noexcept {
minimum_ = minimum;
return *this;
}
const string& message() const noexcept {return message_;}
generic_progress& message(const string& message) noexcept {
message_ = message;
return *this;
}
float percent()
const noexcept {
return maximum_ - minimum_ ?
as<float>(value() - minimum()) / (maximum() - minimum()) : 1;}
generic_progress& increment(int increment) noexcept {
value(value() + increment);
return *this;
}
generic_progress& perform_step() noexcept {return increment(step());}
generic_progress& perform_step(const string& message) noexcept {
message_ = message;
return perform_step();
}
int value() const noexcept {return value_;}
generic_progress& value(int value) noexcept {
return *this;
}
int step() const noexcept {return step_;}
generic_progress& step(int step) noexcept {
step_ = step;
return *this;
}
private:
int minimum_ = 0;
int maximum_ = 100;
int step_ = 1;
int value_ = 0;
string message_;
};
class print_generic_progress :
public iprogress<generic_progress> {
public:
print_generic_progress() = default;
void report(const generic_progress& value) noexcept override {
}
};
auto main() -> int {
auto print_progress = print_generic_progress {};
auto progress = generic_progress {0, 0, 5, "Initialized"};
print_progress.report(progress);
print_progress.report(progress.perform_step("Device opened"));
print_progress.report(progress.perform_step("Device updated 1"));
print_progress.report(progress.perform_step("Device updated 2"));
print_progress.report(progress.perform_step("Device updated 3"));
print_progress.report(progress.perform_step("Device closed"));
}
static void write_line()
Writes the current line terminator to the standard output stream using the specified format informati...
Defines a provider for progress updates.
Definition iprogress.hpp:19
static xtd::byte min(xtd::byte a, xtd::byte b) noexcept
Returns the smaller of two 8-bit unsigned integers.
static xtd::byte clamp(xtd::byte value, xtd::byte min, xtd::byte max) noexcept
Returns value clamped to the inclusive range of min and max.
static xtd::byte max(xtd::byte a, xtd::byte b) noexcept
Returns the larger of two 8-bit unsigned integers.
type_t as(any_object &o)
Casts a type into another type.
Definition __as_any_object.hpp:59
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition abstract_object.hpp:8