From 7bbe8042dbbea81c713576e1ce69d00bbba5d4b6 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 12 Feb 2024 05:44:51 +0200 Subject: Move to_string(uint64_t,base,width) to utility, use everywhere --- libbuild2/functions-integer.cxx | 46 +++++------------------------------------ 1 file changed, 5 insertions(+), 41 deletions(-) (limited to 'libbuild2/functions-integer.cxx') diff --git a/libbuild2/functions-integer.cxx b/libbuild2/functions-integer.cxx index 934f753..8f9e2cf 100644 --- a/libbuild2/functions-integer.cxx +++ b/libbuild2/functions-integer.cxx @@ -11,54 +11,18 @@ namespace build2 extern bool functions_sort_flags (optional); // functions-builtin.cxx - static const char hex_digits[] = "0123456789abcdef"; - static string to_string (uint64_t i, optional base, optional width) { - uint64_t b (base ? convert (move (*base)) : 10); + int b (base ? + static_cast (convert (move (*base))) + : 10); + size_t w (width ? static_cast (convert (move (*width))) : 0); - // One day we can switch to C++17 std::to_chars(). - // - string r; - switch (b) - { - case 10: - { - r = to_string (i); - if (w > r.size ()) - r.insert (0, w - r.size (), '0'); - break; - } - case 16: - { - r.reserve (18); - r += "0x"; - - for (size_t j (64); j != 0; ) - { - j -= 4; - size_t d ((i >> j) & 0x0f); - - // Omit leading zeros but watch out for the i==0 corner case. - // - if (d != 0 || r.size () != 2 || j == 0) - r += hex_digits[d]; - } - - if (w > r.size () - 2) - r.insert (2, w - (r.size () - 2), '0'); - - break; - } - default: - throw invalid_argument ("unsupported base"); - } - - return r; + return (to_string (i, b, w)); } void -- cgit v1.1