| 201 | |
| 202 | template<class T> |
| 203 | static bool GetNumericToken(const T* string, std::size_t length, std::size_t& i, std::size_t width, std::int32_t* number, std::size_t* scannedDigitsCount = nullptr) noexcept |
| 204 | { |
| 205 | std::size_t n = 1; |
| 206 | *number = 0; |
| 207 | while (i < length && string[i] >= '0' && string[i] <= '9') { |
| 208 | *number *= 10; |
| 209 | *number += string[i] - '0'; |
| 210 | |
| 211 | i++; |
| 212 | n++; |
| 213 | |
| 214 | if (width > 0 && n > width) { |
| 215 | break; |
| 216 | } |
| 217 | } |
| 218 | |
| 219 | if (scannedDigitsCount != nullptr) { |
| 220 | *scannedDigitsCount = n - 1; |
| 221 | } |
| 222 | |
| 223 | return (n > 1); |
| 224 | } |
| 225 | |
| 226 | template<class T, class U> |
| 227 | std::size_t TranslateFromUnicodeFormat(T* dest, std::size_t destLength, const U* src, std::size_t srcLength) noexcept |