libzypp  17.30.0
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
boost::shared_ptr< ParserProgress > Ptr
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,...
void setTotalSteps(long int total_steps)
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 finish()
report progress finished
Easy-to use interface to the ZYPP dependency resolver.
Definition: CodePitfalls.doc:2