36 #include <boost/multiprecision/cpp_bin_float.hpp>
38 using boost::multiprecision::cpp_int;
40 const cpp_int FSize::KB = 1024;
41 const cpp_int FSize::MB = FSize::KB * 1024;
42 const cpp_int FSize::GB = FSize::MB * 1024;
43 const cpp_int FSize::TB = FSize::GB * 1024;
44 const cpp_int FSize::PB = FSize::TB * 1024;
45 const cpp_int FSize::EB = FSize::PB * 1024;
46 const cpp_int FSize::ZB = FSize::EB * 1024;
47 const cpp_int FSize::YB = FSize::ZB * 1024;
51 : _size( cpp_int(sizeStr) * factor( unit_r ) )
64 if ( _size > 0 && cpp_int(blocksize_r) > 0) {
65 cpp_int diff = _size % cpp_int(blocksize_r);
68 _size += cpp_int(blocksize_r);
84 cpp_int usize = abs(_size);
111 std::string
FSize::form(
const Unit unit_r,
unsigned fw,
unsigned prec,
const bool showunit )
const
116 case Unit::Y: prec = 3;
break;
117 case Unit::Z: prec = 3;
break;
118 case Unit::E: prec = 3;
break;
119 case Unit::P: prec = 3;
break;
120 case Unit::T: prec = 3;
break;
121 case Unit::G: prec = 2;
break;
122 case Unit::M: prec = 1;
break;
123 case Unit::K: prec = 1;
break;
124 case Unit::B: prec = 0;
break;
126 }
else if ( unit_r == Unit::B )
129 std::ostringstream str;
131 str << std::setprecision(prec) << std::setfill(
' ') << std::setw(fw) << std::fixed;
136 str << (_size + (
factor( unit_r ) / 2))/
factor( unit_r );
139 str << (boost::multiprecision::cpp_bin_float_50)( _size ) /
140 (boost::multiprecision::cpp_bin_float_50)(
factor( unit_r ) );
143 str <<
" " <<
unit( unit_r );
161 std::ostream& operator<<(std::ostream &ostr,
const FSize &fsize)
167 std::ostream& operator<<(std::ostream &ostr,
const FSize::Unit unit)