aboutsummaryrefslogtreecommitdiffstats
path: root/native/src/char_utils.cpp
diff options
context:
space:
mode:
authorKen Wakasa <kwakasa@google.com>2010-04-23 01:24:09 +0900
committerKen Wakasa <kwakasa@google.com>2010-04-23 01:24:09 +0900
commitf1abb8ce3c5527b67c21aab68e357a39626ce0af (patch)
tree577c13b13abf88d0f0e92066987e652a09110f49 /native/src/char_utils.cpp
parent707505ec18dcbd057f8ac4b2b82ddd2bbbe3a371 (diff)
downloadlatinime-f1abb8ce3c5527b67c21aab68e357a39626ce0af.tar.gz
latinime-f1abb8ce3c5527b67c21aab68e357a39626ce0af.tar.xz
latinime-f1abb8ce3c5527b67c21aab68e357a39626ce0af.zip
Get rid of code taken from bionic to avoid license issue.
Change-Id: If96f4247edbc7b1e9f7418d2ddef191618a54ae3
Diffstat (limited to 'native/src/char_utils.cpp')
-rw-r--r--native/src/char_utils.cpp33
1 files changed, 13 insertions, 20 deletions
diff --git a/native/src/char_utils.cpp b/native/src/char_utils.cpp
index c9204df24..a31a0632c 100644
--- a/native/src/char_utils.cpp
+++ b/native/src/char_utils.cpp
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-#include <sys/types.h>
+#include <stdlib.h>
namespace latinime {
@@ -27,7 +27,7 @@ struct LatinCapitalSmallPair {
//
// 1. Run the following code. Bascially taken from
// Dictionary::toLowerCase(unsigned short c) in dictionary.cpp.
-// Then, get the list of chars where ccc != ccc2 above.
+// Then, get the list of chars where cc != ccc.
//
// unsigned short c, cc, ccc, ccc2;
// for (c = 0; c < 0xFFFF ; c++) {
@@ -882,25 +882,18 @@ static const struct LatinCapitalSmallPair SORTED_CHAR_MAP[] = {
{ 0xFF3A, 0xFF5A } // FULLWIDTH LATIN CAPITAL LETTER Z
};
-unsigned short latin_tolower(unsigned short c0) {
- const struct LatinCapitalSmallPair *p;
- const struct LatinCapitalSmallPair *base = SORTED_CHAR_MAP;
- int c = c0;
- int lim, cmp;
- const size_t nmemb = sizeof(SORTED_CHAR_MAP) / sizeof(SORTED_CHAR_MAP[0]);
+static int compare_pair_capital(const void *a, const void *b) {
+ return (int)(*(unsigned short *)a)
+ - (int)((struct LatinCapitalSmallPair*)b)->capital;
+}
- // Binary search: Taken from bionic
- for (lim = nmemb; lim != 0; lim >>= 1) {
- p = base + (lim >> 1);
- cmp = c - (int)p->capital;
- if (cmp == 0)
- return p->small;
- if (cmp > 0) { /* key > p: move right */
- base = p + 1;
- lim--;
- } /* else move left */
- }
- return c0;
+unsigned short latin_tolower(unsigned short c) {
+ struct LatinCapitalSmallPair *p =
+ (struct LatinCapitalSmallPair *)bsearch(&c, SORTED_CHAR_MAP,
+ sizeof(SORTED_CHAR_MAP) / sizeof(SORTED_CHAR_MAP[0]),
+ sizeof(SORTED_CHAR_MAP[0]),
+ compare_pair_capital);
+ return p ? p->small : c;
}
} // namespace latinime