diff options
author | Clyne Sullivan <clyne@bitgloo.com> | 2020-06-28 09:21:03 -0400 |
---|---|---|
committer | Clyne Sullivan <clyne@bitgloo.com> | 2020-06-28 09:21:03 -0400 |
commit | 2006aa7e923a21431baf3c65fd26c41235964b3b (patch) | |
tree | 9f0154743fd763f55a3e2672574c6eb615b9d135 | |
parent | 9503ccb716b563636709b5e90114286d2832f816 (diff) | |
parent | 56692725154d1e4ff2ef4786107cfda81c44b192 (diff) |
added f_to_string
-rw-r--r-- | to_string.hpp | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/to_string.hpp b/to_string.hpp index 3f04272..eb363f0 100644 --- a/to_string.hpp +++ b/to_string.hpp @@ -15,7 +15,7 @@ * @tparam N Number to convert * @tparam base Desired base, can be from 2 to 36 */ -template<auto N, unsigned int base, typename char_type, +template<auto N, int base, typename char_type, std::enable_if_t<std::is_integral_v<decltype(N)>, int> = 0, std::enable_if_t<(base > 1 && base < 37), int> = 0> class to_string_t { @@ -23,7 +23,7 @@ class to_string_t { // fits to the number perfectly. char_type buf[([]() constexpr noexcept { unsigned int len = N > 0 ? 1 : 2; - for (auto n = N < 0 ? -N : N; n; len++, n /= base); + for (auto n = N; n; len++, n /= base); return len; }())] = {}; @@ -35,8 +35,8 @@ class to_string_t { auto ptr = end(); *--ptr = '\0'; if (N != 0) { - for (auto n = N < 0 ? -N : N; n; n /= base) - *--ptr = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n % base]; + for (auto n = N; n; n /= base) + *--ptr = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[(N < 0 ? -1 : 1) * (n % base)]; if (N < 0) *--ptr = '-'; } else { @@ -68,7 +68,7 @@ class to_string_t { /** * Simplifies use of `to_string_t` from `to_string_t<N>()` to `to_string<N>`. */ -template<auto N, unsigned int base = 10, typename char_type = char> +template<auto N, int base = 10, typename char_type = char> constexpr to_string_t<N, base, char_type> to_string; #endif // TCSULLIVAN_TO_STRING_HPP_ |