diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2008-12-22 13:51:28 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2008-12-22 13:51:28 +0000 |
commit | 1ad544a2ade2d8adcebc20de065bfafd7cd507a5 (patch) | |
tree | 0372195a1a66e369609fd7c58f65989bb7a269ea /libc/sysdeps/linux/common/bits/uClibc_charclass.h | |
parent | 01b8804866ae879c1657f0eed3816755aaf6e243 (diff) |
UCLIBC_CTYPE_HEADER define is removed, as it always
equal to "include/bits/uClibc_ctype.h"
__CTYPE_unclassified and other similar __CTYPE_xxxx
constants are moved to separate include file,
bits/uClibc_charclass.h
Duplicate declaration of these constants is
removed from libc/misc/wctype/_wctype.c
Ugly re-inclusion trick in extra/locale/gen_wctype.c deleted
Large ifdefed-out chunk in extra/locale/gen_wctype.c removed
Move __CTYPE_isalnum() etc macros from uClibc_ctype.h
to their single user, extra/locale/gen_wctype.c
(can be simplified further)
Overall, no code changes (verified with objdump)
Diffstat (limited to 'libc/sysdeps/linux/common/bits/uClibc_charclass.h')
-rw-r--r-- | libc/sysdeps/linux/common/bits/uClibc_charclass.h | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/libc/sysdeps/linux/common/bits/uClibc_charclass.h b/libc/sysdeps/linux/common/bits/uClibc_charclass.h new file mode 100644 index 000000000..50df539b9 --- /dev/null +++ b/libc/sysdeps/linux/common/bits/uClibc_charclass.h @@ -0,0 +1,40 @@ +/* Copyright (C) 2008 Denys Vlasenko <vda.linux@googlemail.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + */ + +#ifndef _BITS_UCLIBC_CHARCLASS_H +#define _BITS_UCLIBC_CHARCLASS_H + +/* Taking advantage of the C99 mutual-exclusion guarantees for the various + * (w)ctype classes, including the descriptions of printing and control + * (w)chars, we can place each in one of the following mutually-exlusive + * subsets. Since there are less than 16, we can store the data for + * each (w)chars in a nibble. In contrast, glibc uses an unsigned int + * per (w)char, with one bit flag for each is* type. While this allows + * a simple '&' operation to determine the type vs. a range test and a + * little special handling for the "blank" and "xdigit" types in my + * approach, it also uses 8 times the space for the tables on the typical + * 32-bit archs we supported.*/ +enum { + __CTYPE_unclassified = 0, + __CTYPE_alpha_nonupper_nonlower, + __CTYPE_alpha_lower, + __CTYPE_alpha_upper_lower, + __CTYPE_alpha_upper, + __CTYPE_digit, + __CTYPE_punct, + __CTYPE_graph, + __CTYPE_print_space_nonblank, + __CTYPE_print_space_blank, + __CTYPE_space_nonblank_noncntrl, + __CTYPE_space_blank_noncntrl, + __CTYPE_cntrl_space_nonblank, + __CTYPE_cntrl_space_blank, + __CTYPE_cntrl_nonspace +}; + +#endif |