Regina 7.3 Calculation Engine
Public Member Functions | Protected Attributes | List of all members
regina::ProgressTrackerOpen Class Reference

Manages percentage-based progress tracking and cancellation polling for open-ended operations. More...

#include <progress/progresstracker.h>

Inheritance diagram for regina::ProgressTrackerOpen:
regina::ProgressTrackerBase regina::ShortOutput< ProgressTrackerOpen > regina::Output< ProgressTrackerOpen, false >

Public Member Functions

 ProgressTrackerOpen ()
 Creates a new progress tracker. More...
 
bool stepsChanged () const
 Queries whether the number of steps completed has changed since the last call to stepsChanged(). More...
 
unsigned long steps () const
 Returns the number of steps completed throughout the entire operation. More...
 
void newStage (std::string desc)
 Used by the writing thread to indicate that it has moved on to a new stage of processing. More...
 
bool incSteps ()
 Used by the writing thread to indicate that one more step has been completed. More...
 
bool incSteps (unsigned long add)
 Used by the writing thread to indicate that some number of additional steps have been completed. More...
 
void setFinished ()
 Used by the writing thread to indicate that it has finished all processing. More...
 
void writeTextShort (std::ostream &out) const
 Writes a short text representation of this object to the given output stream. More...
 
bool isFinished () const
 Queries whether the writing thread has finished all processing. More...
 
bool descriptionChanged () const
 Queries whether the stage description has changed since the last call to descriptionChanged(). More...
 
std::string description () const
 Returns the human-readable description of the current stage. More...
 
void cancel ()
 Indicates to the writing thread that the user wishes to cancel the operation. More...
 
bool isCancelled () const
 Queries whether the reading thread has made a request for the writing thread to cancel the operation; in other words, whether cancel() has been called. More...
 
void writeTextLong (std::ostream &out) const
 A default implementation for detailed output. More...
 
std::string str () const
 Returns a short text representation of this object. More...
 
std::string utf8 () const
 Returns a short text representation of this object using unicode characters. More...
 
std::string detail () const
 Returns a detailed text representation of this object. More...
 

Protected Attributes

std::string desc_
 The human-readable description of the current stage. More...
 
bool descChanged_
 Has the description changed since the last call to descriptionChanged()? More...
 
bool cancelled_
 Has the reading thread requested that the operation be cancelled? More...
 
bool finished_
 Has the writing thread declared that it has finished all processing? More...
 
std::mutex lock_
 A mutex to stop the reading and writing threads from interfering with each other. More...
 

Detailed Description

Manages percentage-based progress tracking and cancellation polling for open-ended operations.

See the ProgressTrackerBase documentation for detailed information on how to use a progress tracker.

This class represents a progress tracker that measures progress using a non-negative integer, which typically indicates the number of steps completed so far during the operation. This integer begin at 0 and rises as the operation progresses. There is no particular "end point" or upper bound on the number of steps, and indeed the end point is often unknown until the operation has finished.

Constructor & Destructor Documentation

◆ ProgressTrackerOpen()

regina::ProgressTrackerOpen::ProgressTrackerOpen ( )
inline

Creates a new progress tracker.

This sets a sensible state description (which declares that the operation is initialising), and marks the current progress as zero steps completed.

This is typically called by the reading thread.

Member Function Documentation

◆ cancel()

void regina::ProgressTrackerBase::cancel ( )
inlineinherited

Indicates to the writing thread that the user wishes to cancel the operation.

The writing thread might not detect and/or respond to this request immediately (or indeed ever), and so the reading thread should continue to wait until isFinished() returns true before it cleans up and destroys this progress tracker.

This is typically called by the reading thread.

◆ description()

std::string regina::ProgressTrackerBase::description ( ) const
inlineinherited

Returns the human-readable description of the current stage.

This is typically called by the reading thread.

Returns
the current stage description.

◆ descriptionChanged()

bool regina::ProgressTrackerBase::descriptionChanged ( ) const
inlineinherited

Queries whether the stage description has changed since the last call to descriptionChanged().

If this is the first time descriptionChanged() is called, the result will be true.

This is typically called by the reading thread.

Returns
true if and only if the stage description has changed.

◆ detail()

std::string regina::Output< ProgressTrackerOpen , supportsUtf8 >::detail ( ) const
inherited

Returns a detailed text representation of this object.

This text may span many lines, and should provide the user with all the information they could want. It should be human-readable, should not contain extremely long lines (which cause problems for users reading the output in a terminal), and should end with a final newline. There are no restrictions on the underlying character set.

Returns
a detailed text representation of this object.

◆ incSteps() [1/2]

bool regina::ProgressTrackerOpen::incSteps ( )
inline

Used by the writing thread to indicate that one more step has been completed.

This is typically called by the writing thread.

Returns
true if there has been no cancellation request, or false if cancel() has been called (typically by the reading thread).

◆ incSteps() [2/2]

bool regina::ProgressTrackerOpen::incSteps ( unsigned long  add)
inline

Used by the writing thread to indicate that some number of additional steps have been completed.

This is typically called by the writing thread.

Parameters
addthe number of additional steps that have been completed. The value returned by steps() will increase by this amount.
Returns
true if there has been no cancellation request, or false if cancel() has been called (typically by the reading thread).

◆ isCancelled()

bool regina::ProgressTrackerBase::isCancelled ( ) const
inlineinherited

Queries whether the reading thread has made a request for the writing thread to cancel the operation; in other words, whether cancel() has been called.

This is typically called by the writing thread.

Returns
true if and only if a cancellation request has been made.

◆ isFinished()

bool regina::ProgressTrackerBase::isFinished ( ) const
inlineinherited

Queries whether the writing thread has finished all processing.

This will eventually return true regardless of whether the processing finished naturally or was cancelled by the reading thread.

This is typically called by the reading thread.

Returns
true if and only if the writing thread has finished all processing.

◆ newStage()

void regina::ProgressTrackerOpen::newStage ( std::string  desc)
inline

Used by the writing thread to indicate that it has moved on to a new stage of processing.

The number of steps completed will be left unchanged.

This is typically called by the writing thread.

Parameters
desca human-readable description of the new stage. Typically this begins with a capital and does not include a final period (full stop).

◆ setFinished()

void regina::ProgressTrackerOpen::setFinished ( )
inline

Used by the writing thread to indicate that it has finished all processing.

The total number of steps completed will be left unchanged, but the stage description will be updated to indicate that the operation is finished.

This is typically called by the writing thread.

◆ steps()

unsigned long regina::ProgressTrackerOpen::steps ( ) const
inline

Returns the number of steps completed throughout the entire operation.

This counts the progress across all stages (both current and previous).

This is typically called by the reading thread.

Returns
the current number of steps completed.

◆ stepsChanged()

bool regina::ProgressTrackerOpen::stepsChanged ( ) const
inline

Queries whether the number of steps completed has changed since the last call to stepsChanged().

If this is the first time stepsChanged() is called, the result will be true.

This is typically called by the reading thread.

Returns
true if and only if the number of steps completed has changed.

◆ str()

std::string regina::Output< ProgressTrackerOpen , supportsUtf8 >::str ( ) const
inherited

Returns a short text representation of this object.

This text should be human-readable, should use plain ASCII characters where possible, and should not contain any newlines.

Within these limits, this short text ouptut should be as information-rich as possible, since in most cases this forms the basis for the Python __str__() and __repr__() functions.

Python
The Python "stringification" function __str__() will use precisely this function, and for most classes the Python __repr__() function will incorporate this into its output.
Returns
a short text representation of this object.

◆ utf8()

std::string regina::Output< ProgressTrackerOpen , supportsUtf8 >::utf8 ( ) const
inherited

Returns a short text representation of this object using unicode characters.

Like str(), this text should be human-readable, should not contain any newlines, and (within these constraints) should be as information-rich as is reasonable.

Unlike str(), this function may use unicode characters to make the output more pleasant to read. The string that is returned will be encoded in UTF-8.

Returns
a short text representation of this object.

◆ writeTextLong()

void regina::ShortOutput< ProgressTrackerOpen , false >::writeTextLong ( std::ostream &  out) const
inlineinherited

A default implementation for detailed output.

This routine simply calls T::writeTextShort() and appends a final newline.

Python
Not present. Instead you can call detail() from the subclass T, which returns this output as a string.
Parameters
outthe output stream to which to write.

◆ writeTextShort()

void regina::ProgressTrackerOpen::writeTextShort ( std::ostream &  out) const
inline

Writes a short text representation of this object to the given output stream.

Subclasses must not override this routine. They should override writeName() instead.

Python
Not present. Use str() instead.
Parameters
outthe output stream to which to write.

Member Data Documentation

◆ cancelled_

bool regina::ProgressTrackerBase::cancelled_
protectedinherited

Has the reading thread requested that the operation be cancelled?

◆ desc_

std::string regina::ProgressTrackerBase::desc_
protectedinherited

The human-readable description of the current stage.

◆ descChanged_

bool regina::ProgressTrackerBase::descChanged_
protectedinherited

Has the description changed since the last call to descriptionChanged()?

◆ finished_

bool regina::ProgressTrackerBase::finished_
protectedinherited

Has the writing thread declared that it has finished all processing?

◆ lock_

std::mutex regina::ProgressTrackerBase::lock_
mutableprotectedinherited

A mutex to stop the reading and writing threads from interfering with each other.


The documentation for this class was generated from the following file:

Copyright © 1999-2023, The Regina development team
This software is released under the GNU General Public License, with some additional permissions; see the source code for details.
For further information, or to submit a bug or other problem, please contact Ben Burton (bab@maths.uq.edu.au).