1 #ifndef TAGPARSER_PROGRESS_FEEDBACK_H 2 #define TAGPARSER_PROGRESS_FEEDBACK_H 6 #include <c++utilities/conversion/types.h> 16 using Callback = std::function<void(ActualProgressFeedback &feedback)>;
21 const std::string &
step()
const;
34 byte m_stepPercentage;
35 byte m_overallPercentage;
38 template <
typename ActualProgressFeedback>
40 : m_callback(callback)
41 , m_percentageOnlyCallback(percentageOnlyCallback)
43 , m_overallPercentage(0)
47 template <
typename ActualProgressFeedback>
49 : m_callback(callback)
50 , m_percentageOnlyCallback(percentageOnlyCallback)
52 , m_overallPercentage(0)
63 return m_stepPercentage;
68 return m_overallPercentage;
71 template <
typename ActualProgressFeedback>
75 m_stepPercentage = stepPercentage;
77 m_callback(*static_cast<ActualProgressFeedback *>(
this));
81 template <
typename ActualProgressFeedback>
85 m_stepPercentage = stepPercentage;
87 m_callback(*static_cast<ActualProgressFeedback *>(
this));
93 m_stepPercentage = stepPercentage;
94 if (m_percentageOnlyCallback) {
95 m_percentageOnlyCallback(*static_cast<ActualProgressFeedback *>(
this));
96 }
else if (m_callback) {
97 m_callback(*static_cast<ActualProgressFeedback *>(
this));
101 template <
typename ActualProgressFeedback>
104 updateStepPercentage(static_cast<byte>(stepPercentage * 100.0));
109 m_overallPercentage = overallPercentage;
110 if (m_percentageOnlyCallback) {
111 m_percentageOnlyCallback(*static_cast<ActualProgressFeedback *>(
this));
112 }
else if (m_callback) {
113 m_callback(*static_cast<ActualProgressFeedback *>(
this));
118 ProgressFeedback(
const Callback &callback,
const Callback &percentageOnlyCallback = Callback());
119 ProgressFeedback(Callback &&callback, Callback &&percentageOnlyCallback = Callback());
122 inline ProgressFeedback::ProgressFeedback(
const Callback &callback,
const Callback &percentageOnlyCallback)
127 inline ProgressFeedback::ProgressFeedback(Callback &&callback, Callback &&percentageOnlyCallback)
128 : BasicProgressFeedback<ProgressFeedback>(callback, percentageOnlyCallback)
144 std::atomic_bool m_aborted;
161 return m_aborted.load();
166 return m_aborted.store(
true);
194 #endif // TAGPARSER_PROGRESS_FEEDBACK_H void updateStepPercentage(byte stepPercentage)
std::function< void(AbortableProgressFeedback &feedback)> Callback
void stopIfAborted() const
BasicProgressFeedback(const Callback &callback, const Callback &percentageOnlyCallback=Callback())
void updateStepPercentageFromFraction(double stepPercentage)
byte stepPercentage() const
byte overallPercentage() const
AbortableProgressFeedback(const Callback &callback, const Callback &percentageOnlyCallback=Callback())
void updateOverallPercentage(byte overallPercentage)
void updateStep(const std::string &step, byte stepPercentage=0)
const std::string & step() const
void nextStepOrStop(const std::string &step, byte stepPercentage=0)