21 explicit n4(uint64_t v, uint64_t d = 1) : val(v), div(d) {}
22 std::ostream &print(std::ostream &os)
const {
24 if (val % div && val < div * 100) {
25 if ((v = val * 1000 + div / 2) < div * 1000) {
26 char ofill = os.fill(
'0');
27 os <<
'.' << std::setw(3) << v / div;
31 if ((v = val * 100 + div / 2) < div * 1000) {
32 char ofill = os.fill(
'0');
33 os << val / div <<
'.' << std::setw(2) << (v / div) % 100;
37 if ((v = val * 10 + div / 2) < div * 1000) {
38 os << val / div <<
'.' << (v / div) % 10;
42 v = (val + div / 2) / div;
44 os << std::setw(4) << v;
45 }
else if (v < UINT64_C(999500)) {
46 os << std::setw(3) << (v + 500) / 1000 <<
'K';
47 }
else if (v < UINT64_C(9950000)) {
48 v = (v + UINT64_C(50000)) / UINT64_C(100000);
49 os << v / 10 <<
'.' << v % 10 <<
'M';
50 }
else if (v < UINT64_C(999500000)) {
51 os << std::setw(3) << (v + UINT64_C(500000)) / UINT64_C(1000000) <<
'M';
52 }
else if (v < UINT64_C(9950000000)) {
53 v = (v + UINT64_C(50000000)) / UINT64_C(100000000);
54 os << v / 10 <<
'.' << v % 10 <<
'G';
55 }
else if (v < UINT64_C(999500000000)) {
56 os << std::setw(3) << (v + UINT64_C(500000000)) / UINT64_C(1000000000) <<
'G';
57 }
else if (v < UINT64_C(9950000000000)) {
58 v = (v + UINT64_C(50000000000)) / UINT64_C(100000000000);
59 os << v / 10 <<
'.' << v % 10 <<
'T';
61 os << std::setw(3) << (v + UINT64_C(500000000000)) / UINT64_C(1000000000000) <<
'T';
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:13