/*************************************************************************** * * _mbstate.h - definition of mbstate_t * * This is an internal header file used to implement the C++ Standard * Library. It should never be #included directly by a program. * * $Id: _mbstate.h 648752 2008-04-16 17:01:56Z faridz $ * *************************************************************************** * * 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 2005-2008 Rogue Wave Software, Inc. * **************************************************************************/ #ifndef _RWSTD_RW_MBSTATE_H_INCLUDED #define _RWSTD_RW_MBSTATE_H_INCLUDED #ifndef _RWSTD_RW_DEFS_H_INCLUDED # include #endif // _RWSTD_RW_DEFS_H_INCLUDED #if defined (_RWSTD_OS_AIX) /*** AIX ******************************************************************/ _RWSTD_NAMESPACE (__rw) { // introduce typedef to avoid const qualification issues typedef char* __rw_mbstate_t; # define _RWSTD_MBSTATE_T _RW::__rw_mbstate_t } // namespace __rw #elif defined (_RWSTD_OS_HP_UX) /*** HP-UX ****************************************************************/ # ifndef _MBSTATE_T # define _MBSTATE_T # if !defined (__HP_aCC) && !defined (_RWSTD_NO_LIBC_IN_STD) \ || defined (__HP_aCC) && defined (_NAMESPACE_STD) _RWSTD_NAMESPACE (std) { # endif // HP aCC -AA extern "C" { // HP-UX 10.00 or 11.00 do not define mbstate_t // HP-UX 11.11 (and higher) definition of mbstate_t typedef struct { unsigned char __parse_size: 3; unsigned char __dummy: 4; unsigned char __shift_state: 1; char __parse_buf [7]; } mbstate_t; } // extern "C" # if !defined (__HP_aCC) && !defined (_RWSTD_NO_LIBC_IN_STD) \ || defined (__HP_aCC) && defined (_NAMESPACE_STD) } // namespace std # undef _RWSTD_NO_STD_MBSTATE_T # define _RWSTD_MBSTATE_T _STD::mbstate_t # else // if !(HP aCC -AA) // let et al know that mbstate_t is not declared // in namespace std (and should be introduced there via // a using declaration) # define _RWSTD_NO_STD_MBSTATE_T _RWSTD_NAMESPACE (std) { _USING (::mbstate_t); } // namespace std # define _RWSTD_MBSTATE_T mbstate_t # endif // HP aCC -AA # else // if defined (_MBSTATE_T) // /usr/include/sys/_mbstate_t.h #included and mbstate_t defined # ifndef _NAMESPACE_STD // let et al know that mbstate_t is not declared // in namespace std (and should be introduced there via // a using declaration) # define _RWSTD_NO_STD_MBSTATE_T _RWSTD_NAMESPACE (std) { _USING (::mbstate_t); } // namespace std # define _RWSTD_MBSTATE_T mbstate_t # endif // _NAMESPACE_STD # endif // _MBSTATE_T #elif defined (_RWSTD_OS_IRIX64) /*** IRIX64 ***************************************************************/ # define _RWSTD_MBSTATE_T char #elif defined (_MSC_VER) /*** MSVC 6.0 - 8.0 *******************************************************/ # define _RWSTD_MBSTATE_T int #elif !defined (_RWSTD_NO_MBSTATE_T) /*** not HP-UX that has a mbstate_t ***************************************/ # if defined (_RWSTD_OS_LINUX) /*** Linux/glibc **********************************************************/ // define __mbstate_t at file scope (see /usr/include/wchar.h) # ifndef __mbstate_t_defined # define __mbstate_t_defined 1 extern "C" { typedef struct { int __count; union { _RWSTD_WINT_T __wch; char __wchb [4]; } __value; } __mbstate_t; } // extern "C" # endif // __mbstate_t_defined # define _RWSTD_MBSTATE_T __mbstate_t # elif defined (_RWSTD_OS_SUNOS) /*** Solaris 7 and beyond *************************************************/ # ifndef _MBSTATET_H # define _MBSTATET_H extern "C" { // avoid namespace pollution on Solaris typedef struct __mbstate_t { // Sun uses _LP64 in their header but the macro may not // yetbe #defined at this point, depending on what other // headers have been #included # if 8 == _RWSTD_LONG_SIZE // LP64 long __filler [4]; # else int __filler [6]; # endif // 8 == sizeof(long) } __mbstate_t; } // extern "C" # endif // _MBSTATET_H # define _RWSTD_MBSTATE_T __mbstate_t // let et al know that mbstate_t is not declared // in namespace std (and should be introduced there via // a using declaration) # define _RWSTD_NO_STD_MBSTATE_T # elif defined (_RWSTD_OS_DARWIN) /*** Apple Darwin/OS X ****************************************************/ // include a system header for __mbstate_t # include # define _RWSTD_MBSTATE_T __mbstate_t # else // if !defined (_RWSTD_OS_SUNOS) /*** generic OS ***********************************************************/ # include _RWSTD_CWCHAR # define _RWSTD_MBSTATE_T _RWSTD_C::mbstate_t # endif // _RWSTD_OS_SUNOS /*** not HP-UX that does not define mbstate_t *****************************/ #elif !defined (_RWSTD_MBSTATE_T_DEFINED) # define _RWSTD_MBSTATE_T_DEFINED /*** SunOS 5.6 and prior **************************************************/ # if defined (_RWSTD_OS_SUNOS) // Solaris 6 does not define mbstate_t; the definition of // the struct below is taken from on Solaris 7 # ifndef _WCHAR_IMPL_H # define _WCHAR_IMPL_H # ifndef _MBSTATET_H # define _MBSTATET_H extern "C" { struct __mbstate_t { # ifdef _LP64 long _C_data [4]; # else // if !defined (_LP64) int _C_data [6]; # endif // _LP64 }; } // extern "C" # endif // _MBSTATET_H # endif // _WCHAR_IMPL_H # define _RWSTD_MBSTATE_T __mbstate_t // let et al know that mbstate_t is not declared // in namespace std (and should be introduced there via // a using declaration) # define _RWSTD_NO_STD_MBSTATE_T # else // any other OS # ifndef _RWSTD_NO_USING_LIBC_IN_STD _RWSTD_NAMESPACE (std) { # endif // _RWSTD_NO_USING_LIBC_IN_STD extern "C" { // generic definition of mbstate_t struct mbstate_t { # ifdef _RWSTD_MBSTATE_T_SIZE char _C_data [_RWSTD_MBSTATE_T_SIZE]; # else char _C_data [sizeof (long)]; # endif }; } // extern "C" # ifndef _RWSTD_NO_USING_LIBC_IN_STD } // namespace std # endif // _RWSTD_NO_USING_LIBC_IN_STD # define _RWSTD_MBSTATE_T _STD::mbstate_t # endif // generic OS #endif // _RWSTD_NO_MBSTATE_T && !_RWSTD_MBSTATE_T_DEFINED #endif // _RWSTD_RW_MBSTATE_H_INCLUDED