OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2006 The Android Open Source Project | 3 * Copyright 2006 The Android Open Source Project |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 | 9 |
10 #include "SkString.h" | 10 #include "SkString.h" |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 const char* limit = strchr(prefixes, '\0'); | 61 const char* limit = strchr(prefixes, '\0'); |
62 if (!strncmp(string, prefixes, limit - prefixes)) { | 62 if (!strncmp(string, prefixes, limit - prefixes)) { |
63 return index; | 63 return index; |
64 } | 64 } |
65 prefixes = limit + 1; | 65 prefixes = limit + 1; |
66 index++; | 66 index++; |
67 } while (prefixes[0]); | 67 } while (prefixes[0]); |
68 return -1; | 68 return -1; |
69 } | 69 } |
70 | 70 |
71 char* SkStrAppendS32(char string[], int32_t dec) { | 71 char* SkStrAppendU32(char string[], uint32_t dec) { |
72 SkDEBUGCODE(char* start = string;) | 72 SkDEBUGCODE(char* start = string;) |
73 | 73 |
74 char buffer[SkStrAppendS32_MaxSize]; | 74 char buffer[SkStrAppendU32_MaxSize]; |
75 char* p = buffer + sizeof(buffer); | 75 char* p = buffer + sizeof(buffer); |
76 bool neg = false; | |
77 | |
78 if (dec < 0) { | |
79 neg = true; | |
80 dec = -dec; | |
81 } | |
82 | 76 |
83 do { | 77 do { |
84 *--p = SkToU8('0' + dec % 10); | 78 *--p = SkToU8('0' + dec % 10); |
85 dec /= 10; | 79 dec /= 10; |
86 } while (dec != 0); | 80 } while (dec != 0); |
87 | 81 |
88 if (neg) { | |
89 *--p = '-'; | |
90 } | |
91 | |
92 SkASSERT(p >= buffer); | 82 SkASSERT(p >= buffer); |
93 char* stop = buffer + sizeof(buffer); | 83 char* stop = buffer + sizeof(buffer); |
94 while (p < stop) { | 84 while (p < stop) { |
95 *string++ = *p++; | 85 *string++ = *p++; |
96 } | 86 } |
97 SkASSERT(string - start <= SkStrAppendS32_MaxSize); | 87 SkASSERT(string - start <= SkStrAppendU32_MaxSize); |
98 return string; | 88 return string; |
99 } | 89 } |
100 | 90 |
101 char* SkStrAppendS64(char string[], int64_t dec, int minDigits) { | 91 char* SkStrAppendS32(char string[], int32_t dec) { |
| 92 if (dec < 0) { |
| 93 *string++ = '-'; |
| 94 dec = -dec; |
| 95 } |
| 96 return SkStrAppendU32(string, static_cast<uint32_t>(dec)); |
| 97 } |
| 98 |
| 99 char* SkStrAppendU64(char string[], uint64_t dec, int minDigits) { |
102 SkDEBUGCODE(char* start = string;) | 100 SkDEBUGCODE(char* start = string;) |
103 | 101 |
104 char buffer[SkStrAppendS64_MaxSize]; | 102 char buffer[SkStrAppendU64_MaxSize]; |
105 char* p = buffer + sizeof(buffer); | 103 char* p = buffer + sizeof(buffer); |
106 bool neg = false; | |
107 | |
108 if (dec < 0) { | |
109 neg = true; | |
110 dec = -dec; | |
111 } | |
112 | 104 |
113 do { | 105 do { |
114 *--p = SkToU8('0' + (int32_t) (dec % 10)); | 106 *--p = SkToU8('0' + (int32_t) (dec % 10)); |
115 dec /= 10; | 107 dec /= 10; |
116 minDigits--; | 108 minDigits--; |
117 } while (dec != 0); | 109 } while (dec != 0); |
118 | 110 |
119 while (minDigits > 0) { | 111 while (minDigits > 0) { |
120 *--p = '0'; | 112 *--p = '0'; |
121 minDigits--; | 113 minDigits--; |
122 } | 114 } |
123 | 115 |
124 if (neg) { | |
125 *--p = '-'; | |
126 } | |
127 SkASSERT(p >= buffer); | 116 SkASSERT(p >= buffer); |
128 size_t cp_len = buffer + sizeof(buffer) - p; | 117 size_t cp_len = buffer + sizeof(buffer) - p; |
129 memcpy(string, p, cp_len); | 118 memcpy(string, p, cp_len); |
130 string += cp_len; | 119 string += cp_len; |
131 | 120 |
132 SkASSERT(string - start <= SkStrAppendS64_MaxSize); | 121 SkASSERT(string - start <= SkStrAppendU64_MaxSize); |
133 return string; | 122 return string; |
134 } | 123 } |
135 | 124 |
| 125 char* SkStrAppendS64(char string[], int64_t dec, int minDigits) { |
| 126 if (dec < 0) { |
| 127 *string++ = '-'; |
| 128 dec = -dec; |
| 129 } |
| 130 return SkStrAppendU64(string, static_cast<uint64_t>(dec), minDigits); |
| 131 } |
| 132 |
136 char* SkStrAppendFloat(char string[], float value) { | 133 char* SkStrAppendFloat(char string[], float value) { |
137 // since floats have at most 8 significant digits, we limit our %g to that. | 134 // since floats have at most 8 significant digits, we limit our %g to that. |
138 static const char gFormat[] = "%.8g"; | 135 static const char gFormat[] = "%.8g"; |
139 // make it 1 larger for the terminating 0 | 136 // make it 1 larger for the terminating 0 |
140 char buffer[SkStrAppendScalar_MaxSize + 1]; | 137 char buffer[SkStrAppendScalar_MaxSize + 1]; |
141 int len = SNPRINTF(buffer, sizeof(buffer), gFormat, value); | 138 int len = SNPRINTF(buffer, sizeof(buffer), gFormat, value); |
142 memcpy(string, buffer, len); | 139 memcpy(string, buffer, len); |
143 SkASSERT(len <= SkStrAppendScalar_MaxSize); | 140 SkASSERT(len <= SkStrAppendScalar_MaxSize); |
144 return string + len; | 141 return string + len; |
145 } | 142 } |
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
511 char* stop = SkStrAppendS32(buffer, dec); | 508 char* stop = SkStrAppendS32(buffer, dec); |
512 this->insert(offset, buffer, stop - buffer); | 509 this->insert(offset, buffer, stop - buffer); |
513 } | 510 } |
514 | 511 |
515 void SkString::insertS64(size_t offset, int64_t dec, int minDigits) { | 512 void SkString::insertS64(size_t offset, int64_t dec, int minDigits) { |
516 char buffer[SkStrAppendS64_MaxSize]; | 513 char buffer[SkStrAppendS64_MaxSize]; |
517 char* stop = SkStrAppendS64(buffer, dec, minDigits); | 514 char* stop = SkStrAppendS64(buffer, dec, minDigits); |
518 this->insert(offset, buffer, stop - buffer); | 515 this->insert(offset, buffer, stop - buffer); |
519 } | 516 } |
520 | 517 |
| 518 void SkString::insertU32(size_t offset, uint32_t dec) { |
| 519 char buffer[SkStrAppendU32_MaxSize]; |
| 520 char* stop = SkStrAppendU32(buffer, dec); |
| 521 this->insert(offset, buffer, stop - buffer); |
| 522 } |
| 523 |
| 524 void SkString::insertU64(size_t offset, uint64_t dec, int minDigits) { |
| 525 char buffer[SkStrAppendU64_MaxSize]; |
| 526 char* stop = SkStrAppendU64(buffer, dec, minDigits); |
| 527 this->insert(offset, buffer, stop - buffer); |
| 528 } |
| 529 |
521 void SkString::insertHex(size_t offset, uint32_t hex, int minDigits) { | 530 void SkString::insertHex(size_t offset, uint32_t hex, int minDigits) { |
522 minDigits = SkPin32(minDigits, 0, 8); | 531 minDigits = SkPin32(minDigits, 0, 8); |
523 | 532 |
524 static const char gHex[] = "0123456789ABCDEF"; | 533 static const char gHex[] = "0123456789ABCDEF"; |
525 | 534 |
526 char buffer[8]; | 535 char buffer[8]; |
527 char* p = buffer + sizeof(buffer); | 536 char* p = buffer + sizeof(buffer); |
528 | 537 |
529 do { | 538 do { |
530 *--p = gHex[hex & 0xF]; | 539 *--p = gHex[hex & 0xF]; |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
641 SkString SkStringPrintf(const char* format, ...) { | 650 SkString SkStringPrintf(const char* format, ...) { |
642 SkString formattedOutput; | 651 SkString formattedOutput; |
643 char buffer[kBufferSize]; | 652 char buffer[kBufferSize]; |
644 ARGS_TO_BUFFER(format, buffer, kBufferSize); | 653 ARGS_TO_BUFFER(format, buffer, kBufferSize); |
645 formattedOutput.set(buffer); | 654 formattedOutput.set(buffer); |
646 return formattedOutput; | 655 return formattedOutput; |
647 } | 656 } |
648 | 657 |
649 #undef VSNPRINTF | 658 #undef VSNPRINTF |
650 #undef SNPRINTF | 659 #undef SNPRINTF |
OLD | NEW |