177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/*
277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1999
377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Silicon Graphics Computer Systems, Inc.
477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1999
677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Boris Fomitchev
777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * This material is provided "as is", with absolutely no warranty expressed
977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * or implied. Any use is at your own risk.
1077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
1177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to use or copy this software for any purpose is hereby granted
1277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * without fee, provided the above notices are retained on all copies.
1377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to modify the code and to distribute modified code is granted,
1477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * provided the above notices are retained, and a notice that the code was
1577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * modified is included with the above copyright notice.
1677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
1777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */
1877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// WARNING: This is an internal header file, included by other C++
1977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// standard library headers.  You should not attempt to use this header
2077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// file directly.
2177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
2277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_CTYPE_H
2377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#define _STLP_INTERNAL_CTYPE_H
2477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
2577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_C_LOCALE_H
2677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  include <stl/c_locale.h>
2777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
2877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
2977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_LOCALE_H
3077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  include <stl/_locale.h>
3177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
3277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
3377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_ALGOBASE_H
3477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  include <stl/_algobase.h>
3577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
3677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
3777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_BEGIN_NAMESPACE
3877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
3977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerclass _STLP_CLASS_DECLSPEC ctype_base {
4077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:
4177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  enum mask {
4277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    space   = _Locale_SPACE,
4377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    print   = _Locale_PRINT,
4477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    cntrl   = _Locale_CNTRL,
4577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    upper   = _Locale_UPPER,
4677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    lower   = _Locale_LOWER,
4777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    alpha   = _Locale_ALPHA,
4877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    digit   = _Locale_DIGIT,
4977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    punct   = _Locale_PUNCT,
5077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    xdigit  = _Locale_XDIGIT,
5177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    alnum   = alpha | digit,
5277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    graph   = alnum | punct
5377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  };
5477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner};
5577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
5677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// ctype<> template
5777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
5877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class charT> class ctype {};
5977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class charT> class ctype_byname {};
6077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
6177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//ctype specializations
6277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
6377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_TEMPLATE_NULL
6477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerclass _STLP_CLASS_DECLSPEC ctype<char> : public locale::facet, public ctype_base {
6577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_NO_WCHAR_T
6677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  ifdef _STLP_MSVC
6777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    typedef ctype<wchar_t> _Wctype;
6877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    friend _Wctype;
6977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  else
7077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    friend class ctype<wchar_t>;
7177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  endif
7277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
7377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:
7477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
7577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef char char_type;
7677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
7777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  explicit ctype(const mask* __tab = 0, bool __del = false, size_t __refs = 0);
7877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  bool is(mask __m, char __c) const
7977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { return ((*(_M_ctype_table+(unsigned char)__c)) & __m) != 0; }
8077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
8177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const char* is(const char* __low, const char* __high, mask* __vec) const {
8277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    for (const char* __p = __low;__p != __high; ++__p, ++__vec) {
8377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      *__vec = _M_ctype_table[(unsigned char)*__p];
8477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    }
8577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return __high;
8677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
8777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
8877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const char* scan_is(mask __m, const char* __low, const char* __high) const;
8977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const char* scan_not(mask __m, const char* __low, const char* __high) const;
9077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
9177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  char        (toupper)(char __c) const { return do_toupper(__c); }
9277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const char* (toupper)(char* __low, const char* __high) const {
9377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return do_toupper(__low, __high);
9477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
9577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
9677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  char        (tolower)(char __c) const { return do_tolower(__c); }
9777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const char* (tolower)(char* __low, const char* __high) const {
9877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return do_tolower(__low, __high);
9977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
10077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
10177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  char        widen(char __c) const { return do_widen(__c); }
10277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const char* widen(const char* __low, const char* __high, char* __to) const {
10377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return do_widen(__low, __high, __to);
10477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
10577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
10677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  char        narrow(char __c, char __dfault) const {
10777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return do_narrow(__c, __dfault);
10877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
10977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const char* narrow(const char* __low, const char* __high,
11077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                     char __dfault, char* __to) const {
11177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return do_narrow(__low, __high, __dfault, __to);
11277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
11377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
11477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  static _STLP_STATIC_DECLSPEC locale::id id;
11577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_STATIC_CONSTANT(size_t, table_size = 256);
11677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
11777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprotected:
11877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const mask* table() const _STLP_NOTHROW { return _M_ctype_table; }
11977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  static const mask* _STLP_CALL classic_table() _STLP_NOTHROW;
12077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
12177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  ~ctype();
12277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
12377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual char        do_toupper(char __c) const;
12477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual char        do_tolower(char __c) const;
12577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual const char* do_toupper(char* __low, const char* __high) const;
12677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual const char* do_tolower(char* __low, const char* __high) const;
12777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual char        do_widen(char __c) const;
12877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual const char* do_widen(const char* __low, const char* __high,
12977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                               char* __to) const;
13077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual char        do_narrow(char __c, char /* dfault */ ) const;
13177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual const char* do_narrow(const char* __low, const char* __high,
13277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                char /* dfault */, char* __to) const;
13377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprivate:
13477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  struct _Is_mask {
13577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    mask __m;
13677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Is_mask(mask __x): __m(__x) {}
13777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner   bool operator()(char __c) {return (__m & (unsigned char) __c) != 0;}
13877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  };
13977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
14077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprotected:
14177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const mask* _M_ctype_table;
14277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprivate:
14377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  bool _M_delete;
14477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner};
14577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
14677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_TEMPLATE_NULL
14777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerclass _STLP_CLASS_DECLSPEC ctype_byname<char>: public ctype<char> {
14877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  friend class _Locale_impl;
14977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:
15077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  explicit ctype_byname(const char*, size_t = 0);
15177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  ~ctype_byname();
15277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
15377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual char        do_toupper(char __c) const;
15477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual char        do_tolower(char __c) const;
15577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
15677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual const char* do_toupper(char*, const char*) const;
15777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual const char* do_tolower(char*, const char*) const;
15877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
15977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprivate:
16077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  ctype_byname(_Locale_ctype* __ctype)
16177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _M_ctype(__ctype)
16277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { _M_init(); }
16377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
16477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void _M_init();
16577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
16677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  //explicitely defined as private to avoid warnings:
16777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef ctype_byname<char> _Self;
16877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  ctype_byname(_Self const&);
16977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator = (_Self const&);
17077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
17177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  mask _M_byname_table[table_size];
17277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Locale_ctype* _M_ctype;
17377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner};
17477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
17577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  ifndef _STLP_NO_WCHAR_T
17677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_TEMPLATE_NULL
17777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerclass _STLP_CLASS_DECLSPEC ctype<wchar_t> : public locale::facet, public ctype_base {
17877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:
17977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef wchar_t char_type;
18077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
18177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  explicit ctype(size_t __refs = 0) : locale::facet(__refs) {}
18277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
18377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  bool is(mask __m, wchar_t __c) const
18477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    { return do_is(__m, __c); }
18577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
18677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const wchar_t* is(const wchar_t* __low, const wchar_t* __high,
18777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                    mask* __vec) const
18877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    { return do_is(__low, __high, __vec); }
18977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
19077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const wchar_t* scan_is(mask __m,
19177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                         const wchar_t* __low, const wchar_t* __high) const
19277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    { return do_scan_is(__m, __low, __high); }
19377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
19477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const wchar_t* scan_not (mask __m,
19577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                           const wchar_t* __low, const wchar_t* __high) const
19677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    { return do_scan_not(__m, __low, __high); }
19777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
19877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  wchar_t (toupper)(wchar_t __c) const { return do_toupper(__c); }
19977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const wchar_t* (toupper)(wchar_t* __low, const wchar_t* __high) const
20077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    { return do_toupper(__low, __high); }
20177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
20277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  wchar_t (tolower)(wchar_t __c) const { return do_tolower(__c); }
20377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const wchar_t* (tolower)(wchar_t* __low, const wchar_t* __high) const
20477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    { return do_tolower(__low, __high); }
20577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
20677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  wchar_t widen(char __c) const { return do_widen(__c); }
20777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const char* widen(const char* __low, const char* __high,
20877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                    wchar_t* __to) const
20977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    { return do_widen(__low, __high, __to); }
21077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
21177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  char narrow(wchar_t __c, char __dfault) const
21277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    { return do_narrow(__c, __dfault); }
21377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const wchar_t* narrow(const wchar_t* __low, const wchar_t* __high,
21477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                        char __dfault, char* __to) const
21577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    { return do_narrow(__low, __high, __dfault, __to); }
21677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
21777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  static _STLP_STATIC_DECLSPEC locale::id id;
21877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
21977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprotected:
22077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  ~ctype();
22177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
22277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual bool           do_is(mask __m, wchar_t __c) const;
22377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual const wchar_t* do_is(const wchar_t*, const wchar_t*, mask*) const;
22477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual const wchar_t* do_scan_is(mask,
22577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                    const wchar_t*, const wchar_t*) const;
22677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual const wchar_t* do_scan_not(mask,
22777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                     const wchar_t*, const wchar_t*) const;
22877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual wchar_t do_toupper(wchar_t __c) const;
22977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual const wchar_t* do_toupper(wchar_t*, const wchar_t*) const;
23077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual wchar_t do_tolower(wchar_t c) const;
23177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual const wchar_t* do_tolower(wchar_t*, const wchar_t*) const;
23277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual wchar_t do_widen(char c) const;
23377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual const char* do_widen(const char*, const char*, wchar_t*) const;
23477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual char  do_narrow(wchar_t __c, char __dfault) const;
23577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual const wchar_t* do_narrow(const wchar_t*, const wchar_t*,
23677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                   char, char*) const;
23777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner};
23877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
23977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_TEMPLATE_NULL
24077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerclass _STLP_CLASS_DECLSPEC ctype_byname<wchar_t>: public ctype<wchar_t> {
24177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  friend class _Locale_impl;
24277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:
24377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  explicit ctype_byname(const char* __name, size_t __refs = 0);
24477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
24577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprotected:
24677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  ~ctype_byname();
24777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
24877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual bool           do_is(mask __m, wchar_t __c) const;
24977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual const wchar_t* do_is(const wchar_t*, const wchar_t*, mask*) const;
25077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual const wchar_t* do_scan_is(mask,
25177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                    const wchar_t*, const wchar_t*) const;
25277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual const wchar_t* do_scan_not(mask,
25377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                     const wchar_t*, const wchar_t*) const;
25477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual wchar_t do_toupper(wchar_t __c) const;
25577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual const wchar_t* do_toupper(wchar_t*, const wchar_t*) const;
25677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual wchar_t do_tolower(wchar_t c) const;
25777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  virtual const wchar_t* do_tolower(wchar_t*, const wchar_t*) const;
25877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
25977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprivate:
26077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  ctype_byname(_Locale_ctype* __ctype)
26177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _M_ctype(__ctype) {}
26277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
26377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  //explicitely defined as private to avoid warnings:
26477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef ctype_byname<wchar_t> _Self;
26577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  ctype_byname(_Self const&);
26677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator = (_Self const&);
26777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
26877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Locale_ctype* _M_ctype;
26977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner};
27077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
27177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  endif /* WCHAR_T */
27277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
27377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_END_NAMESPACE
27477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
27577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif /* _STLP_INTERNAL_CTYPE_H */
27677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
27777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Local Variables:
27877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// mode:C++
27977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// End:
28077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
281