| 1021 | } |
| 1022 | |
| 1023 | char* FastUInt64ToBufferLeft(uint64 u64, char* buffer) { |
| 1024 | uint digits; |
| 1025 | const char *ASCII_digits = nullptr; |
| 1026 | |
| 1027 | uint32 u = static_cast<uint32>(u64); |
| 1028 | if (u == u64) return FastUInt32ToBufferLeft(u, buffer); |
| 1029 | |
| 1030 | uint64 top_11_digits = u64 / 1000000000; |
| 1031 | buffer = FastUInt64ToBufferLeft(top_11_digits, buffer); |
| 1032 | u = u64 - (top_11_digits * 1000000000); |
| 1033 | |
| 1034 | digits = u / 10000000; // 10,000,000 |
| 1035 | DCHECK_LT(digits, 100); |
| 1036 | ASCII_digits = two_ASCII_digits[digits]; |
| 1037 | buffer[0] = ASCII_digits[0]; |
| 1038 | buffer[1] = ASCII_digits[1]; |
| 1039 | buffer += 2; |
| 1040 | u -= digits * 10000000; // 10,000,000 |
| 1041 | digits = u / 100000; // 100,000 |
| 1042 | ASCII_digits = two_ASCII_digits[digits]; |
| 1043 | buffer[0] = ASCII_digits[0]; |
| 1044 | buffer[1] = ASCII_digits[1]; |
| 1045 | buffer += 2; |
| 1046 | u -= digits * 100000; // 100,000 |
| 1047 | digits = u / 1000; // 1,000 |
| 1048 | ASCII_digits = two_ASCII_digits[digits]; |
| 1049 | buffer[0] = ASCII_digits[0]; |
| 1050 | buffer[1] = ASCII_digits[1]; |
| 1051 | buffer += 2; |
| 1052 | u -= digits * 1000; // 1,000 |
| 1053 | digits = u / 10; |
| 1054 | ASCII_digits = two_ASCII_digits[digits]; |
| 1055 | buffer[0] = ASCII_digits[0]; |
| 1056 | buffer[1] = ASCII_digits[1]; |
| 1057 | buffer += 2; |
| 1058 | u -= digits * 10; |
| 1059 | digits = u; |
| 1060 | *buffer++ = '0' + digits; |
| 1061 | *buffer = 0; |
| 1062 | return buffer; |
| 1063 | } |
| 1064 | |
| 1065 | char* FastInt64ToBufferLeft(int64 i, char* buffer) { |
| 1066 | uint64 u = i; |
no test coverage detected