1// -*- C++ -*- forwarding header. 2 3// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 4// Free Software Foundation, Inc. 5// 6// This file is part of the GNU ISO C++ Library. This library is free 7// software; you can redistribute it and/or modify it under the 8// terms of the GNU General Public License as published by the 9// Free Software Foundation; either version 2, or (at your option) 10// any later version. 11 12// This library is distributed in the hope that it will be useful, 13// but WITHOUT ANY WARRANTY; without even the implied warranty of 14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15// GNU General Public License for more details. 16 17// You should have received a copy of the GNU General Public License along 18// with this library; see the file COPYING. If not, write to the Free 19// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 20// USA. 21 22// As a special exception, you may use this file as part of a free software 23// library without restriction. Specifically, if other files instantiate 24// templates or use macros or inline functions from this file, or you compile 25// this file and link it with other files to produce an executable, this 26// file does not by itself cause the resulting executable to be covered by 27// the GNU General Public License. This exception does not however 28// invalidate any other reasons why the executable file might be covered by 29// the GNU General Public License. 30 31// 32// ISO C++ 14882: 21.4 33// 34 35/** @file cwchar 36 * This is a Standard C++ Library file. You should @c #include this file 37 * in your programs, rather than any of the "*.h" implementation files. 38 * 39 * This is the C++ version of the Standard C Library header @c wchar.h, 40 * and its contents are (mostly) the same as that header, but are all 41 * contained in the namespace @c std. 42 */ 43 44#ifndef _CPP_CWCHAR 45#define _CPP_CWCHAR 1 46 47#pragma GCC system_header 48 49#include <bits/c++config.h> 50#include <cstddef> 51#include <ctime> 52 53#if _GLIBCPP_HAVE_WCHAR_H 54#include <wchar.h> 55#endif 56 57// Need to do a bit of trickery here with mbstate_t as char_traits 58// assumes it is in wchar.h, regardless of wchar_t specializations. 59#ifndef _GLIBCPP_HAVE_MBSTATE_T 60extern "C" 61{ 62 typedef struct 63 { 64 int __fill[6]; 65 } mbstate_t; 66} 67#endif 68 69namespace std 70{ 71 using ::mbstate_t; 72} 73 74// Get rid of those macros defined in <wchar.h> in lieu of real functions. 75#undef btowc 76#undef fgetwc 77#undef fgetws 78#undef fputwc 79#undef fputws 80#undef fwide 81#undef fwprintf 82#undef fwscanf 83#undef getwc 84#undef getwchar 85#undef mbrlen 86#undef mbrtowc 87#undef mbsinit 88#undef mbsrtowcs 89#undef putwc 90#undef putwchar 91#undef swprintf 92#undef swscanf 93#undef ungetwc 94#undef vfwprintf 95#undef vfwscanf 96#undef vswprintf 97#undef vswscanf 98#undef vwprintf 99#undef vwscanf 100#undef wcrtomb 101#undef wcscat 102#undef wcschr 103#undef wcscmp 104#undef wcscoll 105#undef wcscpy 106#undef wcscspn 107#undef wcsftime 108#undef wcslen 109#undef wcsncat 110#undef wcsncmp 111#undef wcsncpy 112#undef wcspbrk 113#undef wcsrchr 114#undef wcsrtombs 115#undef wcsspn 116#undef wcsstr 117#undef wcstod 118#undef wcstof 119#undef wcstok 120#undef wcstol 121#undef wcstoul 122#undef wcsxfrm 123#undef wctob 124#undef wmemchr 125#undef wmemcmp 126#undef wmemcpy 127#undef wmemmove 128#undef wmemset 129#undef wprintf 130#undef wscanf 131 132#if defined(_GLIBCPP_USE_WCHAR_T) || defined(_GLIBCPP_USE_TYPE_WCHAR_T) 133namespace std 134{ 135 using ::wint_t; 136 137 using ::btowc; 138 using ::fgetwc; 139 using ::fgetws; 140 using ::fputwc; 141 using ::fputws; 142 using ::fwide; 143 using ::fwprintf; 144 using ::fwscanf; 145 using ::getwc; 146 using ::getwchar; 147 using ::mbrlen; 148 using ::mbrtowc; 149 using ::mbsinit; 150 using ::mbsrtowcs; 151 using ::putwc; 152 using ::putwchar; 153 using ::swprintf; 154 using ::swscanf; 155 using ::ungetwc; 156 using ::vfwprintf; 157 using ::vfwscanf; 158 using ::vswprintf; 159 using ::vswscanf; 160 using ::vwprintf; 161 using ::vwscanf; 162 using ::wcrtomb; 163 using ::wcscat; 164 using ::wcscmp; 165 using ::wcscoll; 166 using ::wcscpy; 167 using ::wcscspn; 168 using ::wcsftime; 169 using ::wcslen; 170 using ::wcsncat; 171 using ::wcsncmp; 172 using ::wcsncpy; 173 using ::wcsrtombs; 174 using ::wcsspn; 175 using ::wcstod; 176 using ::wcstof; 177 using ::wcstok; 178 using ::wcstol; 179 using ::wcstoul; 180 using ::wcsxfrm; 181 using ::wctob; 182 using ::wmemcmp; 183 using ::wmemcpy; 184 using ::wmemmove; 185 using ::wmemset; 186 using ::wprintf; 187 using ::wscanf; 188 189 using ::wcschr; 190 191 inline wchar_t* 192 wcschr(wchar_t* __p, wchar_t __c) 193 { return wcschr(const_cast<const wchar_t*>(__p), __c); } 194 195 using ::wcspbrk; 196 197 inline wchar_t* 198 wcspbrk(wchar_t* __s1, wchar_t* __s2) 199 { return wcspbrk(const_cast<const wchar_t*>(__s1), __s2); } 200 201 using ::wcsrchr; 202 203 inline wchar_t* 204 wcsrchr(wchar_t* __p, wchar_t __c) 205 { return wcsrchr(const_cast<const wchar_t*>(__p), __c); } 206 207 using ::wcsstr; 208 209 inline wchar_t* 210 wcsstr(wchar_t* __s1, wchar_t* __s2) 211 { return wcsstr(const_cast<const wchar_t*>(__s1), __s2); } 212 213 using ::wmemchr; 214 215 inline wchar_t* 216 wmemchr(wchar_t* __p, wchar_t __c, size_t __n) 217 { return wmemchr(const_cast<const wchar_t*>(__p), __c, __n); } 218} 219 220#if defined(_GLIBCPP_USE_C99) 221 222#undef wcstold 223#undef wcstoll 224#undef wcstoull 225 226namespace __gnu_cxx 227{ 228#if defined(_GLIBCPP_USE_C99_CHECK) || defined(_GLIBCPP_USE_C99_DYNAMIC) 229 extern "C" long double 230 (wcstold)(const wchar_t * restrict, wchar_t ** restrict); 231#endif 232#if !defined(_GLIBCPP_USE_C99_DYNAMIC) 233 using ::wcstold; 234#endif 235#if defined(_GLIBCPP_USE_C99_LONG_LONG_CHECK) || defined(_GLIBCPP_USE_C99_LONG_LONG_DYNAMIC) 236 extern "C" long long int 237 (wcstoll)(const wchar_t * restrict, wchar_t ** restrict, int); 238 extern "C" unsigned long long int 239 (wcstoull)(const wchar_t * restrict, wchar_t ** restrict, int); 240#endif 241#if !defined(_GLIBCPP_USE_C99_LONG_LONG_DYNAMIC) 242 using ::wcstoll; 243 using ::wcstoull; 244#endif 245} 246 247namespace std 248{ 249 using __gnu_cxx::wcstold; 250 using __gnu_cxx::wcstoll; 251 using __gnu_cxx::wcstoull; 252} 253#endif 254 255#endif //_GLIBCPP_USE_WCHAR_T 256 257#endif 258