| /*************************************************************************** |
| * |
| * ctype.cpp - source for the C++ Standard Library ctype facets |
| * |
| * $Id$ |
| * |
| *************************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed |
| * with this work for additional information regarding copyright |
| * ownership. The ASF licenses this file to you under the Apache |
| * License, Version 2.0 (the "License"); you may not use this file |
| * except in compliance with the License. You may obtain a copy of |
| * the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or |
| * implied. See the License for the specific language governing |
| * permissions and limitations under the License. |
| * |
| * Copyright 2001-2006 Rogue Wave Software. |
| * |
| **************************************************************************/ |
| |
| #define _RWSTD_LIB_SRC |
| |
| #include <rw/_defs.h> |
| |
| #include <ctype.h> |
| #include <limits.h> |
| #include <locale.h> |
| #include <wctype.h> |
| #include <string.h> // for memset() |
| |
| #include <loc/_ctype.h> |
| #include <loc/_locale.h> |
| #include <loc/_localedef.h> |
| |
| #include "access.h" |
| #include "setlocale.h" |
| #include "use_facet.h" |
| |
| |
| _RWSTD_NAMESPACE (__rw) { |
| |
| // table of character classes |
| extern const _STD::ctype_base::mask |
| __rw_classic_tab [_STD::ctype<char>::table_size] = { |
| |
| #undef MASK |
| #define MASK(x) _STD::ctype_base::mask (x) |
| |
| #undef LETTER |
| #define LETTER(m) MASK (__rw_print | __rw_alpha | __rw_graph | m) |
| |
| #if 'A' == 0x41 |
| |
| /* 0x00 */ __rw_cntrl, |
| /* 0x01 */ __rw_cntrl, |
| /* 0x02 */ __rw_cntrl, |
| /* 0x03 */ __rw_cntrl, |
| /* 0x04 */ __rw_cntrl, |
| /* 0x05 */ __rw_cntrl, |
| /* 0x06 */ __rw_cntrl, |
| /* 0x07 */ __rw_cntrl, |
| /* 0x08 */ __rw_cntrl, |
| /* 0x09 */ MASK (__rw_space | __rw_cntrl), |
| /* 0x0a */ MASK (__rw_space | __rw_cntrl), |
| /* 0x0b */ MASK (__rw_space | __rw_cntrl), |
| /* 0x0c */ MASK (__rw_space | __rw_cntrl), |
| /* 0x0d */ MASK (__rw_space | __rw_cntrl), |
| /* 0x0e */ __rw_cntrl, |
| /* 0x0f */ __rw_cntrl, |
| /* 0x10 */ __rw_cntrl, |
| /* 0x11 */ __rw_cntrl, |
| /* 0x12 */ __rw_cntrl, |
| /* 0x13 */ __rw_cntrl, |
| /* 0x14 */ __rw_cntrl, |
| /* 0x15 */ __rw_cntrl, |
| /* 0x16 */ __rw_cntrl, |
| /* 0x17 */ __rw_cntrl, |
| /* 0x18 */ __rw_cntrl, |
| /* 0x19 */ __rw_cntrl, |
| /* 0x1a */ __rw_cntrl, |
| /* 0x1b */ __rw_cntrl, |
| /* 0x1c */ __rw_cntrl, |
| /* 0x1d */ __rw_cntrl, |
| /* 0x1e */ __rw_cntrl, |
| /* 0x1f */ __rw_cntrl, |
| /* ' ' */ MASK (__rw_space | __rw_print), |
| /* '!' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '"' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '#' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '$' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '%' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '&' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '\'' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '(' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* ')' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '*' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '+' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* ',' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '-' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '.' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '/' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '0' */ MASK (__rw_print | __rw_digit | __rw_graph | __rw_xdigit), |
| /* '1' */ MASK (__rw_print | __rw_digit | __rw_graph | __rw_xdigit), |
| /* '2' */ MASK (__rw_print | __rw_digit | __rw_graph | __rw_xdigit), |
| /* '3' */ MASK (__rw_print | __rw_digit | __rw_graph | __rw_xdigit), |
| /* '4' */ MASK (__rw_print | __rw_digit | __rw_graph | __rw_xdigit), |
| /* '5' */ MASK (__rw_print | __rw_digit | __rw_graph | __rw_xdigit), |
| /* '6' */ MASK (__rw_print | __rw_digit | __rw_graph | __rw_xdigit), |
| /* '7' */ MASK (__rw_print | __rw_digit | __rw_graph | __rw_xdigit), |
| /* '8' */ MASK (__rw_print | __rw_digit | __rw_graph | __rw_xdigit), |
| /* '9' */ MASK (__rw_print | __rw_digit | __rw_graph | __rw_xdigit), |
| /* ':' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* ';' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '<' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '=' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '>' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '?' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '@' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| |
| /* 'A' */ LETTER (__rw_upper | __rw_xdigit), |
| /* 'B' */ LETTER (__rw_upper | __rw_xdigit), |
| /* 'C' */ LETTER (__rw_upper | __rw_xdigit), |
| /* 'D' */ LETTER (__rw_upper | __rw_xdigit), |
| /* 'E' */ LETTER (__rw_upper | __rw_xdigit), |
| /* 'F' */ LETTER (__rw_upper | __rw_xdigit), |
| /* 'G' */ LETTER (__rw_upper), |
| /* 'H' */ LETTER (__rw_upper), |
| /* 'I' */ LETTER (__rw_upper), |
| /* 'J' */ LETTER (__rw_upper), |
| /* 'K' */ LETTER (__rw_upper), |
| /* 'L' */ LETTER (__rw_upper), |
| /* 'M' */ LETTER (__rw_upper), |
| /* 'N' */ LETTER (__rw_upper), |
| /* 'O' */ LETTER (__rw_upper), |
| /* 'P' */ LETTER (__rw_upper), |
| /* 'Q' */ LETTER (__rw_upper), |
| /* 'R' */ LETTER (__rw_upper), |
| /* 'S' */ LETTER (__rw_upper), |
| /* 'T' */ LETTER (__rw_upper), |
| /* 'U' */ LETTER (__rw_upper), |
| /* 'V' */ LETTER (__rw_upper), |
| /* 'W' */ LETTER (__rw_upper), |
| /* 'X' */ LETTER (__rw_upper), |
| /* 'Y' */ LETTER (__rw_upper), |
| /* 'Z' */ LETTER (__rw_upper), |
| /* '[' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '\\' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* ']' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '^' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '_' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '`' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* 'a' */ LETTER (__rw_lower | __rw_xdigit), |
| /* 'b' */ LETTER (__rw_lower | __rw_xdigit), |
| /* 'c' */ LETTER (__rw_lower | __rw_xdigit), |
| /* 'd' */ LETTER (__rw_lower | __rw_xdigit), |
| /* 'e' */ LETTER (__rw_lower | __rw_xdigit), |
| /* 'f' */ LETTER (__rw_lower | __rw_xdigit), |
| /* 'g' */ LETTER (__rw_lower), |
| /* 'h' */ LETTER (__rw_lower), |
| /* 'i' */ LETTER (__rw_lower), |
| /* 'j' */ LETTER (__rw_lower), |
| /* 'k' */ LETTER (__rw_lower), |
| /* 'l' */ LETTER (__rw_lower), |
| /* 'm' */ LETTER (__rw_lower), |
| /* 'n' */ LETTER (__rw_lower), |
| /* 'o' */ LETTER (__rw_lower), |
| /* 'p' */ LETTER (__rw_lower), |
| /* 'q' */ LETTER (__rw_lower), |
| /* 'r' */ LETTER (__rw_lower), |
| /* 's' */ LETTER (__rw_lower), |
| /* 't' */ LETTER (__rw_lower), |
| /* 'u' */ LETTER (__rw_lower), |
| /* 'v' */ LETTER (__rw_lower), |
| /* 'w' */ LETTER (__rw_lower), |
| /* 'x' */ LETTER (__rw_lower), |
| /* 'y' */ LETTER (__rw_lower), |
| /* 'z' */ LETTER (__rw_lower), |
| /* '{' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '|' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '}' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '~' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* 0x7f */ __rw_cntrl |
| |
| #elif 'A' == 0xc1 |
| |
| /* NUL */ __rw_cntrl, |
| /* SOH */ __rw_cntrl, |
| /* STX */ __rw_cntrl, |
| /* ETX */ __rw_cntrl, |
| /* PF */ __rw_cntrl, |
| /* HT */ __rw_cntrl, |
| /* LC */ __rw_cntrl, |
| /* DEL */ __rw_cntrl, |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* SMM */ __rw_cntrl, |
| /* VT */ __rw_cntrl, |
| /* FF */ __rw_cntrl, |
| /* CR */ __rw_cntrl, |
| /* SO */ __rw_cntrl, |
| /* SI */ __rw_cntrl, |
| /* DLE */ __rw_cntrl, |
| /* DC1 */ __rw_cntrl, |
| /* DC2 */ __rw_cntrl, |
| /* TM */ __rw_cntrl, |
| /* RES */ __rw_cntrl, |
| /* NL */ __rw_cntrl, |
| /* BS */ __rw_cntrl, |
| /* IL */ __rw_cntrl, |
| /* CAN */ __rw_cntrl, |
| /* EM */ __rw_cntrl, |
| /* CC */ __rw_cntrl, |
| /* CU1 */ __rw_cntrl, |
| /* IFS */ __rw_cntrl, |
| /* IGS */ __rw_cntrl, |
| /* IRS */ __rw_cntrl, |
| /* IUS */ __rw_cntrl, |
| /* DS */ __rw_cntrl, |
| /* SOS */ __rw_cntrl, |
| /* FS */ __rw_cntrl, |
| /* */ MASK (0), |
| /* BYP */ __rw_cntrl, |
| /* LF */ __rw_cntrl, |
| /* ETB */ __rw_cntrl, |
| /* ESC */ __rw_cntrl, |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* SM */ __rw_cntrl, |
| /* CU2 */ __rw_cntrl, |
| /* */ MASK (0), |
| /* ENQ */ __rw_cntrl, |
| /* ACK */ __rw_cntrl, |
| /* BEL */ __rw_cntrl, |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* SYN */ __rw_cntrl, |
| /* */ MASK (0), |
| /* PN */ __rw_cntrl, |
| /* RS */ __rw_cntrl, |
| /* UC */ __rw_cntrl, |
| /* EOT */ __rw_cntrl, |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* CU3 */ __rw_cntrl, |
| /* DC4 */ __rw_cntrl, |
| /* NAK */ __rw_cntrl, |
| /* */ MASK (0), |
| /* SUB */ __rw_cntrl, |
| /* SP */ __rw_cntrl, |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* ct. */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '.' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '<' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '(' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '+' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '|' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '&' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* '!' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '$' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '*' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* ')' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* ';' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '~' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '-' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '/' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* ',' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '%' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '_' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '>' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '?' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* ':' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '#' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '@' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* ''' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '=' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* '"' */ MASK (__rw_print | __rw_punct | __rw_graph), |
| /* */ MASK (0), |
| /* 'a' */ LETTER (__rw_lower | __rw_xdigit), |
| /* 'b' */ LETTER (__rw_lower | __rw_xdigit), |
| /* 'c' */ LETTER (__rw_lower | __rw_xdigit), |
| /* 'd' */ LETTER (__rw_lower | __rw_xdigit), |
| /* 'e' */ LETTER (__rw_lower | __rw_xdigit), |
| /* 'f' */ LETTER (__rw_lower | __rw_xdigit), |
| /* 'g' */ LETTER (__rw_lower), |
| /* 'h' */ LETTER (__rw_lower), |
| /* 'i' */ LETTER (__rw_lower), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* 'j' */ LETTER (__rw_lower), |
| /* 'k' */ LETTER (__rw_lower), |
| /* 'l' */ LETTER (__rw_lower), |
| /* 'm' */ LETTER (__rw_lower), |
| /* 'n' */ LETTER (__rw_lower), |
| /* 'o' */ LETTER (__rw_lower), |
| /* 'p' */ LETTER (__rw_lower), |
| /* 'q' */ LETTER (__rw_lower), |
| /* 'r' */ LETTER (__rw_lower), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* 's' */ LETTER (__rw_lower), |
| /* 't' */ LETTER (__rw_lower), |
| /* 'u' */ LETTER (__rw_lower), |
| /* 'v' */ LETTER (__rw_lower), |
| /* 'w' */ LETTER (__rw_lower), |
| /* 'x' */ LETTER (__rw_lower), |
| /* 'y' */ LETTER (__rw_lower), |
| /* 'z' */ LETTER (__rw_lower), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* '`' */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* 'A' */ LETTER (__rw_upper | __rw_xdigit), |
| /* 'B' */ LETTER (__rw_upper | __rw_xdigit), |
| /* 'C' */ LETTER (__rw_upper | __rw_xdigit), |
| /* 'D' */ LETTER (__rw_upper | __rw_xdigit), |
| /* 'E' */ LETTER (__rw_upper | __rw_xdigit), |
| /* 'F' */ LETTER (__rw_upper | __rw_xdigit), |
| /* 'G' */ LETTER (__rw_upper), |
| /* 'H' */ LETTER (__rw_upper), |
| /* 'I' */ LETTER (__rw_upper), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* 'J' */ LETTER (__rw_upper), |
| /* 'K' */ LETTER (__rw_upper), |
| /* 'L' */ LETTER (__rw_upper), |
| /* 'M' */ LETTER (__rw_upper), |
| /* 'N' */ LETTER (__rw_upper), |
| /* 'O' */ LETTER (__rw_upper), |
| /* 'P' */ LETTER (__rw_upper), |
| /* 'Q' */ LETTER (__rw_upper), |
| /* 'R' */ LETTER (__rw_upper), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* 'S' */ LETTER (__rw_upper), |
| /* 'T' */ LETTER (__rw_upper), |
| /* 'U' */ LETTER (__rw_upper), |
| /* 'V' */ LETTER (__rw_upper), |
| /* 'W' */ LETTER (__rw_upper), |
| /* 'X' */ LETTER (__rw_upper), |
| /* 'Y' */ LETTER (__rw_upper), |
| /* 'Z' */ LETTER (__rw_upper), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* '0' */ MASK (__rw_print | __rw_digit | __rw_graph | __rw_xdigit), |
| /* '1' */ MASK (__rw_print | __rw_digit | __rw_graph | __rw_xdigit), |
| /* '2' */ MASK (__rw_print | __rw_digit | __rw_graph | __rw_xdigit), |
| /* '3' */ MASK (__rw_print | __rw_digit | __rw_graph | __rw_xdigit), |
| /* '4' */ MASK (__rw_print | __rw_digit | __rw_graph | __rw_xdigit), |
| /* '5' */ MASK (__rw_print | __rw_digit | __rw_graph | __rw_xdigit), |
| /* '6' */ MASK (__rw_print | __rw_digit | __rw_graph | __rw_xdigit), |
| /* '7' */ MASK (__rw_print | __rw_digit | __rw_graph | __rw_xdigit), |
| /* '8' */ MASK (__rw_print | __rw_digit | __rw_graph | __rw_xdigit), |
| /* '9' */ MASK (__rw_print | __rw_digit | __rw_graph | __rw_xdigit), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0), |
| /* */ MASK (0) |
| |
| #else // 'A' != 0x41 && 'A' != 0xc1 |
| # error unknown character set (neither ASCII nor EBCDIC) |
| #endif // ASCII or EBCDIC |
| |
| }; |
| |
| |
| // table of lowercase to uppercase character mappings |
| extern const unsigned char |
| __rw_upper_tab [_STD::ctype<char>::table_size + 1] = { |
| |
| #if 'A' == 0x41 |
| |
| // basic ASCII: |
| // .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .a .b .c .d .e .f |
| // --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- |
| // NUL SOH STX ETX EOT ENQ ACK BEL BS TAB LF VT FF CR SO SI |
| /* 0. */ "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f" |
| // DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US |
| /* 1. */ "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f" |
| // SPC ! " # $ % ' ' ( ) * + , - . / |
| /* 2. */ "\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f" |
| // 0 1 2 3 4 5 6 7 8 9 : ; < = > ? |
| /* 3. */ "\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f" |
| // A B C D E F G H I J K L M N O |
| /* 4. */ "\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f" |
| // P Q R S T U V W X Y Z [ \ ] ^ _ |
| /* 5. */ "\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f" |
| // ` a b c d e f g h i j k l m n o |
| /* 6. */ "\x60\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f" |
| // p q r s t u v w x y z { | } ~ DEL |
| /* 7. */ "\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x7b\x7c\x7d\x7e\x7f" |
| |
| // extended ASCII: |
| /* 8. */ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f" |
| /* 9. */ "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f" |
| /* a. */ "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf" |
| /* b. */ "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf" |
| /* c. */ "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf" |
| /* d. */ "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf" |
| /* e. */ "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef" |
| /* f. */ "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff" |
| |
| #elif 'A' == 0xc1 |
| |
| // EBCDIC: |
| // .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .a .b .c .d .e .f |
| // --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- |
| // NUL SOH STX ETX PF HT LC DEL SMM VT FF CR SO SI |
| /* 0. */ "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f" |
| // DLE DC1 DC2 TM RES NL BS IL CAN EM CC CU1 IFS IGS IRS IUS |
| /* 1. */ "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f" |
| // DS SOS FS BYP LF ETB ESC SM CU2 ENQ ACK BEL |
| /* 2. */ "\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f" |
| // SYN PN RS UC EOT CU3 DC4 NAK SUB |
| /* 3. */ "\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f" |
| // SP ct. . < ( + | |
| /* 4. */ "\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f" |
| // & ! $ * ) ; ~ |
| /* 5. */ "\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f" |
| // - / , % _ > ? |
| /* 6. */ "\x60\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f" |
| // : # @ ' = " |
| /* 7. */ "\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f" |
| // a b c d e f g h i |
| /* 8. */ "\x80\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\x8a\x8b\x8c\x8d\x8e\x8f" |
| // j k l m n o p q r |
| /* 9. */ "\x90\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\x9a\x9b\x9c\x9d\x9e\x9f" |
| // s t u v w x y z |
| /* a. */ "\xa0\xa1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xaa\xab\xac\xad\xae\xaf" |
| // ` |
| /* b. */ "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf" |
| // A B C D E F G H I |
| /* c. */ "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf" |
| // J K L M N O P Q R |
| /* d. */ "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf" |
| // S T U V W X Y Z |
| /* e. */ "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef" |
| // 0 1 2 3 4 5 6 7 8 9 |
| /* f. */ "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff" |
| |
| #else // 'A' != 0x41 && 'A' != 0xc1 |
| # error unknown character set (neither ASCII nor EBCDIC) |
| #endif // ASCII or EBCDIC |
| |
| }; |
| |
| |
| // table of uppercase to lowercase character mappings |
| extern const unsigned char |
| __rw_lower_tab [_STD::ctype<char>::table_size + 1] = { |
| |
| #if 'A' == 0x41 |
| |
| // basic ASCII: |
| // .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .a .b .c .d .e .f |
| // --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- |
| // NUL SOH STX ETX EOT ENQ ACK BEL BS TAB LF VT FF CR SO SI |
| /* 0. */ "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f" |
| // DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US |
| /* 1. */ "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f" |
| // SPC ! " # $ % ' ' ( ) * + , - . / |
| /* 2. */ "\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f" |
| // 0 1 2 3 4 5 6 7 8 9 : ; < = > ? |
| /* 3. */ "\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f" |
| // A B C D E F G H I J K L M N O |
| /* 4. */ "\x40\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f" |
| // P Q R S T U V W X Y Z [ \ ] ^ _ |
| /* 5. */ "\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x5b\x5c\x5d\x5e\x5f" |
| // ` a b c d e f g h i j k l m n o |
| /* 6. */ "\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f" |
| // p q r s t u v w x y z { | } ~ DEL |
| /* 7. */ "\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f" |
| |
| // extended ASCII: |
| /* 8. */ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f" |
| /* 9. */ "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f" |
| /* a. */ "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf" |
| /* b. */ "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf" |
| /* c. */ "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf" |
| /* d. */ "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf" |
| /* e. */ "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef" |
| /* f. */ "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff" |
| |
| #elif 'A' == 0xc1 |
| |
| // EBCDIC: |
| // .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .a .b .c .d .e .f |
| // --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- |
| // NUL SOH STX ETX PF HT LC DEL SMM VT FF CR SO SI |
| /* 0. */ "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f" |
| // DLE DC1 DC2 TM RES NL BS IL CAN EM CC CU1 IFS IGS IRS IUS |
| /* 1. */ "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f" |
| // DS SOS FS BYP LF ETB ESC SM CU2 ENQ ACK BEL |
| /* 2. */ "\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f" |
| // SYN PN RS UC EOT CU3 DC4 NAK SUB |
| /* 3. */ "\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f" |
| // SP ct. . < ( + | |
| /* 4. */ "\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f" |
| // & ! $ * ) ; ~ |
| /* 5. */ "\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f" |
| // - / , % _ > ? |
| /* 6. */ "\x60\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f" |
| // : # @ ' = " |
| /* 7. */ "\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f" |
| // a b c d e f g h i |
| /* 8. */ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f" |
| // j k l m n o p q r |
| /* 9. */ "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f" |
| // s t u v w x y z |
| /* a. */ "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf" |
| // ` |
| /* b. */ "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf" |
| // A B C D E F G H I |
| /* c. */ "\xc0\x81\x82\x83\x84\x85\x86\x87\x88\x89\xca\xcb\xcc\xcd\xce\xcf" |
| // J K L M N O P Q R |
| /* d. */ "\xd0\x91\x92\x93\x94\x95\x96\x97\x98\x99\xda\xdb\xdc\xdd\xde\xdf" |
| // S T U V W X Y Z |
| /* e. */ "\xe0\xe1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xea\xeb\xec\xed\xee\xef" |
| // 0 1 2 3 4 5 6 7 8 9 |
| /* f. */ "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff" |
| |
| #else // 'A' != 0x41 && 'A' != 0xc1 |
| # error unknown character set (neither ASCII nor EBCDIC) |
| #endif // ASCII or EBCDIC |
| |
| }; |
| |
| |
| _RWSTD_EXPORT __rw_facet::_C_ctor_t __rw_ct_ctype; |
| |
| _RWSTD_EXPORT __rw_facet* __rw_ct_ctype (_RWSTD_SIZE_T ref, const char *name) |
| { |
| __rw_facet* pfacet; |
| |
| if (name) { |
| pfacet = new _STD::ctype_byname<char>(name, ref); |
| } |
| else { |
| static union { |
| void *align_; |
| char data_ [sizeof (_STD::ctype<char>)]; |
| } f; |
| static __rw_facet* const pf = |
| new (&f) _STD::ctype<char>(__rw_classic_tab, false, ref); |
| pfacet = pf; |
| } |
| |
| // set the pointer to the facet id |
| __rw_access::_C_get_pid (*pfacet) = |
| &(__rw_access::_C_get_id (_STD::ctype<char>::id)); |
| |
| return pfacet; |
| } |
| |
| |
| } // namespace __rw |
| |
| |
| typedef _STD::ctype<char> __rw_ctype_facet; |
| |
| _RWSTD_SPECIALIZE_USE_FACET (ctype); |
| |
| |
| _RWSTD_NAMESPACE (std) { |
| |
| |
| _RW::__rw_facet_id ctype<char>::id; |
| |
| |
| ctype<char>::ctype (const mask *tab, bool del, _RWSTD_SIZE_T refs) |
| : _RW::__rw_facet (refs), |
| _C_mask_tab (tab), |
| _C_delete_it (del) |
| { |
| // Save the passed table of mask values. |
| if (!_C_mask_tab) { |
| _C_mask_tab = _RW::__rw_classic_tab; |
| // prevent deletion if `tab' was false and `del' was true |
| _C_delete_it = false; |
| } |
| |
| _C_upper_tab = _RWSTD_CONST_CAST (_UChar*, _RW::__rw_upper_tab); |
| _C_lower_tab = _RWSTD_CONST_CAST (_UChar*, _RW::__rw_lower_tab); |
| |
| memset (_C_narrow_tab, 0, sizeof _C_narrow_tab); |
| memset (_C_wide_tab, 0, sizeof _C_wide_tab); |
| } |
| |
| |
| ctype<char>::~ctype () |
| { |
| if (_C_delete_it) { |
| delete[] _RWSTD_CONST_CAST (mask*, _C_mask_tab); |
| |
| if (_C_upper_tab != _RW::__rw_upper_tab) { |
| // lower_tab is allocated in the same block of memory |
| // as upper_tab and must not be deleted |
| delete[] _C_upper_tab; |
| } |
| } |
| } |
| |
| |
| const ctype<char>::mask* ctype<char>::classic_table () _THROWS (()) |
| { |
| return _RW::__rw_classic_tab; |
| } |
| |
| |
| const ctype<char>::char_type* |
| ctype<char>:: |
| is (const char_type *lo, const char_type *hi, mask *vec) const |
| { |
| _RWSTD_ASSERT (lo <= hi); |
| _RWSTD_ASSERT (!hi || (lo && vec)); |
| _RWSTD_ASSERT (lo == hi || table ()); |
| |
| while (lo < hi) { |
| // follows lwg 28 |
| *vec++ = table ()[_UChar (*lo++)]; |
| } |
| return hi; |
| } |
| |
| |
| const ctype<char>::char_type* |
| ctype<char>:: |
| scan_is (mask m, const char_type *lo, const char_type *hi) const |
| { |
| _RWSTD_ASSERT (lo <= hi); |
| _RWSTD_ASSERT (!hi || lo); |
| _RWSTD_ASSERT (lo == hi || table ()); |
| |
| while (lo != hi && !(table ()[_UChar (*lo)] & m)) |
| ++lo; |
| |
| return lo; |
| } |
| |
| |
| const ctype<char>::char_type* |
| ctype<char>:: |
| scan_not (mask m, const char_type *lo, const char_type *hi) const |
| { |
| _RWSTD_ASSERT (lo <= hi); |
| _RWSTD_ASSERT (!hi || lo); |
| _RWSTD_ASSERT (lo == hi || table ()); |
| |
| while (lo != hi && (table ()[_UChar (*lo)] & m)) |
| ++lo; |
| |
| return lo; |
| } |
| |
| |
| /* virtual */ ctype<char>::char_type |
| ctype<char>:: |
| do_toupper (char_type ch) const |
| { |
| #if _RWSTD_UCHAR_MAX <= 255 |
| return _C_upper_tab [_UChar (ch)]; |
| #else |
| return ch < table_size ? _C_upper_tab [_UChar (ch)] : ch; |
| #endif |
| } |
| |
| |
| /* virtual */ const ctype<char>::char_type* |
| ctype<char>:: |
| do_toupper (char_type *lo, const char_type *hi) const |
| { |
| _RWSTD_ASSERT (lo <= hi); |
| _RWSTD_ASSERT (!hi || lo); |
| _RWSTD_ASSERT (lo == hi || _C_upper_tab); |
| |
| for ( ; lo < hi; ++lo) |
| *lo = _C_upper_tab [_UChar (*lo)]; |
| |
| return lo; |
| } |
| |
| |
| /* virtual */ ctype<char>::char_type |
| ctype<char>:: |
| do_tolower (char_type ch) const |
| { |
| #if _RWSTD_UCHAR_MAX <= 255 |
| return _C_lower_tab [_UChar (ch)]; |
| #else |
| return ch < table_size ? _C_lower_tab [_UChar (ch)] : ch; |
| #endif |
| } |
| |
| |
| /* virtual */ const ctype<char>::char_type* |
| ctype<char>:: |
| do_tolower (char_type *lo, const char_type *hi) const |
| { |
| _RWSTD_ASSERT (lo <= hi); |
| _RWSTD_ASSERT (!hi || lo); |
| _RWSTD_ASSERT (lo == hi || _C_lower_tab); |
| |
| for ( ; lo < hi; ++lo) |
| *lo = _C_lower_tab [_UChar (*lo)]; |
| |
| return lo; |
| } |
| |
| |
| /* virtual */ ctype<char>::char_type |
| ctype<char>:: |
| do_widen (char ch) const |
| { |
| #if _RWSTD_UCHAR_MAX <= 255 |
| |
| if (_C_wide_tab [_UChar (ch)]) |
| return _C_wide_tab [_UChar (ch)]; |
| |
| return _RWSTD_CONST_CAST (ctype<char>*, this)-> |
| _C_wide_tab [_UChar (ch)] = char_type (ch); |
| #else |
| return char_type (ch); |
| #endif |
| } |
| |
| |
| /* virtual */ const ctype<char>::char_type* |
| ctype<char>:: |
| do_widen (const char_type* lo, const char_type* hi, char_type* dst) const |
| { |
| _RWSTD_ASSERT (lo <= hi); |
| _RWSTD_ASSERT (!hi || (lo && dst)); |
| |
| ::memcpy (dst, lo, hi - lo); |
| |
| return hi; |
| } |
| |
| |
| /* virtual */ ctype<char>::char_type |
| ctype<char>:: |
| do_narrow (char_type ch, char_type) const |
| { |
| return ch; |
| } |
| |
| |
| /* virtual */ const ctype<char>::char_type* |
| ctype<char>:: |
| do_narrow (const char_type* lo, const char_type* hi, char_type, |
| char_type* dst) const |
| { |
| _RWSTD_ASSERT (lo <= hi); |
| _RWSTD_ASSERT (!hi || (lo && dst)); |
| |
| ::memcpy (dst, lo, hi - lo); |
| |
| return hi; |
| } |
| |
| |
| ctype_byname<char>::ctype_byname (const char *name, _RWSTD_SIZE_T refs) |
| : ctype<char>(0, false, refs) |
| { |
| _RWSTD_ASSERT (0 != name); |
| |
| // the name of the locale must be initialized before we attempt |
| // to initialize the tables |
| this->_C_set_name (name, _C_namebuf, sizeof _C_namebuf); |
| |
| if ('C' == name [0] && '\0' == name [1]) |
| return; |
| |
| // delayed initialization not used for efficiency |
| _RW::__rw_ctype_t* impl = |
| _RWSTD_CONST_CAST (_RW::__rw_ctype_t*, |
| _RWSTD_STATIC_CAST (const _RW::__rw_ctype_t*, |
| _RW::__rw_get_facet_data (LC_CTYPE, _C_impsize, _C_name))); |
| |
| _C_impdata = impl; |
| |
| if (impl == 0 || (this->_C_opts & this->_C_use_libc)) { |
| |
| // try to set locale first for exception safety |
| const _RW::__rw_setlocale clocale (name, LC_CTYPE); |
| |
| // allocate memory for all three tables |
| _C_mask_tab = new mask [table_size]; |
| |
| _TRY { |
| // allocate for both the upper and lower table to avoid |
| // having to allocate twice |
| _C_upper_tab = new unsigned char [table_size * 2]; |
| _C_lower_tab = _C_upper_tab + table_size; |
| |
| // set flag last, after allocation succeeds |
| _C_delete_it = true; |
| } |
| _CATCH (...) { |
| delete[] _RWSTD_CONST_CAST (mask*, _C_mask_tab); |
| _RETHROW; |
| } |
| |
| int i; |
| |
| for (i = 0; i != _RWSTD_UCHAR_MAX + 1; ++i) { |
| |
| int m = 0; |
| |
| if ((::isspace)(i)) |
| m |= _RW::__rw_space; |
| if ((::isprint)(i)) |
| m |= _RW::__rw_print; |
| if ((::iscntrl)(i)) |
| m |= _RW::__rw_cntrl; |
| if ((::isupper)(i)) |
| m |= _RW::__rw_upper; |
| if ((::islower)(i)) |
| m |= _RW::__rw_lower; |
| if ((::isalpha)(i)) |
| m |= _RW::__rw_alpha; |
| if ((::isdigit)(i)) |
| m |= _RW::__rw_digit; |
| if ((::ispunct)(i)) |
| m |= _RW::__rw_punct; |
| if ((::isxdigit)(i)) |
| m |= _RW::__rw_xdigit; |
| if ((::isgraph)(i)) |
| m |= _RW::__rw_graph; |
| |
| _RWSTD_CONST_CAST (mask*, _C_mask_tab)[i] = mask (m); |
| } |
| |
| typedef unsigned char UChar; |
| |
| unsigned char *p; |
| for (p = _C_upper_tab, i = 0; i != _RWSTD_UCHAR_MAX + 1; ++i, ++p) { |
| const int upr = (::toupper)(i); |
| *p = UChar (_RWSTD_EOF == upr ? 0 : upr); |
| } |
| |
| for (p = _C_lower_tab, i = 0; i != _RWSTD_UCHAR_MAX + 1; ++i, ++p) { |
| const int lwr = (::tolower)(i); |
| *p = UChar (_RWSTD_EOF == lwr ? 0 : lwr); |
| } |
| } |
| else { |
| _C_delete_it = false; |
| |
| _C_upper_tab = impl->toupper_tab; |
| _C_lower_tab = impl->tolower_tab; |
| |
| const mask *mask_tab = |
| _RWSTD_REINTERPRET_CAST (const mask*, impl->mask_tab); |
| |
| // verify that mask is the same size |
| _RWSTD_ASSERT (sizeof *mask_tab == sizeof *impl->mask_tab); |
| |
| _C_mask_tab = _RWSTD_CONST_CAST (mask*, mask_tab); |
| } |
| } |
| |
| |
| } // namespace std |