libzypp  10.5.0
zypp::ProgressData Class Reference

Maintain [min,max] and counter (value) for progress counting. More...

#include <ProgressData.h>

Inheritance diagram for zypp::ProgressData:

List of all members.

Classes

class  Data

Public Types

typedef long long value_type
typedef function< bool(const
ProgressData &)> 
ReceiverFnc
 Most simple version of progress reporting The percentage in most cases.

Public Member Functions

 ProgressData ()
 Ctor no range [0,0](0).
 ProgressData (value_type max_r)
 Ctor [0,max](0).
 ProgressData (value_type min_r, value_type max_r)
 Ctor [min,max](min).
 ProgressData (value_type min_r, value_type max_r, value_type val_r)
 Ctor [min,max](val).
 ~ProgressData ()
void min (value_type min_r)
 Set new min value.
void max (value_type max_r)
 Set new max value.
void noRange ()
 Set no range [0,0].
void range (value_type max_r)
 Set new [0,max].
void range (value_type min_r, value_type max_r)
 Set new [min,max].
void name (const std::string &name_r)
 Set counter name.
void sendTo (const ReceiverFnc &fnc_r)
 Set ReceiverFnc.
void noSend ()
 Set no ReceiverFnc.
Progress reporting.

These methods may actually cause a progress report to be sent.

All methods return bool, because a progress receiver may return false to indicate the desire to abort the pending action. The incident is logged, but it's finaly up to the caller to honor this.

bool set (value_type val_r)
 Set new counter value.
bool incr (value_type val_r=1)
 Increment counter value (default by 1).
bool decr (value_type val_r=1)
 Decrement counter value (default by 1).
bool toMin ()
 Set counter value to current min value.
bool toMax ()
 Set counter value to current max value (unless no range).
bool tick ()
 Leave counter value unchanged (still alive).
Progress receiving.
value_type min () const
value_type max () const
value_type val () const
bool hasRange () const
bool reportPercent () const
bool reportAlive () const
value_type reportValue () const
const std::string & name () const
const ReceiverFncreceiver () const
bool finalReport () const

Private Types

enum  State { INIT, RUN, END }

Private Member Functions

bool report ()
 Send report if necessary.

Private Attributes

RWCOW_pointer< Data_d
 Pointer to data.

Related Functions

(Note that these are not member functions.)

std::ostream & operator<< (std::ostream &str, const ProgressData &obj)
ProgressData makeProgressData (const InputStream &input_r)

Detailed Description

Maintain [min,max] and counter (value) for progress counting.

This class should provide everything the producer of progress data needs. As a convention, a zero sizes range indicates that you are just able to send 'still alive' triggers.

The counter should be updated in reasonable intervals. Don't mind wheter the counter value actually increased or not. ProgressData will recognize your triggers and knows when to actually send notification to a consumer.

Each ProgressData object provides a unique numeric id and you may assign it a name.

      bool exampleReceiver( ProgressData::value_type v )
      {
        DBG << "got ->" << v << endl;
        return( v <= 100 ); // Abort if ( v > 100 )
      }

      class Example
      {
        public:

          Example( const ProgressData::ReceiverFnc & fnc_r = ProgressData::ReceiverFnc() )
          : _fnc( fnc_r )
          {}

          void SendTo( const ProgressData::ReceiverFnc & fnc_r )
          { _fnc = fnc_r; }

        public:

          void action()
          {
            ProgressData tics( 10 );    // Expect range 0 -> 10
            tics.name( "test ticks" );  // Some arbitrary name
            tics.sendTo( _fnc );        // Send reports to _fnc
            tics.toMin();               // start sending min (0)

            for ( int i = 0; i < 10; ++i )
            {
              if ( ! tics.set( i ) )
                return; // user requested abort
            }

            tics.toMax(); // take care 100% are reported on success
          }

          void action2()
          {
            ProgressData tics;          // Just send 'still alive' messages
            tics.name( "test ticks" );  // Some arbitrary name
            tics.sendTo( _fnc );        // Send reports to _fnc
            tics.toMin();               // start sending min (0)

            for ( int i = 0; i < 10; ++i )
            {
              if ( ! tics.set( i ) )
                return; // user requested abort
            }

            tics.toMax(); //
          }

        private:
          ProgressData::ReceiverFnc _fnc;
      };
   Example t( exampleReceiver );
   DBG << "Reporting %:" << endl;
   t.action();
   DBG << "Reporting 'still alive':" << endl;
   t.action2();
 Reporting %:
 got ->0
 got ->10
 got ->20
 got ->30
 got ->40
 got ->50
 got ->60
 got ->70
 got ->80
 got ->90
 got ->100
 got ->100
 Reporting 'still alive':
 got ->0
 got ->9

The different ammount of triggers is due to different rules for sending percent or 'still alive' messages.

Todo:

Complete the progess sending.

Tell recipient whether percentage or keepalive is sent, the id and name might be helpfull, and maybe tell whether task is abortable or not; i.e extend the ReceiverFnc signature.

Definition at line 135 of file ProgressData.h.


Member Typedef Documentation

typedef long long zypp::ProgressData::value_type

Definition at line 138 of file ProgressData.h.

typedef function<bool( const ProgressData & )> zypp::ProgressData::ReceiverFnc

Most simple version of progress reporting The percentage in most cases.

Sometimes just keepalive. sender ProgressData object who sends the progress info

Definition at line 144 of file ProgressData.h.


Member Enumeration Documentation

enum zypp::ProgressData::State [private]
Enumerator:
INIT 
RUN 
END 

Definition at line 147 of file ProgressData.h.


Constructor & Destructor Documentation

zypp::ProgressData::ProgressData ( ) [inline]

Ctor no range [0,0](0).

Definition at line 176 of file ProgressData.h.

zypp::ProgressData::ProgressData ( value_type  max_r) [inline]

Ctor [0,max](0).

Definition at line 181 of file ProgressData.h.

zypp::ProgressData::ProgressData ( value_type  min_r,
value_type  max_r 
) [inline]

Ctor [min,max](min).

Definition at line 186 of file ProgressData.h.

zypp::ProgressData::ProgressData ( value_type  min_r,
value_type  max_r,
value_type  val_r 
) [inline]

Ctor [min,max](val).

Definition at line 191 of file ProgressData.h.

zypp::ProgressData::~ProgressData ( ) [inline]

Definition at line 195 of file ProgressData.h.


Member Function Documentation

void zypp::ProgressData::min ( value_type  min_r) [inline]

Set new min value.

Definition at line 206 of file ProgressData.h.

void zypp::ProgressData::max ( value_type  max_r) [inline]

Set new max value.

Definition at line 210 of file ProgressData.h.

void zypp::ProgressData::noRange ( ) [inline]

Set no range [0,0].

Definition at line 214 of file ProgressData.h.

void zypp::ProgressData::range ( value_type  max_r) [inline]

Set new [0,max].

Definition at line 218 of file ProgressData.h.

void zypp::ProgressData::range ( value_type  min_r,
value_type  max_r 
) [inline]

Set new [min,max].

Definition at line 222 of file ProgressData.h.

void zypp::ProgressData::name ( const std::string &  name_r) [inline]

Set counter name.

Definition at line 227 of file ProgressData.h.

void zypp::ProgressData::sendTo ( const ReceiverFnc fnc_r) [inline]

Set ReceiverFnc.

Definition at line 231 of file ProgressData.h.

void zypp::ProgressData::noSend ( ) [inline]

Set no ReceiverFnc.

Definition at line 235 of file ProgressData.h.

bool zypp::ProgressData::set ( value_type  val_r) [inline]

Set new counter value.

Definition at line 251 of file ProgressData.h.

bool zypp::ProgressData::incr ( value_type  val_r = 1) [inline]

Increment counter value (default by 1).

Definition at line 258 of file ProgressData.h.

bool zypp::ProgressData::decr ( value_type  val_r = 1) [inline]

Decrement counter value (default by 1).

Definition at line 262 of file ProgressData.h.

bool zypp::ProgressData::toMin ( ) [inline]

Set counter value to current min value.

Definition at line 266 of file ProgressData.h.

bool zypp::ProgressData::toMax ( ) [inline]

Set counter value to current max value (unless no range).

Definition at line 270 of file ProgressData.h.

bool zypp::ProgressData::tick ( ) [inline]

Leave counter value unchanged (still alive).

Definition at line 274 of file ProgressData.h.

value_type zypp::ProgressData::min ( ) const [inline]
Returns:
Current min value.

Definition at line 284 of file ProgressData.h.

value_type zypp::ProgressData::max ( ) const [inline]
Returns:
Current max value.

Definition at line 288 of file ProgressData.h.

value_type zypp::ProgressData::val ( ) const [inline]
Returns:
Current counter value.

Definition at line 292 of file ProgressData.h.

bool zypp::ProgressData::hasRange ( ) const [inline]
Returns:
Wheter [min,max] defines a nonempty range.

Definition at line 296 of file ProgressData.h.

bool zypp::ProgressData::reportPercent ( ) const [inline]
Returns:
Wheter reportValue will return a percent value. Same as hasRange.
See also:
reportAlive

Definition at line 303 of file ProgressData.h.

bool zypp::ProgressData::reportAlive ( ) const [inline]
Returns:
Wheter reportValue always returns -1, because we trigger 'still alive' messages. I.e. hasrange is false.
See also:
reportPercent

Definition at line 310 of file ProgressData.h.

value_type zypp::ProgressData::reportValue ( ) const [inline]
Returns:
Either a a percent value or -1.
See also:
reportPercent and reportAlive.

Definition at line 316 of file ProgressData.h.

const std::string& zypp::ProgressData::name ( ) const [inline]
Returns:
The counters name.

Definition at line 320 of file ProgressData.h.

const ReceiverFnc& zypp::ProgressData::receiver ( ) const [inline]
Returns:
The ReceiverFnc.

Definition at line 324 of file ProgressData.h.

bool zypp::ProgressData::finalReport ( ) const [inline]
Returns:
Retrun true if this the final report sent by the ProgressData dtor.

Definition at line 330 of file ProgressData.h.

bool zypp::ProgressData::report ( ) [private]

Send report if necessary.

Definition at line 33 of file ProgressData.cc.


Friends And Related Function Documentation

std::ostream & operator<< ( std::ostream &  str,
const ProgressData obj 
) [related]

Stream output

Definition at line 107 of file ProgressData.cc.

ProgressData makeProgressData ( const InputStream input_r) [related]

Setup from InputStream.

Definition at line 125 of file ProgressData.cc.


Member Data Documentation

Pointer to data.

Definition at line 340 of file ProgressData.h.


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