template<std::size_t N>
tk::Progress class

Simple progress class for outputing progress indicators during a task

This is a helper class to abstract away the details of using tk::Print::progress() used to output progress reports to the screen during a task consisting of multiple sub-tasks happening at the same time. The template argument is a compile-time integer which is the number of independent sub-tasks the progress indicator receives messages for and counts them independtly toward multiple maxima.

Constructors, destructors, conversion operators

Progress(const tk::Print& print, bool feedback, std::array<std::string, N>&& prefix, std::array<std::string, N>&& legend, std::array<int, N>&& max = std::array<int, N>()) explicit

Public functions

void start(const std::string& msg)
void start(const std::string& msg, std::array<int, N>&& max)
Start counting sub-tasks outputing an intial task message and set max number of items to be expected per sub-task.
template<std::size_t i>
void inc()
void end()

Function documentation

template<std::size_t N>
tk::Progress<N>::Progress(const tk::Print& print, bool feedback, std::array<std::string, N>&& prefix, std::array<std::string, N>&& legend, std::array<int, N>&& max = std::array<int, N>()) explicit

Parameters
print in Pretty printer object to use for printing progress
feedback in Whether to send sub-task feedback to host
prefix in Strings to output prefixing the progress report
legend in Legend for each prefix to output at start
max in Array of integers equaling the max number of items to be expected per sub-task

Constructor

template<std::size_t N>
void tk::Progress<N>::start(const std::string& msg)

Parameters
msg in Message to output to screen. This message should be descriptive of all the sub-tasks we are responsible for. I.e., this is usually a list of multiple sub-tasks happening at the same time. Appending to msg we also output the legend of subtasks in parentheses.

Start counting sub-tasks outputing an intial task message

template<std::size_t N>
void tk::Progress<N>::start(const std::string& msg, std::array<int, N>&& max)

Start counting sub-tasks outputing an intial task message and set max number of items to be expected per sub-task.

Parameters
msg in Message to output to screen. This message should be descriptive of all the sub-tasks we are responsible for. I.e., this is usually a list of multiple sub-tasks happening at the same time.
max in Array of integers equaling the max number of items to be expected per sub-task

This function can be used to do the same as start( msg ) and update/reset the max number of items per sub-task in case they are not all yet available when the constructor is called.

template<std::size_t N> template<std::size_t i>
void tk::Progress<N>::inc()

Receive an update to a sub-task counter and update progress report

The template argument indexes the sub-task. A compile-time assert emits an error in case it is out of bounds.

template<std::size_t N>
void tk::Progress<N>::end()

Finish progress report updating it one last time

When this function is called, all sub-tasks are assumed to be finished, i.e., assumed to have reached their respective maximum values. Thus we update our 'done' array to be equal to 'max' and output the progress report one final time before outputing 'done'. When this function is called it is possible that not all sub-task counters have reached their maximum, which can happen if the final reduction (if exists), signaling the absolute end of a task (consisting of multiple sub-tasks we count counters for), is scheduled before (or is faster) than as the individual sub-task counting messages arrive. Even if that is the case, this call "officially" finishes all sub-tasks, and outputs the progress report using the max values for all sub-tasks to leave a consistent screen output finishing the task.