libzypp  11.13.5
ByteCount.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
12 #ifndef ZYPP_BYTECOUNT_H
13 #define ZYPP_BYTECOUNT_H
14 
15 #include <iosfwd>
16 
17 #include "zypp/base/Unit.h"
18 
20 namespace zypp
21 {
22 
24  //
25  // CLASS NAME : ByteCount
26  //
30  class ByteCount
31  {
32  friend std::ostream & operator<<( std::ostream & str, const ByteCount & obj );
33 
34  public:
35 
36  typedef base::Unit Unit;
38 
42  static const Unit B;
43 
45  static const Unit K;
46  static const Unit KiB;
48  static const Unit M;
49  static const Unit MiB;
51  static const Unit G;
52  static const Unit GiB;
54  static const Unit T;
55  static const Unit TiB;
56 
58  static const Unit kB;
60  static const Unit MB;
62  static const Unit GB;
64  static const Unit TB;
66 
67  public:
68 
71  : _count( 0 )
72  {}
74  ByteCount( const Unit & unit_r )
75  : _count( unit_r.factor() )
76  {}
78  ByteCount( const SizeType count_r, const Unit & unit_r = B )
79  : _count( count_r * unit_r.factor() )
80  {}
81 
82  public:
83 
85  operator SizeType() const
86  { return _count; }
87 
92  ByteCount & operator+=( const SizeType rhs ) { _count += rhs; return *this; }
93  ByteCount & operator-=( const SizeType rhs ) { _count -= rhs; return *this; }
94  ByteCount & operator*=( const SizeType rhs ) { _count *= rhs; return *this; }
95  ByteCount & operator/=( const SizeType rhs ) { _count /= rhs; return *this; }
96 
97  ByteCount & operator++(/*prefix*/) { _count += 1; return *this; }
98  ByteCount & operator--(/*prefix*/) { _count -= 1; return *this; }
99 
100  ByteCount operator++(int/*postfix*/) { return _count++; }
101  ByteCount operator--(int/*postfix*/) { return _count--; }
103 
107  ByteCount & fillBlock( ByteCount blocksize_r = K );
108 
110  ByteCount fullBlocks( ByteCount blocksize_r = K ) const
111  { return ByteCount(*this).fillBlock( blocksize_r ); }
112 
114  SizeType blocks( ByteCount blocksize_r = K ) const
115  { return fullBlocks( blocksize_r ) / blocksize_r; }
116 
117  public:
118 
120  const Unit & bestUnit() const;
121 
123  const Unit & bestUnit1000() const;
124 
133  std::string asString( unsigned field_width_r = 0,
134  unsigned unit_width_r = 1 ) const
135  { return asString( bestUnit(), field_width_r, unit_width_r ); }
137  std::string asString( unsigned field_width_r,
138  unsigned unit_width_r,
139  unsigned prec_r ) const
140  { return asString( bestUnit(), field_width_r, unit_width_r, prec_r ); }
142  std::string asString( const Unit & unit_r,
143  unsigned field_width_r = 0,
144  unsigned unit_width_r = 1 ) const
145  { return asString( unit_r, field_width_r, unit_width_r, unit_r.prec() ); }
147  std::string asString( const Unit & unit_r,
148  unsigned field_width_r,
149  unsigned unit_width_r,
150  unsigned prec_r ) const
151  { return unit_r.form( _count, field_width_r, unit_width_r, prec_r ); }
153 
154  private:
156  };
158 
160  inline std::ostream & operator<<( std::ostream & str, const ByteCount & obj )
161  { return str << obj.asString(); }
162 
164 } // namespace zypp
166 #endif // ZYPP_BYTECOUNT_H