| OLD | NEW |
| 1 // Protocol Buffers - Google's data interchange format | 1 // Protocol Buffers - Google's data interchange format |
| 2 // Copyright 2008 Google Inc. All rights reserved. | 2 // Copyright 2008 Google Inc. All rights reserved. |
| 3 // https://developers.google.com/protocol-buffers/ | 3 // https://developers.google.com/protocol-buffers/ |
| 4 // | 4 // |
| 5 // Redistribution and use in source and binary forms, with or without | 5 // Redistribution and use in source and binary forms, with or without |
| 6 // modification, are permitted provided that the following conditions are | 6 // modification, are permitted provided that the following conditions are |
| 7 // met: | 7 // met: |
| 8 // | 8 // |
| 9 // * Redistributions of source code must retain the above copyright | 9 // * Redistributions of source code must retain the above copyright |
| 10 // notice, this list of conditions and the following disclaimer. | 10 // notice, this list of conditions and the following disclaimer. |
| (...skipping 510 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 521 return -1; | 521 return -1; |
| 522 | 522 |
| 523 dest[used] = '\0'; // doesn't count towards return value though | 523 dest[used] = '\0'; // doesn't count towards return value though |
| 524 return used; | 524 return used; |
| 525 } | 525 } |
| 526 | 526 |
| 527 // Calculates the length of the C-style escaped version of 'src'. | 527 // Calculates the length of the C-style escaped version of 'src'. |
| 528 // Assumes that non-printable characters are escaped using octal sequences, and | 528 // Assumes that non-printable characters are escaped using octal sequences, and |
| 529 // that UTF-8 bytes are not handled specially. | 529 // that UTF-8 bytes are not handled specially. |
| 530 static inline size_t CEscapedLength(StringPiece src) { | 530 static inline size_t CEscapedLength(StringPiece src) { |
| 531 static const char c_escaped_len[256] = { | 531 static char c_escaped_len[256] = { |
| 532 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, 2, 4, 4, // \t, \n, \r | 532 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, 2, 4, 4, // \t, \n, \r |
| 533 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, | 533 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, |
| 534 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, // ", ' | 534 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, // ", ' |
| 535 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // '0'..'9' | 535 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // '0'..'9' |
| 536 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 'A'..'O' | 536 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 'A'..'O' |
| 537 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, // 'P'..'Z', '\' | 537 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, // 'P'..'Z', '\' |
| 538 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 'a'..'o' | 538 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 'a'..'o' |
| 539 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, // 'p'..'z', DEL | 539 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, // 'p'..'z', DEL |
| 540 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, | 540 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, |
| 541 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, | 541 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, |
| (...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 884 } while (i > 0); | 884 } while (i > 0); |
| 885 *p = '-'; | 885 *p = '-'; |
| 886 return p; | 886 return p; |
| 887 } | 887 } |
| 888 } | 888 } |
| 889 } | 889 } |
| 890 | 890 |
| 891 char *FastHexToBuffer(int i, char* buffer) { | 891 char *FastHexToBuffer(int i, char* buffer) { |
| 892 GOOGLE_CHECK(i >= 0) << "FastHexToBuffer() wants non-negative integers, not "
<< i; | 892 GOOGLE_CHECK(i >= 0) << "FastHexToBuffer() wants non-negative integers, not "
<< i; |
| 893 | 893 |
| 894 static const char hexdigits[] = "0123456789abcdef"; | 894 static const char *hexdigits = "0123456789abcdef"; |
| 895 char *p = buffer + 21; | 895 char *p = buffer + 21; |
| 896 *p-- = '\0'; | 896 *p-- = '\0'; |
| 897 do { | 897 do { |
| 898 *p-- = hexdigits[i & 15]; // mod by 16 | 898 *p-- = hexdigits[i & 15]; // mod by 16 |
| 899 i >>= 4; // divide by 16 | 899 i >>= 4; // divide by 16 |
| 900 } while (i > 0); | 900 } while (i > 0); |
| 901 return p + 1; | 901 return p + 1; |
| 902 } | 902 } |
| 903 | 903 |
| 904 char *InternalFastHexToBuffer(uint64 value, char* buffer, int num_byte) { | 904 char *InternalFastHexToBuffer(uint64 value, char* buffer, int num_byte) { |
| 905 static const char hexdigits[] = "0123456789abcdef"; | 905 static const char *hexdigits = "0123456789abcdef"; |
| 906 buffer[num_byte] = '\0'; | 906 buffer[num_byte] = '\0'; |
| 907 for (int i = num_byte - 1; i >= 0; i--) { | 907 for (int i = num_byte - 1; i >= 0; i--) { |
| 908 #ifdef _M_X64 | 908 #ifdef _M_X64 |
| 909 // MSVC x64 platform has a bug optimizing the uint32(value) in the #else | 909 // MSVC x64 platform has a bug optimizing the uint32(value) in the #else |
| 910 // block. Given that the uint32 cast was to improve performance on 32-bit | 910 // block. Given that the uint32 cast was to improve performance on 32-bit |
| 911 // platforms, we use 64-bit '&' directly. | 911 // platforms, we use 64-bit '&' directly. |
| 912 buffer[i] = hexdigits[value & 0xf]; | 912 buffer[i] = hexdigits[value & 0xf]; |
| 913 #else | 913 #else |
| 914 buffer[i] = hexdigits[uint32(value) & 0xf]; | 914 buffer[i] = hexdigits[uint32(value) & 0xf]; |
| 915 #endif | 915 #endif |
| (...skipping 1364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2280 // Return length of a single UTF-8 source character | 2280 // Return length of a single UTF-8 source character |
| 2281 int UTF8FirstLetterNumBytes(const char* src, int len) { | 2281 int UTF8FirstLetterNumBytes(const char* src, int len) { |
| 2282 if (len == 0) { | 2282 if (len == 0) { |
| 2283 return 0; | 2283 return 0; |
| 2284 } | 2284 } |
| 2285 return kUTF8LenTbl[*reinterpret_cast<const uint8*>(src)]; | 2285 return kUTF8LenTbl[*reinterpret_cast<const uint8*>(src)]; |
| 2286 } | 2286 } |
| 2287 | 2287 |
| 2288 } // namespace protobuf | 2288 } // namespace protobuf |
| 2289 } // namespace google | 2289 } // namespace google |
| OLD | NEW |