TPIE

v1.1rc1-6-g0c97303
tpie::progress_indicator_base Class Referenceabstract

The base class for indicating the progress of some task. More...

#include <tpie/progress_indicator_base.h>

Inherited by tpie::pipelining::bits::proxy_progress_indicator, tpie::progress_indicator_null, tpie::progress_indicator_subindicator, and tpie::progress_indicator_terminal.

Public Member Functions

 progress_indicator_base (stream_size_type range)
 Initializes the indicator. More...
 
virtual ~progress_indicator_base ()
 The destructor. Nothing is done. More...
 
void step (stream_size_type step=1)
 Record an increment to the indicator and advance the indicator. More...
 
void raw_step (stream_size_type step)
 
virtual void init (stream_size_type range=0)
 Initialize progress indicator. More...
 
virtual void done ()
 Advance the indicator to the end. More...
 
virtual void set_range (stream_size_type range)
 Set the upper bound of the counting range. More...
 
virtual void refresh ()=0
 Display the indicator. More...
 
stream_size_type get_current ()
 Get the current value of the step counter. More...
 
stream_size_type get_range ()
 Get the maximum value of the current range. More...
 
execution_time_predictorget_time_predictor ()
 
void set_time_predictor (execution_time_predictor *p)
 
std::string estimated_remaining_time ()
 
virtual void push_breadcrumb (const char *, description_importance)
 
virtual void pop_breadcrumb ()
 

Protected Attributes

stream_size_type m_range
 The upper bound of the counting range. More...
 
stream_size_type m_current
 The current progress count [m_minRange...m_maxRange]. More...
 

Detailed Description

The base class for indicating the progress of some task.

At times, especially when processing large data sets, the user might want the program to provide information about how much progress has been made. TPIE provides a class hierarchy with an abstract base class progress_indicator_base for realizing such indicators. TPIE offers terminal-based indicators, such as progress_indicator_arrow that shows an extending arrow or progress_indicator_spin that shows a spinning "wheel". To allow for other types of indicators such as graphics-based indicators for (interfaces to) indicators provided by other APIs, the terminal-based indicators inherit from progress_indicator_terminal which in turn inherits from progress_indicator_base. To include other types of non-terminal-based indicators, the user thus should subclass progress_indicator_base. All indicators are based upon the following concept: The indicator is given a range [minRange , maxRange ] and a parameter stepValue/ For each update to the indicator and starting at minRange , the progress status will be advanced by stepValue units.

Definition at line 63 of file progress_indicator_base.h.

Constructor & Destructor Documentation

tpie::progress_indicator_base::progress_indicator_base ( stream_size_type  range)
inline

Initializes the indicator.

Parameters
rangeThe upper bound of the counting range.

Definition at line 70 of file progress_indicator_base.h.

70  :
71  m_range(range),
72  m_current(0),
73  //m_lastUpdate(getticks()),
74  m_next(0),
75  m_predictor(0) {
76  compute_threshold();
77  }
stream_size_type m_current
The current progress count [m_minRange...m_maxRange].
stream_size_type m_range
The upper bound of the counting range.
virtual tpie::progress_indicator_base::~progress_indicator_base ( )
inlinevirtual

The destructor. Nothing is done.

Definition at line 82 of file progress_indicator_base.h.

82  {
83  // Do nothing.
84  };

Member Function Documentation

stream_size_type tpie::progress_indicator_base::get_current ( )
inline

Get the current value of the step counter.

Definition at line 162 of file progress_indicator_base.h.

References m_current.

Referenced by tpie::pipelining::bits::proxy_progress_indicator::refresh().

162 { return m_current; }
stream_size_type m_current
The current progress count [m_minRange...m_maxRange].
stream_size_type tpie::progress_indicator_base::get_range ( )
inline

Get the maximum value of the current range.

Definition at line 167 of file progress_indicator_base.h.

References m_range.

Referenced by tpie::pipelining::bits::proxy_progress_indicator::refresh().

167 { return m_range; }
stream_size_type m_range
The upper bound of the counting range.
virtual void tpie::progress_indicator_base::init ( stream_size_type  range = 0)
inlinevirtual

Initialize progress indicator.

Parameters
rangeThe number of times step() is going to be called.

Reimplemented in tpie::fractional_subindicator, tpie::progress_indicator_null, and tpie::progress_indicator_subindicator.

Definition at line 124 of file progress_indicator_base.h.

References m_current, refresh(), and set_range().

Referenced by tpie::merge_sorter< T, UseProgress, pred_t >::calc(), tpie::pipelining::passive_reverser< T >::source_t< dest_t >::go(), tpie::pipelining::serialization_bits::sort_calc_t< Traits >::go(), and tpie::parallel_sort().

124  {
125  if (range != 0) set_range(range);
126  m_current = 0;
127  refresh();
128 
129  m_start = getticks();
130  m_next = 1;
131 
132 #ifndef TPIE_NDEBUG
133  m_lastCalled = getticks();
134 #endif
135  }
virtual void refresh()=0
Display the indicator.
stream_size_type m_current
The current progress count [m_minRange...m_maxRange].
virtual void set_range(stream_size_type range)
Set the upper bound of the counting range.
virtual void tpie::progress_indicator_base::refresh ( )
pure virtual
virtual void tpie::progress_indicator_base::set_range ( stream_size_type  range)
inlinevirtual

Set the upper bound of the counting range.

This method also implies a reset of the counter. In order to be able to set the uper bound independent of setting the lower bound, no range checking is done.

Parameters
rangeThe new upper bound.

Reimplemented in tpie::progress_indicator_null.

Definition at line 150 of file progress_indicator_base.h.

References m_range.

Referenced by init().

150  {
151  m_range = range;
152  }
stream_size_type m_range
The upper bound of the counting range.
void tpie::progress_indicator_base::step ( stream_size_type  step = 1)
inline

Record an increment to the indicator and advance the indicator.

Definition at line 89 of file progress_indicator_base.h.

References tpie::log_debug(), m_current, and refresh().

Referenced by tpie::merge_sorter< T, UseProgress, pred_t >::calc(), tpie::pipelining::passive_reverser< T >::source_t< dest_t >::go(), tpie::pipelining::serialization_bits::sort_calc_t< Traits >::go(), tpie::ami::Internal_Sorter_Obj< T, Compare >::sort(), and tpie::pipelining::node::step().

89  {
90  m_current += step;
91 
92 #ifndef TPIE_NDEBUG
93  {
94  ticks currentTicks = getticks();
95  if (elapsed(currentTicks,m_lastCalled) > m_frequency * m_threshold * 5)
96  tpie::log_debug() << "Step was not called for an estimated "
97  << (elapsed(currentTicks,m_lastCalled) / (m_frequency * m_threshold))
98  << " seconds" << std::endl;;
99  m_lastCalled = currentTicks;
100  }
101 #endif
102  if (m_current > m_next) {
103  ticks currentTicks = getticks();
104  m_next = static_cast<stream_size_type>(
105  static_cast<double>(m_current) * (elapsed(currentTicks, m_start) + m_threshold)/
106  elapsed(currentTicks, m_start));
107  if (m_next > m_current *2) m_next=m_current*2; //For bad guestimation in the beginning
108  refresh();
109  }
110  }
virtual void refresh()=0
Display the indicator.
stream_size_type m_current
The current progress count [m_minRange...m_maxRange].
void step(stream_size_type step=1)
Record an increment to the indicator and advance the indicator.
logstream & log_debug()
Return logstream for writing debug log messages.
Definition: tpie_log.h:124

Member Data Documentation

stream_size_type tpie::progress_indicator_base::m_current
protected
stream_size_type tpie::progress_indicator_base::m_range
protected

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