// -*- C++ -*-
/***************************************************************************
 *
 * cwctype - C++ Standard library interface to the ANSI C header wctype.h
 *
 * $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 1994-2006 Rogue Wave Software.
 * 
 **************************************************************************/

#include <rw/_defs.h>

#ifndef _RWSTD_NO_PURE_C_HEADERS
#  include <ansi/_cwctype.h>
#else

#ifndef _RWSTD_NO_DEPRECATED_C_HEADERS

#ifndef _RWSTD_NAMESPACE_STD_OPEN
#define _RWSTD_NAMESPACE_STD_OPEN 18

_RWSTD_NAMESPACE (std) { 

#endif   // _RWSTD_NAMESPACE_STD_OPEN


#include _RWSTD_ANSI_C_WCTYPE_H


#if _RWSTD_NAMESPACE_STD_OPEN == 18
#undef _RWSTD_NAMESPACE_STD_OPEN

}   // namespace std

#endif   // _RWSTD_NAMESPACE_STD_OPEN == 18

#else   // if defined (_RWSTD_NO_DEPRECATED_C_HEADERS)

#ifndef _RWSTD_CWCTYPE_INCLUDED
#define _RWSTD_CWCTYPE_INCLUDED

#include _RWSTD_ANSI_C_WCTYPE_H

#ifdef __hpux
#  include _RWSTD_ANSI_C_WCHAR_H
#endif   // __hpux

// #define WEOF when not #defined (see also <cwchar>)
#if !defined WEOF
#  ifndef _RWSTD_NO_WINT_T
#    define WEOF _RWSTD_STATIC_CAST (_RWSTD_WINT_T, -1)
#  else
#    define WEOF (-1)
#  endif
#endif   // WEOF

#if !defined (_RWSTD_NO_NAMESPACE) && !defined (_RWSTD_NO_HONOR_STD) && \
      !defined (_RWSTD_NO_USING_LIBC_IN_STD)

#  ifndef _RWSTD_NO_WCTYPE_H

namespace std {

#ifndef _RWSTD_NO_WCTRANS_T
    using ::wctrans_t;
#else
    typedef int wctrans_t;
#endif   // _RWSTD_NO_WCTRANS_T

#ifndef _RWSTD_NO_WCTYPE_T
    using ::wctype_t;
#else
    typedef unsigned wctype_t;
#endif   // _RWSTD_NO_WCTYPE_T

#ifndef _RWSTD_NO_WINT_T
    using ::wint_t;
#else
    typedef unsigned wint_t;
#endif   // _RWSTD_NO_WINT_T

#ifndef _RWSTD_NO_ISWALNUM
    using ::iswalnum;
#elif !defined (_RWSTD_NO_ISWALNUM_IN_LIBC)

    extern "C" int iswalnum (wint_t);
#else
#endif   // _RWSTD_NO_ISWALNUM

#ifndef _RWSTD_NO_ISWALPHA
    using ::iswalpha;
#elif !defined (_RWSTD_NO_ISWALPHA_IN_LIBC)

    extern "C" int iswalpha (wint_t);

#else
#endif   // _RWSTD_NO_ISWALPHA

#ifndef _RWSTD_NO_ISWCNTRL
    using ::iswcntrl;
#elif !defined (_RWSTD_NO_ISWCNTRL_IN_LIBC)

    extern "C" int iswcntrl (wint_t);

#else
#endif   // _RWSTD_NO_ISWCNTRL

#ifndef _RWSTD_NO_ISWCTYPE
    using ::iswctype;
#elif !defined (_RWSTD_NO_ISWCTYPE_IN_LIBC)

    extern "C" int iswctype (wint_t, wctype_t);

#else
#endif   // _RWSTD_NO_ISWCTYPE

#ifndef _RWSTD_NO_ISWDIGIT
    using ::iswdigit;
#elif !defined (_RWSTD_NO_ISWDIGIT_IN_LIBC)

    extern "C" int iswdigit (wint_t);

#else
#endif   // _RWSTD_NO_ISWDIGIT

#ifndef _RWSTD_NO_ISWGRAPH
    using ::iswgraph;
#elif !defined (_RWSTD_NO_ISWGRAPH_IN_LIBC)

    extern "C" int iswgraph (wint_t);

#else
#endif   // _RWSTD_NO_ISWGRAPH

#ifndef _RWSTD_NO_ISWLOWER
    using ::iswlower;
#elif !defined (_RWSTD_NO_ISWLOWER_IN_LIBC)

    extern "C" int iswlower (wint_t);

#else
#endif   // _RWSTD_NO_ISWLOWER

#ifndef _RWSTD_NO_ISWPRINT
    using ::iswprint;
#elif !defined (_RWSTD_NO_ISWPRINT_IN_LIBC)

    extern "C" int iswprint (wint_t);

#else
#endif   // _RWSTD_NO_ISWPRINT

#ifndef _RWSTD_NO_ISWPUNCT
    using ::iswpunct;
#elif !defined (_RWSTD_NO_ISWPUNCT_IN_LIBC)

    extern "C" int iswpunct (wint_t);

#else
#endif   // _RWSTD_NO_ISWPUNCT

#ifndef _RWSTD_NO_ISWSPACE
    using ::iswspace;
#elif !defined (_RWSTD_NO_ISWSPACE_IN_LIBC)

    extern "C" int iswspace (wint_t);

#else
#endif   // _RWSTD_NO_ISWSPACE

#ifndef _RWSTD_NO_ISWUPPER
    using ::iswupper;
#elif !defined (_RWSTD_NO_ISWUPPER_IN_LIBC)

    extern "C" int iswupper (wint_t);

#else
#endif   // _RWSTD_NO_ISWUPPER

#ifndef _RWSTD_NO_ISWXDIGIT
    using ::iswxdigit;
#elif !defined (_RWSTD_NO_ISWXDIGIT_IN_LIBC)

    extern "C" int iswxdigit (wint_t);

#else
#endif   // _RWSTD_NO_ISWXDIGIT

#ifndef _RWSTD_NO_TOWCTRANS
    using ::towctrans;
#elif !defined (_RWSTD_NO_TOWCTRANS_IN_LIBC)

    extern "C" wint_t towctrans (wint_t, wctrans_t);

#else
#endif   // _RWSTD_NO_TOWCTRANS

#ifndef _RWSTD_NO_TOWLOWER
    using ::towlower;
#elif !defined (_RWSTD_NO_TOWLOWER_IN_LIBC)

    extern "C" wint_t towlower (wint_t);

#else
#endif   // _RWSTD_NO_TOWLOWER

#ifndef _RWSTD_NO_TOWUPPER
    using ::towupper;
#elif !defined (_RWSTD_NO_TOWUPPER_IN_LIBC)

    extern "C" wint_t towupper (wint_t);

#else
#endif   // _RWSTD_NO_TOWUPPER

#ifndef _RWSTD_NO_WCTRANS
    using ::wctrans;
#elif !defined (_RWSTD_NO_WCTRANS_IN_LIBC)

    extern "C" wctrans_t wctrans (const char*);

#else
#endif   // _RWSTD_NO_WCTRANS

#ifndef _RWSTD_NO_WCTYPE
    using ::wctype;
#elif !defined (_RWSTD_NO_WCTYPE_IN_LIBC)

    extern "C" wctype_t wctype (const char*);

#else
#endif   // _RWSTD_NO_WCTYPE

}   // std

#  endif   // _RWSTD_NO_WCTYPE_H

#endif   // !_RWSTD_NO_NAMESPACE && !_RWSTD_NO_HONOR_STD && !_RWSTD_NO_USING_LIBC_IN_STD

#endif   // _RWSTD_CWCTYPE_INCLUDED

#endif   // _RWSTD_NO_DEPRECATED_C_HEADERS

#endif   // _RWSTD_NO_PURE_C_HEADERS
