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 #ifndef SkTSearch_DEFINED | 10 #ifndef SkTSearch_DEFINED |
11 #define SkTSearch_DEFINED | 11 #define SkTSearch_DEFINED |
12 | 12 |
13 #include "SkTypes.h" | 13 #include "SkTypes.h" |
14 #include <ctype.h> | |
14 | 15 |
15 /** | 16 /** |
16 * All of the SkTSearch variants want to return the index (0...N-1) of the | 17 * All of the SkTSearch variants want to return the index (0...N-1) of the |
17 * found element, or the bit-not of where to insert the element. | 18 * found element, or the bit-not of where to insert the element. |
18 * | 19 * |
19 * At a simple level, if the return value is negative, it was not found. | 20 * At a simple level, if the return value is negative, it was not found. |
20 * | 21 * |
21 * For clients that want to insert the new element if it was not found, use | 22 * For clients that want to insert the new element if it was not found, use |
22 * the following logic: | 23 * the following logic: |
23 * | 24 * |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
118 int SkStrLCSearch(const char*const* base, int count, const char target[], | 119 int SkStrLCSearch(const char*const* base, int count, const char target[], |
119 size_t elemSize); | 120 size_t elemSize); |
120 | 121 |
121 /** Helper class to convert a string to lower-case, but only modifying the ascii | 122 /** Helper class to convert a string to lower-case, but only modifying the ascii |
122 characters. This makes the routine very fast and never changes the string | 123 characters. This makes the routine very fast and never changes the string |
123 length, but it is not suitable for linguistic purposes. Normally this is | 124 length, but it is not suitable for linguistic purposes. Normally this is |
124 used for buiding and searching string tables. | 125 used for buiding and searching string tables. |
125 */ | 126 */ |
126 class SkAutoAsciiToLC { | 127 class SkAutoAsciiToLC { |
127 public: | 128 public: |
128 SkAutoAsciiToLC(const char str[], size_t len = (size_t)-1); | 129 SkAutoAsciiToLC(const char str[], size_t len = (size_t)-1) { |
reed1
2013/11/15 18:20:12
Not sure I agree with this one.
1. This class doe
mtklein
2013/11/15 18:28:14
Reverted.
| |
129 ~SkAutoAsciiToLC(); | 130 // see if we need to compute the length |
131 if ((long)len < 0) { | |
132 len = strlen(str); | |
133 } | |
134 fLength = len; | |
135 | |
136 // assign lc to our preallocated storage if len is small enough, or allo cate | |
137 // it on the heap | |
138 char* lc; | |
139 if (len <= STORAGE) { | |
140 lc = fStorage; | |
141 } else { | |
142 lc = (char*)sk_malloc_throw(len + 1); | |
143 } | |
144 fLC = lc; | |
145 | |
146 // convert any asii to lower-case. we let non-ascii (utf8) chars pass | |
147 // through unchanged | |
148 for (int i = (int)(len - 1); i >= 0; --i) { | |
149 int c = str[i]; | |
150 if ((c & 0x80) == 0) { // is just ascii | |
151 c = tolower(c); | |
152 } | |
153 lc[i] = c; | |
154 } | |
155 lc[len] = 0; | |
156 } | |
157 ~SkAutoAsciiToLC() { | |
158 if (fLC != fStorage) { | |
159 sk_free(fLC); | |
160 } | |
161 } | |
130 | 162 |
131 const char* lc() const { return fLC; } | 163 const char* lc() const { return fLC; } |
132 size_t length() const { return fLength; } | 164 size_t length() const { return fLength; } |
133 | 165 |
134 private: | 166 private: |
135 char* fLC; // points to either the heap or fStorage | 167 char* fLC; // points to either the heap or fStorage |
136 size_t fLength; | 168 size_t fLength; |
137 enum { | 169 enum { |
138 STORAGE = 64 | 170 STORAGE = 64 |
139 }; | 171 }; |
140 char fStorage[STORAGE+1]; | 172 char fStorage[STORAGE+1]; |
141 }; | 173 }; |
174 #define SkAutoAsciiToLC(...) SK_REQUIRE_LOCAL_VAR(SkAutoAsciiToLC) | |
142 | 175 |
143 // Helper when calling qsort with a compare proc that has typed its arguments | 176 // Helper when calling qsort with a compare proc that has typed its arguments |
144 #define SkCastForQSort(compare) reinterpret_cast<int (*)(const void*, const void *)>(compare) | 177 #define SkCastForQSort(compare) reinterpret_cast<int (*)(const void*, const void *)>(compare) |
145 | 178 |
146 #endif | 179 #endif |
OLD | NEW |