47 boost::ordered_field_operators<FSize>,
49 boost::unit_steppable<FSize>
57 enum class Unit { B, K, M, G, T, P, E, Z, Y };
65 boost::multiprecision::cpp_int _size;
69 static const boost::multiprecision::cpp_int KB;
70 static const boost::multiprecision::cpp_int MB;
71 static const boost::multiprecision::cpp_int GB;
72 static const boost::multiprecision::cpp_int TB;
73 static const boost::multiprecision::cpp_int PB;
74 static const boost::multiprecision::cpp_int EB;
76 static const boost::multiprecision::cpp_int ZB;
77 static const boost::multiprecision::cpp_int YB;
82 static boost::multiprecision::cpp_int
factor(
const Unit unit_r ) {
84 case Unit::Y:
return YB;
85 case Unit::Z:
return ZB;
86 case Unit::E:
return EB;
87 case Unit::P:
return PB;
88 case Unit::T:
return TB;
89 case Unit::G:
return GB;
90 case Unit::M:
return MB;
91 case Unit::K:
return KB;
102 case Unit::Y:
return "YiB";
103 case Unit::Z:
return "ZiB";
104 case Unit::E:
return "EiB";
105 case Unit::P:
return "PiB";
106 case Unit::T:
return "TiB";
107 case Unit::G:
return "GiB";
108 case Unit::M:
return "MiB";
109 case Unit::K:
return "KiB";
121 FSize(
const boost::multiprecision::cpp_int &size_r = 0,
const Unit unit_r = Unit::B)
122 : _size( boost::multiprecision::cpp_int(size_r) *
factor( unit_r ) )
140 FSize(
const std::string &sizeStr,
const Unit unit_r = Unit::B );
148 explicit operator long long()
const {
return static_cast<long long>(_size); }
149 explicit operator int()
const {
return static_cast<int>(_size); }
150 explicit operator double()
const {
return static_cast<double>(_size); }
152 operator boost::multiprecision::cpp_int()
const {
return _size; }
153 boost::multiprecision::cpp_int in_unit(
const Unit unit_r)
const {
return _size /
factor( unit_r ); }
156 FSize operator-()
const {
return FSize(-_size); }
157 FSize & operator+=(
const FSize &rhs ) { _size += boost::multiprecision::cpp_int(rhs);
return *
this; }
158 FSize & operator-=(
const FSize &rhs ) { _size -= boost::multiprecision::cpp_int(rhs);
return *
this; }
159 FSize & operator*=(
const FSize &rhs ) { _size *= boost::multiprecision::cpp_int(rhs);
return *
this; }
160 FSize & operator/=(
const FSize &rhs ) { _size /= boost::multiprecision::cpp_int(rhs);
return *
this; }
162 bool operator<(
const FSize &rhs )
const {
return _size < boost::multiprecision::cpp_int(rhs); }
163 bool operator==(
const FSize &rhs )
const {
return _size == boost::multiprecision::cpp_int(rhs); }
166 FSize & operator++() { _size += 1;
return *
this; }
168 FSize & operator--() { _size -= 1;
return *
this; }
205 std::string
form(
const Unit unit_r,
unsigned fw = 0,
unsigned prec =
bestPrec,
const bool showunit =
true )
const;
210 std::string
form(
unsigned fw = 0,
unsigned prec =
bestPrec,
const bool showunit =
true )
const {
std::string form(const Unit unit_r, unsigned fw=0, unsigned prec=bestPrec, const bool showunit=true) const
Definition FSize.cc:111