From f1abb8ce3c5527b67c21aab68e357a39626ce0af Mon Sep 17 00:00:00 2001 From: Ken Wakasa Date: Fri, 23 Apr 2010 01:24:09 +0900 Subject: [PATCH] Get rid of code taken from bionic to avoid license issue. Change-Id: If96f4247edbc7b1e9f7418d2ddef191618a54ae3 --- native/src/char_utils.cpp | 33 +++++++++++++-------------------- 1 file 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 +#include 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