| 93 | #endif |
| 94 | |
| 95 | constexpr string itoa(int num, int base = 10) |
| 96 | { |
| 97 | if(num == 0) { return {'0'}; } |
| 98 | |
| 99 | string value{}; |
| 100 | |
| 101 | while(num > 0) { |
| 102 | const char sub = static_cast<char>(num % base); |
| 103 | num /= base; |
| 104 | |
| 105 | // lack of std::string receiving a char |
| 106 | const char v = sub + '0'; |
| 107 | value.append(&v, 1); |
| 108 | } |
| 109 | |
| 110 | // reverse |
| 111 | string ret{}; |
| 112 | std::string_view rv{value}; |
| 113 | |
| 114 | for(auto i{rv.size()}; i > 0; --i) { |
| 115 | ret.append(rv.substr(i - 1, 1)); |
| 116 | } |
| 117 | |
| 118 | return ret; |
| 119 | } |
| 120 | |
| 121 | template<typename T, class... Args> |
| 122 | constexpr void Formatter(string& buffer, |