libstdc++
|
00001 // -*- C++ -*- forwarding header. 00002 00003 // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 00004 // 2006, 2007, 2008, 2009 00005 // Free Software Foundation, Inc. 00006 // 00007 // This file is part of the GNU ISO C++ Library. This library is free 00008 // software; you can redistribute it and/or modify it under the 00009 // terms of the GNU General Public License as published by the 00010 // Free Software Foundation; either version 3, or (at your option) 00011 // any later version. 00012 00013 // This library is distributed in the hope that it will be useful, 00014 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00016 // GNU General Public License for more details. 00017 00018 // Under Section 7 of GPL version 3, you are granted additional 00019 // permissions described in the GCC Runtime Library Exception, version 00020 // 3.1, as published by the Free Software Foundation. 00021 00022 // You should have received a copy of the GNU General Public License and 00023 // a copy of the GCC Runtime Library Exception along with this program; 00024 // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 00025 // <http://www.gnu.org/licenses/>. 00026 00027 /** @file include/cwchar 00028 * This is a Standard C++ Library file. You should @c #include this file 00029 * in your programs, rather than any of the "*.h" implementation files. 00030 * 00031 * This is the C++ version of the Standard C Library header @c wchar.h, 00032 * and its contents are (mostly) the same as that header, but are all 00033 * contained in the namespace @c std (except for names which are defined 00034 * as macros in C). 00035 */ 00036 00037 // 00038 // ISO C++ 14882: 21.4 00039 // 00040 00041 #pragma GCC system_header 00042 00043 #include <bits/c++config.h> 00044 #include <cstddef> 00045 00046 #if _GLIBCXX_HAVE_WCHAR_H 00047 #include <wchar.h> 00048 #endif 00049 00050 #ifndef _GLIBCXX_CWCHAR 00051 #define _GLIBCXX_CWCHAR 1 00052 00053 // Need to do a bit of trickery here with mbstate_t as char_traits 00054 // assumes it is in wchar.h, regardless of wchar_t specializations. 00055 #ifndef _GLIBCXX_HAVE_MBSTATE_T 00056 extern "C" 00057 { 00058 typedef struct 00059 { 00060 int __fill[6]; 00061 } mbstate_t; 00062 } 00063 #endif 00064 00065 _GLIBCXX_BEGIN_NAMESPACE(std) 00066 00067 using ::mbstate_t; 00068 00069 _GLIBCXX_END_NAMESPACE 00070 00071 // Get rid of those macros defined in <wchar.h> in lieu of real functions. 00072 #undef btowc 00073 #undef fgetwc 00074 #undef fgetws 00075 #undef fputwc 00076 #undef fputws 00077 #undef fwide 00078 #undef fwprintf 00079 #undef fwscanf 00080 #undef getwc 00081 #undef getwchar 00082 #undef mbrlen 00083 #undef mbrtowc 00084 #undef mbsinit 00085 #undef mbsrtowcs 00086 #undef putwc 00087 #undef putwchar 00088 #undef swprintf 00089 #undef swscanf 00090 #undef ungetwc 00091 #undef vfwprintf 00092 #if _GLIBCXX_HAVE_VFWSCANF 00093 # undef vfwscanf 00094 #endif 00095 #undef vswprintf 00096 #if _GLIBCXX_HAVE_VSWSCANF 00097 # undef vswscanf 00098 #endif 00099 #undef vwprintf 00100 #if _GLIBCXX_HAVE_VWSCANF 00101 # undef vwscanf 00102 #endif 00103 #undef wcrtomb 00104 #undef wcscat 00105 #undef wcschr 00106 #undef wcscmp 00107 #undef wcscoll 00108 #undef wcscpy 00109 #undef wcscspn 00110 #undef wcsftime 00111 #undef wcslen 00112 #undef wcsncat 00113 #undef wcsncmp 00114 #undef wcsncpy 00115 #undef wcspbrk 00116 #undef wcsrchr 00117 #undef wcsrtombs 00118 #undef wcsspn 00119 #undef wcsstr 00120 #undef wcstod 00121 #if _GLIBCXX_HAVE_WCSTOF 00122 # undef wcstof 00123 #endif 00124 #undef wcstok 00125 #undef wcstol 00126 #undef wcstoul 00127 #undef wcsxfrm 00128 #undef wctob 00129 #undef wmemchr 00130 #undef wmemcmp 00131 #undef wmemcpy 00132 #undef wmemmove 00133 #undef wmemset 00134 #undef wprintf 00135 #undef wscanf 00136 00137 #if _GLIBCXX_USE_WCHAR_T 00138 00139 _GLIBCXX_BEGIN_NAMESPACE(std) 00140 00141 using ::wint_t; 00142 00143 using ::btowc; 00144 using ::fgetwc; 00145 using ::fgetws; 00146 using ::fputwc; 00147 using ::fputws; 00148 using ::fwide; 00149 using ::fwprintf; 00150 using ::fwscanf; 00151 using ::getwc; 00152 using ::getwchar; 00153 using ::mbrlen; 00154 using ::mbrtowc; 00155 using ::mbsinit; 00156 using ::mbsrtowcs; 00157 using ::putwc; 00158 using ::putwchar; 00159 #ifndef _GLIBCXX_HAVE_BROKEN_VSWPRINTF 00160 using ::swprintf; 00161 #endif 00162 using ::swscanf; 00163 using ::ungetwc; 00164 using ::vfwprintf; 00165 #if _GLIBCXX_HAVE_VFWSCANF 00166 using ::vfwscanf; 00167 #endif 00168 #ifndef _GLIBCXX_HAVE_BROKEN_VSWPRINTF 00169 using ::vswprintf; 00170 #endif 00171 #if _GLIBCXX_HAVE_VSWSCANF 00172 using ::vswscanf; 00173 #endif 00174 using ::vwprintf; 00175 #if _GLIBCXX_HAVE_VWSCANF 00176 using ::vwscanf; 00177 #endif 00178 using ::wcrtomb; 00179 using ::wcscat; 00180 using ::wcscmp; 00181 using ::wcscoll; 00182 using ::wcscpy; 00183 using ::wcscspn; 00184 using ::wcsftime; 00185 using ::wcslen; 00186 using ::wcsncat; 00187 using ::wcsncmp; 00188 using ::wcsncpy; 00189 using ::wcsrtombs; 00190 using ::wcsspn; 00191 using ::wcstod; 00192 #if _GLIBCXX_HAVE_WCSTOF 00193 using ::wcstof; 00194 #endif 00195 using ::wcstok; 00196 using ::wcstol; 00197 using ::wcstoul; 00198 using ::wcsxfrm; 00199 using ::wctob; 00200 using ::wmemcmp; 00201 using ::wmemcpy; 00202 using ::wmemmove; 00203 using ::wmemset; 00204 using ::wprintf; 00205 using ::wscanf; 00206 using ::wcschr; 00207 using ::wcspbrk; 00208 using ::wcsrchr; 00209 using ::wcsstr; 00210 using ::wmemchr; 00211 00212 #ifndef __CORRECT_ISO_CPP_WCHAR_H_PROTO 00213 inline wchar_t* 00214 wcschr(wchar_t* __p, wchar_t __c) 00215 { return wcschr(const_cast<const wchar_t*>(__p), __c); } 00216 00217 inline wchar_t* 00218 wcspbrk(wchar_t* __s1, const wchar_t* __s2) 00219 { return wcspbrk(const_cast<const wchar_t*>(__s1), __s2); } 00220 00221 inline wchar_t* 00222 wcsrchr(wchar_t* __p, wchar_t __c) 00223 { return wcsrchr(const_cast<const wchar_t*>(__p), __c); } 00224 00225 inline wchar_t* 00226 wcsstr(wchar_t* __s1, const wchar_t* __s2) 00227 { return wcsstr(const_cast<const wchar_t*>(__s1), __s2); } 00228 00229 inline wchar_t* 00230 wmemchr(wchar_t* __p, wchar_t __c, size_t __n) 00231 { return wmemchr(const_cast<const wchar_t*>(__p), __c, __n); } 00232 #endif 00233 00234 _GLIBCXX_END_NAMESPACE 00235 00236 #if _GLIBCXX_USE_C99 00237 00238 #undef wcstold 00239 #undef wcstoll 00240 #undef wcstoull 00241 00242 _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) 00243 00244 #if _GLIBCXX_USE_C99_CHECK || _GLIBCXX_USE_C99_DYNAMIC 00245 extern "C" long double 00246 (wcstold)(const wchar_t * restrict, wchar_t ** restrict); 00247 #endif 00248 #if !_GLIBCXX_USE_C99_DYNAMIC 00249 using ::wcstold; 00250 #endif 00251 #if _GLIBCXX_USE_C99_LONG_LONG_CHECK || _GLIBCXX_USE_C99_LONG_LONG_DYNAMIC 00252 extern "C" long long int 00253 (wcstoll)(const wchar_t * restrict, wchar_t ** restrict, int); 00254 extern "C" unsigned long long int 00255 (wcstoull)(const wchar_t * restrict, wchar_t ** restrict, int); 00256 #endif 00257 #if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC 00258 using ::wcstoll; 00259 using ::wcstoull; 00260 #endif 00261 00262 _GLIBCXX_END_NAMESPACE 00263 00264 _GLIBCXX_BEGIN_NAMESPACE(std) 00265 00266 using ::__gnu_cxx::wcstold; 00267 using ::__gnu_cxx::wcstoll; 00268 using ::__gnu_cxx::wcstoull; 00269 00270 _GLIBCXX_END_NAMESPACE 00271 00272 #endif 00273 00274 #endif //_GLIBCXX_USE_WCHAR_T 00275 00276 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00277 # if defined(_GLIBCXX_INCLUDE_AS_TR1) 00278 # error C++0x header cannot be included from TR1 header 00279 # endif 00280 # if defined(_GLIBCXX_INCLUDE_AS_CXX0X) 00281 # include <tr1_impl/cwchar> 00282 # else 00283 # define _GLIBCXX_INCLUDE_AS_CXX0X 00284 # define _GLIBCXX_BEGIN_NAMESPACE_TR1 00285 # define _GLIBCXX_END_NAMESPACE_TR1 00286 # define _GLIBCXX_TR1 00287 # include <tr1_impl/cwchar> 00288 # undef _GLIBCXX_TR1 00289 # undef _GLIBCXX_END_NAMESPACE_TR1 00290 # undef _GLIBCXX_BEGIN_NAMESPACE_TR1 00291 # undef _GLIBCXX_INCLUDE_AS_CXX0X 00292 # endif 00293 #endif 00294 00295 #endif