| 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 "SkTSearch.h" | 10 #include "SkTSearch.h" |
| 11 #include <ctype.h> | |
| 12 | 11 |
| 13 static inline const char* index_into_base(const char*const* base, int index, | 12 static inline const char* index_into_base(const char*const* base, int index, |
| 14 size_t elemSize) | 13 size_t elemSize) |
| 15 { | 14 { |
| 16 return *(const char*const*)((const char*)base + index * elemSize); | 15 return *(const char*const*)((const char*)base + index * elemSize); |
| 17 } | 16 } |
| 18 | 17 |
| 19 int SkStrSearch(const char*const* base, int count, const char target[], | 18 int SkStrSearch(const char*const* base, int count, const char target[], |
| 20 size_t target_len, size_t elemSize) | 19 size_t target_len, size_t elemSize) |
| 21 { | 20 { |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 SkAutoAsciiToLC tolc(target, len); | 65 SkAutoAsciiToLC tolc(target, len); |
| 67 | 66 |
| 68 return SkStrSearch(base, count, tolc.lc(), len, elemSize); | 67 return SkStrSearch(base, count, tolc.lc(), len, elemSize); |
| 69 } | 68 } |
| 70 | 69 |
| 71 int SkStrLCSearch(const char*const* base, int count, const char target[], | 70 int SkStrLCSearch(const char*const* base, int count, const char target[], |
| 72 size_t elemSize) | 71 size_t elemSize) |
| 73 { | 72 { |
| 74 return SkStrLCSearch(base, count, target, strlen(target), elemSize); | 73 return SkStrLCSearch(base, count, target, strlen(target), elemSize); |
| 75 } | 74 } |
| 76 | |
| 77 ////////////////////////////////////////////////////////////////////////////// | |
| 78 | |
| 79 SkAutoAsciiToLC::SkAutoAsciiToLC(const char str[], size_t len) | |
| 80 { | |
| 81 // see if we need to compute the length | |
| 82 if ((long)len < 0) { | |
| 83 len = strlen(str); | |
| 84 } | |
| 85 fLength = len; | |
| 86 | |
| 87 // assign lc to our preallocated storage if len is small enough, or allocate | |
| 88 // it on the heap | |
| 89 char* lc; | |
| 90 if (len <= STORAGE) { | |
| 91 lc = fStorage; | |
| 92 } else { | |
| 93 lc = (char*)sk_malloc_throw(len + 1); | |
| 94 } | |
| 95 fLC = lc; | |
| 96 | |
| 97 // convert any asii to lower-case. we let non-ascii (utf8) chars pass | |
| 98 // through unchanged | |
| 99 for (int i = (int)(len - 1); i >= 0; --i) { | |
| 100 int c = str[i]; | |
| 101 if ((c & 0x80) == 0) { // is just ascii | |
| 102 c = tolower(c); | |
| 103 } | |
| 104 lc[i] = c; | |
| 105 } | |
| 106 lc[len] = 0; | |
| 107 } | |
| 108 | |
| 109 SkAutoAsciiToLC::~SkAutoAsciiToLC() | |
| 110 { | |
| 111 if (fLC != fStorage) { | |
| 112 sk_free(fLC); | |
| 113 } | |
| 114 } | |
| OLD | NEW |