19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/*
29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999
39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Silicon Graphics Computer Systems, Inc.
49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999
69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Boris Fomitchev
79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * This material is provided "as is", with absolutely no warranty expressed
99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * or implied. Any use is at your own risk.
109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to use or copy this software for any purpose is hereby granted
129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * without fee, provided the above notices are retained on all copies.
139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to modify the code and to distribute modified code is granted,
149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * provided the above notices are retained, and a notice that the code was
159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * modified is included with the above copyright notice.
169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// WARNING: This is an internal header file, included by other C++
199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// standard library headers.  You should not attempt to use this header
209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// file directly.
219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_CTYPE_H
239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_INTERNAL_CTYPE_H
249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_C_LOCALE_H
269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  include <stl/c_locale.h>
279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_LOCALE_H
309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  include <stl/_locale.h>
319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_ALGOBASE_H
349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  include <stl/_algobase.h>
359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE
389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _STLP_CLASS_DECLSPEC ctype_base {
409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  enum mask {
429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    space   = _Locale_SPACE,
439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    print   = _Locale_PRINT,
449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    cntrl   = _Locale_CNTRL,
459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    upper   = _Locale_UPPER,
469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    lower   = _Locale_LOWER,
479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    alpha   = _Locale_ALPHA,
489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    digit   = _Locale_DIGIT,
499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    punct   = _Locale_PUNCT,
509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    xdigit  = _Locale_XDIGIT,
519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    alnum   = alpha | digit,
529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    graph   = alnum | punct
539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  };
549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// ctype<> template
579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class charT> class ctype {};
599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class charT> class ctype_byname {};
609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//ctype specializations
629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TEMPLATE_NULL
649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _STLP_CLASS_DECLSPEC ctype<char> : public locale::facet, public ctype_base {
659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_NO_WCHAR_T
669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  ifdef _STLP_MSVC
679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typedef ctype<wchar_t> _Wctype;
689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    friend _Wctype;
699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  else
709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    friend class ctype<wchar_t>;
719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef char char_type;
769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit ctype(const mask* __tab = 0, bool __del = false, size_t __refs = 0);
789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  bool is(mask __m, char __c) const
799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return ((*(_M_ctype_table+(unsigned char)__c)) & __m) != 0; }
809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const char* is(const char* __low, const char* __high, mask* __vec) const {
829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    for (const char* __p = __low;__p != __high; ++__p, ++__vec) {
839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      *__vec = _M_ctype_table[(unsigned char)*__p];
849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return __high;
869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const char* scan_is(mask __m, const char* __low, const char* __high) const;
899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const char* scan_not(mask __m, const char* __low, const char* __high) const;
909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  char        (toupper)(char __c) const { return do_toupper(__c); }
929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const char* (toupper)(char* __low, const char* __high) const {
939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return do_toupper(__low, __high);
949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  char        (tolower)(char __c) const { return do_tolower(__c); }
979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const char* (tolower)(char* __low, const char* __high) const {
989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return do_tolower(__low, __high);
999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  char        widen(char __c) const { return do_widen(__c); }
1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const char* widen(const char* __low, const char* __high, char* __to) const {
1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return do_widen(__low, __high, __to);
1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  char        narrow(char __c, char __dfault) const {
1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return do_narrow(__c, __dfault);
1089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const char* narrow(const char* __low, const char* __high,
1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                     char __dfault, char* __to) const {
1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return do_narrow(__low, __high, __dfault, __to);
1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
114e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  static _STLP_STATIC_DECLSPEC locale::id id;
115e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _STLP_STATIC_CONSTANT(size_t, table_size = 256);
1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
1189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const mask* table() const _STLP_NOTHROW { return _M_ctype_table; }
1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static const mask* _STLP_CALL classic_table() _STLP_NOTHROW;
1209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  ~ctype();
1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual char        do_toupper(char __c) const;
1249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual char        do_tolower(char __c) const;
1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual const char* do_toupper(char* __low, const char* __high) const;
1269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual const char* do_tolower(char* __low, const char* __high) const;
1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual char        do_widen(char __c) const;
1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual const char* do_widen(const char* __low, const char* __high,
1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                               char* __to) const;
1309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual char        do_narrow(char __c, char /* dfault */ ) const;
1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual const char* do_narrow(const char* __low, const char* __high,
1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                char /* dfault */, char* __to) const;
1339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
1349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  struct _Is_mask {
1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    mask __m;
1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Is_mask(mask __x): __m(__x) {}
1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   bool operator()(char __c) {return (__m & (unsigned char) __c) != 0;}
1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  };
1399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const mask* _M_ctype_table;
1429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  bool _M_delete;
1449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
1459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TEMPLATE_NULL
1479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _STLP_CLASS_DECLSPEC ctype_byname<char>: public ctype<char> {
148e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  friend class _Locale_impl;
1499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
150e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  explicit ctype_byname(const char*, size_t = 0);
1519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  ~ctype_byname();
1529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual char        do_toupper(char __c) const;
1549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual char        do_tolower(char __c) const;
1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual const char* do_toupper(char*, const char*) const;
1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual const char* do_tolower(char*, const char*) const;
1589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
160e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ctype_byname(_Locale_ctype* __ctype)
161e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    : _M_ctype(__ctype)
162e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  { _M_init(); }
163e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
164e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  void _M_init();
1659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  //explicitely defined as private to avoid warnings:
1679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef ctype_byname<char> _Self;
1689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  ctype_byname(_Self const&);
1699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& operator = (_Self const&);
170e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
171e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  mask _M_byname_table[table_size];
172e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _Locale_ctype* _M_ctype;
1739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
1749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  ifndef _STLP_NO_WCHAR_T
1769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TEMPLATE_NULL
177e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass _STLP_CLASS_DECLSPEC ctype<wchar_t> : public locale::facet, public ctype_base {
1789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
1799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef wchar_t char_type;
1809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit ctype(size_t __refs = 0) : locale::facet(__refs) {}
1829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  bool is(mask __m, wchar_t __c) const
1849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    { return do_is(__m, __c); }
1859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const wchar_t* is(const wchar_t* __low, const wchar_t* __high,
1879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                    mask* __vec) const
1889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    { return do_is(__low, __high, __vec); }
1899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const wchar_t* scan_is(mask __m,
1919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                         const wchar_t* __low, const wchar_t* __high) const
1929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    { return do_scan_is(__m, __low, __high); }
1939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const wchar_t* scan_not (mask __m,
1959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                           const wchar_t* __low, const wchar_t* __high) const
1969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    { return do_scan_not(__m, __low, __high); }
1979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  wchar_t (toupper)(wchar_t __c) const { return do_toupper(__c); }
1999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const wchar_t* (toupper)(wchar_t* __low, const wchar_t* __high) const
2009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    { return do_toupper(__low, __high); }
2019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  wchar_t (tolower)(wchar_t __c) const { return do_tolower(__c); }
2039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const wchar_t* (tolower)(wchar_t* __low, const wchar_t* __high) const
2049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    { return do_tolower(__low, __high); }
2059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  wchar_t widen(char __c) const { return do_widen(__c); }
2079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const char* widen(const char* __low, const char* __high,
2089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                    wchar_t* __to) const
2099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    { return do_widen(__low, __high, __to); }
2109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  char narrow(wchar_t __c, char __dfault) const
2129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    { return do_narrow(__c, __dfault); }
2139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const wchar_t* narrow(const wchar_t* __low, const wchar_t* __high,
2149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                        char __dfault, char* __to) const
2159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    { return do_narrow(__low, __high, __dfault, __to); }
2169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
217e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  static _STLP_STATIC_DECLSPEC locale::id id;
2189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
2209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  ~ctype();
2219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual bool           do_is(mask __m, wchar_t __c) const;
2239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual const wchar_t* do_is(const wchar_t*, const wchar_t*, mask*) const;
2249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual const wchar_t* do_scan_is(mask,
2259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                    const wchar_t*, const wchar_t*) const;
2269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual const wchar_t* do_scan_not(mask,
2279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                     const wchar_t*, const wchar_t*) const;
2289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual wchar_t do_toupper(wchar_t __c) const;
2299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual const wchar_t* do_toupper(wchar_t*, const wchar_t*) const;
2309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual wchar_t do_tolower(wchar_t c) const;
2319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual const wchar_t* do_tolower(wchar_t*, const wchar_t*) const;
2329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual wchar_t do_widen(char c) const;
2339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual const char* do_widen(const char*, const char*, wchar_t*) const;
2349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual char  do_narrow(wchar_t __c, char __dfault) const;
2359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual const wchar_t* do_narrow(const wchar_t*, const wchar_t*,
2369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                   char, char*) const;
2379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
2389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TEMPLATE_NULL
2409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _STLP_CLASS_DECLSPEC ctype_byname<wchar_t>: public ctype<wchar_t> {
241e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  friend class _Locale_impl;
2429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
243e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  explicit ctype_byname(const char* __name, size_t __refs = 0);
2449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
2469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  ~ctype_byname();
2479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual bool           do_is(mask __m, wchar_t __c) const;
2499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual const wchar_t* do_is(const wchar_t*, const wchar_t*, mask*) const;
2509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual const wchar_t* do_scan_is(mask,
2519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                    const wchar_t*, const wchar_t*) const;
2529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual const wchar_t* do_scan_not(mask,
2539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                     const wchar_t*, const wchar_t*) const;
2549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual wchar_t do_toupper(wchar_t __c) const;
2559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual const wchar_t* do_toupper(wchar_t*, const wchar_t*) const;
2569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual wchar_t do_tolower(wchar_t c) const;
2579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  virtual const wchar_t* do_tolower(wchar_t*, const wchar_t*) const;
2589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
260e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ctype_byname(_Locale_ctype* __ctype)
261e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    : _M_ctype(__ctype) {}
2629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  //explicitely defined as private to avoid warnings:
2649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef ctype_byname<wchar_t> _Self;
2659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  ctype_byname(_Self const&);
2669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& operator = (_Self const&);
267e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
268e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _Locale_ctype* _M_ctype;
2699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
2709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif /* WCHAR_T */
2729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE
2749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_INTERNAL_CTYPE_H */
2769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Local Variables:
2789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// mode:C++
2799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// End:
2809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
281