1 // Copyright (c) 2024 Google LLC 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 #include "source/to_string.h" 16 17 #include <cassert> 18 19 namespace spvtools { 20 to_string(uint32_t n)21std::string to_string(uint32_t n) { 22 // This implementation avoids using standard library features that access 23 // the locale. Using the locale requires taking a mutex which causes 24 // annoying serialization. 25 26 constexpr int max_digits = 10; // max uint has 10 digits 27 // Contains the resulting digits, with least significant digit in the last 28 // entry. 29 char buf[max_digits]; 30 int write_index = max_digits - 1; 31 if (n == 0) { 32 buf[write_index] = '0'; 33 } else { 34 while (n > 0) { 35 int units = n % 10; 36 buf[write_index--] = "0123456789"[units]; 37 n = (n - units) / 10; 38 } 39 write_index++; 40 } 41 assert(write_index >= 0); 42 return std::string(buf + write_index, max_digits - write_index); 43 } 44 } // namespace spvtools 45