| 10 | using std::string; |
| 11 | |
| 12 | string itoa(int num, int base = 10) |
| 13 | { |
| 14 | if(num == 0) { return {'0'}; } |
| 15 | |
| 16 | string value{}; |
| 17 | |
| 18 | while(num > 0) { |
| 19 | const char sub = static_cast<char>(num % base); |
| 20 | num /= base; |
| 21 | |
| 22 | // lack of std::string receiving a char |
| 23 | const char v = sub + '0'; |
| 24 | value.append(&v, 1); |
| 25 | } |
| 26 | |
| 27 | // reverse |
| 28 | string ret{}; |
| 29 | std::string_view rv{value}; |
| 30 | |
| 31 | for(auto i{rv.size()}; i > 0; --i) { ret.append(rv.substr(i - 1, 1)); } |
| 32 | |
| 33 | return ret; |
| 34 | } |
| 35 | |
| 36 | template<typename T, class... Args> |
| 37 | void Formatter(string& buffer, |