]> code.bitgloo.com Git - clyne/constexpr-to-string.git/commitdiff
Merge branch 'master' into digits_array
authorclyne <clyne@bitgloo.com>
Mon, 29 Jun 2020 17:21:04 +0000 (13:21 -0400)
committerGitHub <noreply@github.com>
Mon, 29 Jun 2020 17:21:04 +0000 (13:21 -0400)
1  2 
README.md
to_string.hpp

diff --cc README.md
Simple merge
diff --cc to_string.hpp
index 2d185899a912c2f4da7469e1d66d47c97660aa04,eb363f049ae1a107b4eb7c9e514d33fafed28c13..63b52ab0c2000783b03f54a24bcbd6c9cced6806
@@@ -18,15 -15,15 +18,15 @@@ constexpr auto digit_count = sizeof(dig
   * @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>
 +    std::enable_if_t<(base > 1 && base < digit_count), int> = 0>
struct to_string_t {
class to_string_t {
      // The lambda calculates what the string length of N will be, so that `buf`
      // fits to the number perfectly.
-     char_type buf[([] {
+     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;
                     }())] = {};
  
       * Constructs the object, filling `buf` with the string representation of N.
       */
      constexpr to_string_t() noexcept {
+         auto ptr = end();
+         *--ptr = '\0';
          if (N != 0) {
-             auto ptr = buf + sizeof(buf) / sizeof(buf[0]);
-             *--ptr = '\0';
-             for (auto n = N < 0 ? -N : N; n; n /= base)
-                 *--ptr = digits[n % base];
+             for (auto n = N; n; n /= base)
 -                *--ptr = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[(N < 0 ? -1 : 1) * (n % base)];
++                *--ptr = digits[(N < 0 ? -1 : 1) * (n % base)];
              if (N < 0)
                  *--ptr = '-';
          } else {