| /*************************************************************************** |
| * |
| * _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$ |
| * |
| *************************************************************************** |
| * |
| * 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-2006 Rogue Wave Software. |
| * |
| **************************************************************************/ |
| |
| #ifndef _RWSTD_RW_MBSTATE_H_INCLUDED |
| #define _RWSTD_RW_MBSTATE_H_INCLUDED |
| |
| #ifndef _RWSTD_RW_DEFS_H_INCLUDED |
| # include <rw/_defs.h> |
| #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 <cwchar> 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 <cwchar> 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 { |
| |
| # ifdef _LP64 |
| long __filler [4]; |
| # else |
| int __filler [6]; |
| # endif // _LP64 |
| } __mbstate_t; |
| |
| } // extern "C" |
| |
| # endif // _MBSTATET_H |
| |
| # define _RWSTD_MBSTATE_T __mbstate_t |
| // let <cwchar> 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 <machine/_types.h> |
| # 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 <wchar_impl.h> 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 <cwchar> 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 |