From 4c7d276eb123523c66c1d8cbf7dbb10fac674cd2 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Fri, 1 Sep 2000 19:36:44 +0000 Subject: Update. 2000-08-31 Bruno Haible * wctype/wcfuncs.c (iswblank): New function. * wctype/wcfuncs_l.c (__iswblank_l): New function. * wctype/wcextra.c: Remove file. * wctype/wcextra_l.c: Remove file. * wctype/Makefile (distribute): Remove wcextra and wcextra_l. 2000-08-31 Bruno Haible * locale/programs/ld-collate.c (collate_output): Remove redundant assert call. * string/strcoll.c: Likewise. * string/strxfrm.c: Include assert.h. Add assert calls like in string/strcoll.c. 2000-08-31 Bruno Haible * locale/categories.def (_NL_COLLATE_HASH_SIZE, _NL_COLLATE_HASH_LAYERS, _NL_COLLATE_NAMES, _NL_CTYPE_NAMES, _NL_CTYPE_HASH_SIZE, _NL_CTYPE_HASH_LAYERS): Remove definitions. * locale/langinfo.h (_NL_COLLATE_HASH_SIZE, _NL_COLLATE_HASH_LAYERS, _NL_COLLATE_NAMES): Rename to _NL_COLLATE_GAP1/2/3 respectively. (_NL_CTYPE_NAMES): Rename to _NL_CTYPE_GAP3. (_NL_CTYPE_GAP3): Rename to _NL_CTYPE_GAP4. (_NL_CTYPE_HASH_SIZE, _NL_CTYPE_HASH_LAYERS): Rename to _NL_CTYPE_GAP5/6 respectively. * locale/C-ctype.c (_nl_C_LC_CTYPE): Update. * ctype/ctype-info.c (__ctype_names, __ctype_width): Remove variables. * locale/lc-ctype.c (_nl_postload_ctype): Assume new locale format. Don't initialize __ctype_names and __ctype_width. * wctype/cname-lookup.h: Remove file. * wctype/Makefile (distribute): Remove cname-lookup.h. * wctype/wchar-lookup.h: Include stdint.h. * wctype/wctype.c (__wctype): Assume new locale format. * wctype/wctype_l.c (__wctype_l): Likewise. * wctype/iswctype.c: Don't include cname-lookup.h. (__iswctype): Assume new locale format. * wctype/iswctype_l.c: Don't include cname-lookup.h. (__iswctype_l): Assume new locale format. * wctype/wctrans.c: Don't include ctype.h. (wctrans): Assume new locale format. * wctype/wctrans_l.c (__wctrans_l): Likewise. * wctype/towctrans.c: Don't include cname-lookup.h. (__towctrans): Assume new locale format. * wctype/towctrans_l.c: Don't include cname-lookup.h. (__towctrans_l): Assume new locale format. * wctype/wcfuncs.c: Don't include ctype.h and cname-lookup.h. Include localeinfo.h instead. (__NO_WCTYPE): Remove unused macro. (__ctype32_b, __ctype32_toupper, __ctype32_tolower): Remove declarations. (iswalnum, iswalpha, iswcntrl, iswdigit, iswlower, iswgraph, iswprint, iswpunct, iswspace, iswupper, iswxdigit): Assume new locale format. (towlower, towupper): Likewise. * wctype/wcfuncs_l.c: Don't include cname-lookup.h. Include localeinfo.h instead. (__NO_WCTYPE): Remove unused macro. (__iswalnum_l, __iswalpha_l, __iswcntrl_l, __iswdigit_l, __iswlower_l, __iswgraph_l, __iswprint_l, __iswpunct_l, __iswspace_l, __iswupper_l, __iswxdigit_l): Assume new locale format. (__towlower_l, __towupper_l): Likewise. * wcsmbs/wcwidth.h: Don't include cname-lookup.h. (__ctype32_b): Remove declaration. (internal_wcwidth): Assume new locale format. * locale/programs/ld-ctype.c (struct locale_ctype_t): Remove fields plane_size, plane_cnt, names, width. Rename map to map_b, rename map32 to map32_b, rename width_3level to width. (ctype_output): Always create new locale format. Don't emit _NL_CTYPE_NAMES, _NL_CTYPE_HASH_SIZE, _NL_CTYPE_HASH_LAYERS any more. (allocate_arrays): Always create new locale format. * locale/C-collate.c (_nl_C_LC_COLLATE): Update. * locale/weightwc.h (findidx): Assume new locale format. * string/strcoll.c (wcscoll): Remove local variables size, layers, names. * string/strxfrm.c (wcsxfrm): Likewise. * posix/fnmatch_loop.c (internal_fnwmatch): Likewise. Change type of local variable collseq to 'const char *'. (SUFFIX): Don't use, don't undefine. * posix/fnmatch.c: Remove SUFFIX definition. * locale/programs/ld-collate.c (struct locale_collate_t): Remove fields plane_size, plane_cnt, wcheads, wcseqorder. Rename wcheads_3level to wcheads, rename wcseqorder_3level to wcseqorder. (collate_finish): Always create new locale format. Remove local variables min_total, act_size. (collate_output): Always create new locale format. Remove local variables table_size, names, tablewc. Rename tablewc_3level to tablewc. 2000-08-31 Bruno Haible * locale/programs/ld-collate.c (obstack_int32_grow, obstack_int32_grow_fast): New inline functions. (output_weightwc, collate_output): Use them where possible. --- wctype/Makefile | 7 ++--- wctype/cname-lookup.h | 62 ---------------------------------------- wctype/iswctype.c | 31 ++++---------------- wctype/iswctype_l.c | 32 ++++----------------- wctype/towctrans.c | 19 +------------ wctype/towctrans_l.c | 19 +------------ wctype/wcextra.c | 54 ----------------------------------- wctype/wcextra_l.c | 55 ----------------------------------- wctype/wcfuncs.c | 65 ++++-------------------------------------- wctype/wcfuncs_l.c | 79 +++++++-------------------------------------------- wctype/wchar-lookup.h | 4 ++- wctype/wctrans.c | 25 ++-------------- wctype/wctrans_l.c | 20 ++----------- wctype/wctype.c | 20 ++----------- wctype/wctype_l.c | 20 ++----------- 15 files changed, 49 insertions(+), 463 deletions(-) delete mode 100644 wctype/cname-lookup.h delete mode 100644 wctype/wcextra.c delete mode 100644 wctype/wcextra_l.c (limited to 'wctype') diff --git a/wctype/Makefile b/wctype/Makefile index 78f66e7..c1a2de7 100644 --- a/wctype/Makefile +++ b/wctype/Makefile @@ -22,10 +22,9 @@ subdir := wctype headers := wctype.h -distribute := cname-lookup.h wchar-lookup.h -routines := wcfuncs wctype iswctype wctrans towctrans wcextra \ - wcfuncs_l wctype_l iswctype_l wctrans_l towctrans_l \ - wcextra_l +distribute := wchar-lookup.h +routines := wcfuncs wctype iswctype wctrans towctrans \ + wcfuncs_l wctype_l iswctype_l wctrans_l towctrans_l tests := test_wctype test_wcfuncs diff --git a/wctype/cname-lookup.h b/wctype/cname-lookup.h deleted file mode 100644 index 62111b6..0000000 --- a/wctype/cname-lookup.h +++ /dev/null @@ -1,62 +0,0 @@ -/* Copyright (C) 1996, 1997, 1999 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -#include -#include "../locale/localeinfo.h" - -/* Some words on the runtime of this functions. Although there is a - loop in the function the runtime is asymptotically quasi constant. - The reason is that even for the largest character sets HASH_LAYERS - will not grow beyond 15 (a guess!). */ -#ifndef USE_IN_EXTENDED_LOCALE_MODEL -static __inline size_t -cname_lookup (wint_t wc) -#else -static __inline size_t -cname_lookup (wint_t wc, __locale_t locale) -#endif -{ - unsigned int hash_size, hash_layers; - size_t result, cnt; - -#ifndef USE_IN_EXTENDED_LOCALE_MODEL - extern unsigned int *__ctype_names; - hash_size = _NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_HASH_SIZE); - hash_layers = _NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_HASH_LAYERS); - -#else - struct locale_data *current = locale->__locales[LC_CTYPE]; - unsigned int *__ctype_names = - (unsigned int *) current->values[_NL_ITEM_INDEX (_NL_CTYPE_NAMES)].string; - hash_size = - current->values[_NL_ITEM_INDEX (_NL_CTYPE_HASH_SIZE)].word; - hash_layers = - current->values[_NL_ITEM_INDEX (_NL_CTYPE_HASH_LAYERS)].word; -#endif - - result = wc % hash_size; - for (cnt = 0; cnt < hash_layers; ++cnt) - { - if (__ctype_names[result] == wc) - break; - result += hash_size; - } - - return cnt < hash_layers ? result : ~((size_t) 0); -} diff --git a/wctype/iswctype.c b/wctype/iswctype.c index 60475d0..82d7ad1 100644 --- a/wctype/iswctype.c +++ b/wctype/iswctype.c @@ -20,36 +20,17 @@ #include #include -#include "cname-lookup.h" #include "wchar-lookup.h" -extern unsigned int *__ctype32_b; - - int __iswctype (wint_t wc, wctype_t desc) { - if (_NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_HASH_SIZE) != 0) - { - /* Old locale format. */ - size_t idx; - - idx = cname_lookup (wc); - if (idx == ~((size_t) 0)) - return 0; - - return __ctype32_b[idx] & desc; - } - else - { - /* If the user passes in an invalid DESC valid (the one returned from - `wctype' in case of an error) simply return 0. */ - if (desc == (wctype_t) 0) - return 0; - - /* New locale format. */ - return wctype_table_lookup ((const char *) desc, wc); - } + /* If the user passes in an invalid DESC valid (the one returned from + `wctype' in case of an error) simply return 0. */ + if (desc == (wctype_t) 0) + return 0; + + return wctype_table_lookup ((const char *) desc, wc); } weak_alias (__iswctype, iswctype) diff --git a/wctype/iswctype_l.c b/wctype/iswctype_l.c index 192001e..3bc25fd 100644 --- a/wctype/iswctype_l.c +++ b/wctype/iswctype_l.c @@ -21,36 +21,16 @@ #include #define USE_IN_EXTENDED_LOCALE_MODEL 1 -#include "cname-lookup.h" #include "wchar-lookup.h" int __iswctype_l (wint_t wc, wctype_t desc, __locale_t locale) { - if (locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_HASH_SIZE)].word != 0) - { - /* Old locale format. */ - const uint32_t *class32_b; - size_t idx; - - idx = cname_lookup (wc, locale); - if (idx == ~((size_t) 0)) - return 0; - - class32_b = (uint32_t *) - locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_CLASS32)].string; - - return class32_b[idx] & desc; - } - else - { - /* If the user passes in an invalid DESC valid (the one returned from - `__wctype_l' in case of an error) simply return 0. */ - if (desc == (wctype_t) 0) - return 0; - - /* New locale format. */ - return wctype_table_lookup ((const char *) desc, wc); - } + /* If the user passes in an invalid DESC valid (the one returned from + `__wctype_l' in case of an error) simply return 0. */ + if (desc == (wctype_t) 0) + return 0; + + return wctype_table_lookup ((const char *) desc, wc); } diff --git a/wctype/towctrans.c b/wctype/towctrans.c index 498417b..8681447 100644 --- a/wctype/towctrans.c +++ b/wctype/towctrans.c @@ -20,7 +20,6 @@ #include /* Define the lookup function. */ -#include "cname-lookup.h" #include "wchar-lookup.h" wint_t @@ -31,22 +30,6 @@ __towctrans (wint_t wc, wctrans_t desc) if (desc == (wctrans_t) 0) return wc; - if (_NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_HASH_SIZE) != 0) - { - /* Old locale format. */ - size_t idx; - - idx = cname_lookup (wc); - if (idx == ~((size_t) 0)) - /* Character is not known. Default action is to simply return it. */ - return wc; - - return (wint_t) desc[idx]; - } - else - { - /* New locale format. */ - return wctrans_table_lookup ((const char *) desc, wc); - } + return wctrans_table_lookup ((const char *) desc, wc); } weak_alias (__towctrans, towctrans) diff --git a/wctype/towctrans_l.c b/wctype/towctrans_l.c index e362444..ae8f2ac 100644 --- a/wctype/towctrans_l.c +++ b/wctype/towctrans_l.c @@ -21,7 +21,6 @@ /* Define the lookup function. */ #define USE_IN_EXTENDED_LOCALE_MODEL 1 -#include "cname-lookup.h" #include "wchar-lookup.h" wint_t @@ -32,21 +31,5 @@ __towctrans_l (wint_t wc, wctrans_t desc, __locale_t locale) if (desc == (wctrans_t) 0) return wc; - if (locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_HASH_SIZE)].word != 0) - { - /* Old locale format. */ - size_t idx; - - idx = cname_lookup (wc, locale); - if (idx == ~((size_t) 0)) - /* Character is not known. Default action is to simply return it. */ - return wc; - - return (wint_t) desc[idx]; - } - else - { - /* New locale format. */ - return wctrans_table_lookup ((const char *) desc, wc); - } + return wctrans_table_lookup ((const char *) desc, wc); } diff --git a/wctype/wcextra.c b/wctype/wcextra.c deleted file mode 100644 index 581c680..0000000 --- a/wctype/wcextra.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Additional non standardized wide character classification functions. - Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -#include -#define __NO_WCTYPE 1 -#include - -#include "cname-lookup.h" -#include "wchar-lookup.h" - -/* If the program is compiled without optimization the following declaration - is not visible in the header. */ -extern unsigned int *__ctype32_b; - -/* This is not exported. */ -extern const char *__ctype32_wctype[12]; - -int -(iswblank) (wint_t wc) -{ - if (_NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_HASH_SIZE) != 0) - { - /* Old locale format. */ - size_t idx; - - idx = cname_lookup (wc); - if (idx == ~((size_t) 0)) - return 0; - - return __ctype32_b[idx] & _ISwblank; - } - else - { - /* New locale format. */ - return wctype_table_lookup (__ctype32_wctype[__ISwblank], wc); - } -} diff --git a/wctype/wcextra_l.c b/wctype/wcextra_l.c deleted file mode 100644 index 8fc9c27..0000000 --- a/wctype/wcextra_l.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Additional non standardized wide character classification functions. - Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -#include -#define __NO_WCTYPE 1 -#include - -#define USE_IN_EXTENDED_LOCALE_MODEL 1 -#include "cname-lookup.h" -#include "wchar-lookup.h" - - -int -(__iswblank_l) (wint_t wc, __locale_t locale) -{ - if (locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_HASH_SIZE)].word != 0) - { - /* Old locale format. */ - const uint32_t *class32_b; - size_t idx; - - idx = cname_lookup (wc, locale); - if (idx == ~((size_t) 0)) - return 0; - - class32_b = (uint32_t *) - locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_CLASS32)].string; - - return class32_b[idx] & _ISwbit (__ISwblank); - } - else - { - /* New locale format. */ - size_t i = locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_CLASS_OFFSET)].word + __ISwblank; - const char *desc = locale->__locales[LC_CTYPE]->values[i].string; - return wctype_table_lookup (desc, wc); - } -} diff --git a/wctype/wcfuncs.c b/wctype/wcfuncs.c index ea697c2..bed70b3 100644 --- a/wctype/wcfuncs.c +++ b/wctype/wcfuncs.c @@ -16,20 +16,12 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#define __NO_WCTYPE #include -#include /* For __ctype_tolower and __ctype_toupper. */ +#include -#include "cname-lookup.h" #include "wchar-lookup.h" -/* If the program is compiled without optimization the following declaration - is not visible in the header. */ -extern unsigned int *__ctype32_b; - /* These are not exported. */ -extern const uint32_t *__ctype32_toupper; -extern const uint32_t *__ctype32_tolower; extern const char *__ctype32_wctype[12]; extern const char *__ctype32_wctrans[2]; @@ -39,22 +31,7 @@ extern const char *__ctype32_wctrans[2]; int \ __##name (wint_t wc) \ { \ - if (_NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_HASH_SIZE) != 0) \ - { \ - /* Old locale format. */ \ - size_t idx; \ - \ - idx = cname_lookup (wc); \ - if (idx == ~((size_t) 0)) \ - return 0; \ - \ - return __ctype32_b[idx] & _ISwbit (type); \ - } \ - else \ - { \ - /* New locale format. */ \ - return wctype_table_lookup (__ctype32_wctype[type], wc); \ - } \ + return wctype_table_lookup (__ctype32_wctype[type], wc); \ } \ weak_alias (__##name, name) @@ -62,6 +39,8 @@ extern const char *__ctype32_wctrans[2]; func (iswalnum, __ISwalnum) #undef iswalpha func (iswalpha, __ISwalpha) +#undef iswblank +func (iswblank, __ISwblank) #undef iswcntrl func (iswcntrl, __ISwcntrl) #undef iswdigit @@ -85,44 +64,12 @@ wint_t (towlower) (wc) wint_t wc; { - if (_NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_HASH_SIZE) != 0) - { - /* Old locale format. */ - size_t idx; - - idx = cname_lookup (wc); - if (idx == ~((size_t) 0)) - /* Character is not known. Default action is to simply return it. */ - return wc; - - return (wint_t) __ctype32_tolower[idx]; - } - else - { - /* New locale format. */ - return wctrans_table_lookup (__ctype32_wctrans[__TOW_tolower], wc); - } + return wctrans_table_lookup (__ctype32_wctrans[__TOW_tolower], wc); } wint_t (towupper) (wc) wint_t wc; { - if (_NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_HASH_SIZE) != 0) - { - /* Old locale format. */ - size_t idx; - - idx = cname_lookup (wc); - if (idx == ~((size_t) 0)) - /* Character is not known. Default action is to simply return it. */ - return wc; - - return (wint_t) __ctype32_toupper[idx]; - } - else - { - /* New locale format. */ - return wctrans_table_lookup (__ctype32_wctrans[__TOW_toupper], wc); - } + return wctrans_table_lookup (__ctype32_wctrans[__TOW_toupper], wc); } diff --git a/wctype/wcfuncs_l.c b/wctype/wcfuncs_l.c index 5ef543c..a552895 100644 --- a/wctype/wcfuncs_l.c +++ b/wctype/wcfuncs_l.c @@ -16,12 +16,11 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#define __NO_WCTYPE #include #include +#include #define USE_IN_EXTENDED_LOCALE_MODEL -#include "cname-lookup.h" #include "wchar-lookup.h" /* Provide real-function versions of all the wctype macros. */ @@ -29,32 +28,14 @@ #define func(name, type) \ int name (wint_t wc, __locale_t locale) \ { \ - if (locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_HASH_SIZE)].word != 0) \ - { \ - /* Old locale format. */ \ - const uint32_t *class32_b; \ - size_t idx; \ - \ - idx = cname_lookup (wc, locale); \ - if (idx == ~((size_t) 0)) \ - return 0; \ - \ - class32_b = (uint32_t *) \ - locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_CLASS32)].string; \ - \ - return class32_b[idx] & _ISwbit (type); \ - } \ - else \ - { \ - /* New locale format. */ \ - size_t i = locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_CLASS_OFFSET)].word + type; \ - const char *desc = locale->__locales[LC_CTYPE]->values[i].string; \ - return wctype_table_lookup (desc, wc); \ - } \ + size_t i = locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_CLASS_OFFSET)].word + type; \ + const char *desc = locale->__locales[LC_CTYPE]->values[i].string; \ + return wctype_table_lookup (desc, wc); \ } func (__iswalnum_l, __ISwalnum) func (__iswalpha_l, __ISwalpha) +func (__iswblank_l, __ISwblank) func (__iswcntrl_l, __ISwcntrl) func (__iswdigit_l, __ISwdigit) func (__iswlower_l, __ISwlower) @@ -68,53 +49,15 @@ func (__iswxdigit_l, __ISwxdigit) wint_t (__towlower_l) (wint_t wc, __locale_t locale) { - if (locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_HASH_SIZE)].word != 0) - { - /* Old locale format. */ - const int32_t *class32_tolower; - size_t idx; - - idx = cname_lookup (wc, locale); - if (idx == ~((size_t) 0)) - return 0; - - class32_tolower = (const int32_t *) - locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_TOLOWER32)].string; - - return class32_tolower[idx]; - } - else - { - /* New locale format. */ - size_t i = locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_MAP_OFFSET)].word + __TOW_tolower; - const char *desc = locale->__locales[LC_CTYPE]->values[i].string; - return wctrans_table_lookup (desc, wc); - } + size_t i = locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_MAP_OFFSET)].word + __TOW_tolower; + const char *desc = locale->__locales[LC_CTYPE]->values[i].string; + return wctrans_table_lookup (desc, wc); } wint_t (__towupper_l) (wint_t wc, __locale_t locale) { - if (locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_HASH_SIZE)].word != 0) - { - /* Old locale format. */ - const int32_t *class32_toupper; - size_t idx; - - idx = cname_lookup (wc, locale); - if (idx == ~((size_t) 0)) - return 0; - - class32_toupper = (const int32_t *) - locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_TOUPPER32)].string; - - return class32_toupper[idx]; - } - else - { - /* New locale format. */ - size_t i = locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_MAP_OFFSET)].word + __TOW_toupper; - const char *desc = locale->__locales[LC_CTYPE]->values[i].string; - return wctrans_table_lookup (desc, wc); - } + size_t i = locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_MAP_OFFSET)].word + __TOW_toupper; + const char *desc = locale->__locales[LC_CTYPE]->values[i].string; + return wctrans_table_lookup (desc, wc); } diff --git a/wctype/wchar-lookup.h b/wctype/wchar-lookup.h index 1d08492..6941d21 100644 --- a/wctype/wchar-lookup.h +++ b/wctype/wchar-lookup.h @@ -17,9 +17,11 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include + /* Tables indexed by a wide character are compressed through the use of a multi-level lookup. The compression effect comes from blocks - that don't need particular data and from block that can share their + that don't need particular data and from blocks that can share their data. */ /* Bit tables are accessed by cutting wc in four blocks of bits: diff --git a/wctype/wctrans.c b/wctype/wctrans.c index 6c61c0b..c35fe0e 100644 --- a/wctype/wctrans.c +++ b/wctype/wctrans.c @@ -17,21 +17,17 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include #include #include #include #include "../locale/localeinfo.h" -/* These are not exported. */ -extern const uint32_t *__ctype32_toupper; -extern const uint32_t *__ctype32_tolower; - wctrans_t wctrans (const char *property) { const char *names; size_t cnt; + size_t i; names = _NL_CURRENT (LC_CTYPE, _NL_CTYPE_MAP_NAMES); cnt = 0; @@ -47,21 +43,6 @@ wctrans (const char *property) if (names[0] == '\0') return 0; - if (_NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_HASH_SIZE) != 0) - { - /* Old locale format. */ - if (cnt == __TOW_toupper) - return (wctrans_t) __ctype32_toupper; - else if (cnt == __TOW_tolower) - return (wctrans_t) __ctype32_tolower; - - /* We have to search the table. */ - return (wctrans_t) (const int32_t *) _NL_CURRENT (LC_CTYPE, _NL_NUM_LC_CTYPE + cnt - 2); - } - else - { - /* New locale format. */ - size_t i = _NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_MAP_OFFSET) + cnt; - return (wctrans_t) _nl_current_LC_CTYPE->values[i].string; - } + i = _NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_MAP_OFFSET) + cnt; + return (wctrans_t) _nl_current_LC_CTYPE->values[i].string; } diff --git a/wctype/wctrans_l.c b/wctype/wctrans_l.c index 3b8b605..94e2451 100644 --- a/wctype/wctrans_l.c +++ b/wctype/wctrans_l.c @@ -25,6 +25,7 @@ __wctrans_l (const char *property, __locale_t locale) { const char *names; size_t cnt; + size_t i; names = locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_MAP_NAMES)].string; cnt = 0; @@ -40,21 +41,6 @@ __wctrans_l (const char *property, __locale_t locale) if (names[0] == '\0') return 0; - if (locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_HASH_SIZE)].word == 0) - { - /* Old locale format. */ - if (cnt == __TOW_toupper) - return (wctrans_t) locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_TOUPPER32)].string; - else if (cnt == __TOW_tolower) - return (wctrans_t) locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_TOLOWER32)].string; - - /* We have to search the table. */ - return (wctrans_t) (const int32_t *) locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_NUM_LC_CTYPE + cnt - 2)].string; - } - else - { - /* New locale format. */ - size_t i = locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_MAP_OFFSET)].word + cnt; - return (wctrans_t) locale->__locales[LC_CTYPE]->values[i].string; - } + i = locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_MAP_OFFSET)].word + cnt; + return (wctrans_t) locale->__locales[LC_CTYPE]->values[i].string; } diff --git a/wctype/wctype.c b/wctype/wctype.c index 476707c..7f2112e 100644 --- a/wctype/wctype.c +++ b/wctype/wctype.c @@ -28,6 +28,7 @@ __wctype (const char *property) const char *names; unsigned int result; size_t proplen = strlen (property); + size_t i; names = _NL_CURRENT (LC_CTYPE, _NL_CTYPE_CLASS_NAMES); for (result = 0; ; result++) @@ -42,22 +43,7 @@ __wctype (const char *property) return 0; } - if (_NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_HASH_SIZE) != 0) - { - /* Old locale format. */ -#if __BYTE_ORDER == __BIG_ENDIAN - return 1 << result; -#else -# define SWAPU32(w) \ - (((w) << 24) | (((w) & 0xff00) << 8) | (((w) >> 8) & 0xff00) | ((w) >> 24)) - return 1 << (result ^ 0x18); /* = SWAPU32 (1 << result); */ -#endif - } - else - { - /* New locale format. */ - size_t i = _NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_CLASS_OFFSET) + result; - return (wctype_t) _nl_current_LC_CTYPE->values[i].string; - } + i = _NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_CLASS_OFFSET) + result; + return (wctype_t) _nl_current_LC_CTYPE->values[i].string; } weak_alias (__wctype, wctype) diff --git a/wctype/wctype_l.c b/wctype/wctype_l.c index fdbd1ff..72d7965 100644 --- a/wctype/wctype_l.c +++ b/wctype/wctype_l.c @@ -28,6 +28,7 @@ __wctype_l (const char *property, __locale_t locale) const char *names; unsigned int result; size_t proplen = strlen (property); + size_t i; names = locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_CLASS_NAMES)].string; for (result = 0; ; result++) @@ -42,21 +43,6 @@ __wctype_l (const char *property, __locale_t locale) return 0; } - if (locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_HASH_SIZE)].word == 0) - { - /* Old locale format. */ -#if __BYTE_ORDER == __BIG_ENDIAN - return 1 << result; -#else -# define SWAPU32(w) \ - (((w) << 24) | (((w) & 0xff00) << 8) | (((w) >> 8) & 0xff00) | ((w) >> 24)) - return 1 << (result ^ 0x18); /* = SWAPU32 (1 << result); */ -#endif - } - else - { - /* New locale format. */ - size_t i = locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_CLASS_OFFSET)].word + result; - return (wctype_t) locale->__locales[LC_CTYPE]->values[i].string; - } + i = locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_CLASS_OFFSET)].word + result; + return (wctype_t) locale->__locales[LC_CTYPE]->values[i].string; } -- cgit v1.1