1 /*---------------------------------------------------------------------\
3 | __ __ ____ _____ ____ |
4 | \ \ / /_ _/ ___|_ _|___ \ |
5 | \ V / _` \___ \ | | __) | |
6 | | | (_| |___) || | / __/ |
7 | |_|\__,_|____/ |_| |_____| |
11 \----------------------------------------------------------------------/
15 Author: Michael Andres <ma@suse.de>
16 Maintainer: Michael Andres <ma@suse.de>
26 #include <y2util/stringutil.h>
27 #include <y2util/FSize.h>
31 FSize::FSize( const string &sizeStr, const Unit unit_r )
32 : _size( atoll( sizeStr.c_str() ) * factor( unit_r ) )
36 ///////////////////////////////////////////////////////////////////
39 // METHOD NAME : FSize::fillBlock
40 // METHOD TYPE : FSize &
44 FSize & FSize::fillBlock( FSize blocksize_r )
46 if ( _size && blocksize_r ) {
47 long long diff = _size % blocksize_r;
57 ///////////////////////////////////////////////////////////////////
60 // METHOD NAME : FSize::bestUnit
61 // METHOD TYPE : FSize::Unit
65 FSize::Unit FSize::bestUnit() const
67 long long usize( _size < 0 ? -_size : _size );
79 ///////////////////////////////////////////////////////////////////
82 // METHOD NAME : FSize::form
83 // METHOD TYPE : std::string
87 std::string FSize::form( const Unit unit_r, unsigned fw, unsigned prec, const bool showunit ) const
89 if ( prec == bestPrec ) {
92 case T: prec = 3; break;
93 case G: prec = 2; break;
94 case M: prec = 1; break;
95 case K: prec = 1; break;
96 case B: prec = 0; break;
98 } else if ( unit_r == B )
99 prec = 0; // doesn't make sense for Byte
101 string ret = stringutil::form( "%*.*f", fw, prec, ( double( _size ) / factor( unit_r ) ) );
103 ret = stringutil::form( "%s %s", ret.c_str(), unit( unit_r ) );
109 ///////////////////////////////////////////////////////////////////
112 // METHOD NAME : FSize::asString
113 // METHOD TYPE : std::string
117 std::string FSize::asString() const
122 /******************************************************************
125 ** FUNCTION NAME : operator<<
126 ** FUNCTION TYPE : std::ostream &
130 std::ostream & operator<<( std::ostream & str, const FSize & obj )
132 return str << obj.asString();