libzypp  15.28.6
ParserProgress.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
9 
10 #ifndef ZYPP_ParserProgress_H
11 #define ZYPP_ParserProgress_H
12 
13 #include "boost/shared_ptr.hpp"
14 #include "boost/function.hpp"
15 
17 namespace zypp
18 {
19 namespace parser
20 {
21 
23  {
24  public:
25  typedef boost::shared_ptr<ParserProgress> Ptr;
26 
33  ParserProgress( boost::function<void (long int)> fnc, long int total_steps = 100 )
34  : _fnc(fnc), _previous_progress(0), _total_steps(total_steps)
35  {
36 
37  };
38 
40  {};
41 
48  void progress(long int p)
49  {
50  //std::cout << "real " << p << std::endl;
51  if ( _total_steps != 100 )
52  {
53  long int current_done = p;
54  p = (long int)(((double) current_done/(double) _total_steps)*100);
55  }
56 
57  if (_fnc && ( p != _previous_progress ))
58  {
60  _fnc(p);
61  }
62  }
63 
64  void setTotalSteps( long int total_steps )
65  {
66  _total_steps = total_steps;
67  }
68 
72  void finish()
73  {
74  int p = 100;
75  if (_fnc && ( p != _previous_progress ))
76  {
78  _fnc(p);
79  }
80  }
81 
85  void start()
86  {
87  int p = 0;
88  if (_fnc && ( p != _previous_progress ))
89  {
91  _fnc(p);
92  }
93  }
94 
95  private:
96  boost::function<void (long int)> _fnc;
98  long int _total_steps;
99  };
100 
101 } // namespace parser
102 } // namespace zypp
104 #endif // ZYPP_ParserProgress_H
boost::function< void(long int)> _fnc
ParserProgress(boost::function< void(long int)> fnc, long int total_steps=100)
initializes a progress objetc, with a callback functor if you are not reporting percentage, then set the total_steps to the goal, and report using the same unit, then
boost::shared_ptr< ParserProgress > Ptr
void start()
report progress started
void progress(long int p)
report progress, which in most cases executes the functor associated with this progress object to upd...
void setTotalSteps(long int total_steps)
void finish()
report progress finished