libstdc++
|
00001 // -*- C++ -*- forwarding header. 00002 00003 // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 00004 // 2006, 2007, 2008, 2009, 2010 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 @a *.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 00045 #if _GLIBCXX_HAVE_WCHAR_H 00046 #include <wchar.h> 00047 #endif 00048 00049 #ifndef _GLIBCXX_CWCHAR 00050 #define _GLIBCXX_CWCHAR 1 00051 00052 // Need to do a bit of trickery here with mbstate_t as char_traits 00053 // assumes it is in wchar.h, regardless of wchar_t specializations. 00054 #ifndef _GLIBCXX_HAVE_MBSTATE_T 00055 extern "C" 00056 { 00057 typedef struct 00058 { 00059 int __fill[6]; 00060 } mbstate_t; 00061 } 00062 #endif 00063 00064 namespace std 00065 { 00066 using ::mbstate_t; 00067 } // namespace std 00068 00069 // Get rid of those macros defined in <wchar.h> in lieu of real functions. 00070 #undef btowc 00071 #undef fgetwc 00072 #undef fgetws 00073 #undef fputwc 00074 #undef fputws 00075 #undef fwide 00076 #undef fwprintf 00077 #undef fwscanf 00078 #undef getwc 00079 #undef getwchar 00080 #undef mbrlen 00081 #undef mbrtowc 00082 #undef mbsinit 00083 #undef mbsrtowcs 00084 #undef putwc 00085 #undef putwchar 00086 #undef swprintf 00087 #undef swscanf 00088 #undef ungetwc 00089 #undef vfwprintf 00090 #if _GLIBCXX_HAVE_VFWSCANF 00091 # undef vfwscanf 00092 #endif 00093 #undef vswprintf 00094 #if _GLIBCXX_HAVE_VSWSCANF 00095 # undef vswscanf 00096 #endif 00097 #undef vwprintf 00098 #if _GLIBCXX_HAVE_VWSCANF 00099 # undef vwscanf 00100 #endif 00101 #undef wcrtomb 00102 #undef wcscat 00103 #undef wcschr 00104 #undef wcscmp 00105 #undef wcscoll 00106 #undef wcscpy 00107 #undef wcscspn 00108 #undef wcsftime 00109 #undef wcslen 00110 #undef wcsncat 00111 #undef wcsncmp 00112 #undef wcsncpy 00113 #undef wcspbrk 00114 #undef wcsrchr 00115 #undef wcsrtombs 00116 #undef wcsspn 00117 #undef wcsstr 00118 #undef wcstod 00119 #if _GLIBCXX_HAVE_WCSTOF 00120 # undef wcstof 00121 #endif 00122 #undef wcstok 00123 #undef wcstol 00124 #undef wcstoul 00125 #undef wcsxfrm 00126 #undef wctob 00127 #undef wmemchr 00128 #undef wmemcmp 00129 #undef wmemcpy 00130 #undef wmemmove 00131 #undef wmemset 00132 #undef wprintf 00133 #undef wscanf 00134 00135 #if _GLIBCXX_USE_WCHAR_T 00136 00137 namespace std _GLIBCXX_VISIBILITY(default) 00138 { 00139 _GLIBCXX_BEGIN_NAMESPACE_VERSION 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_VERSION 00235 } // namespace 00236 00237 #if _GLIBCXX_USE_C99 00238 00239 #undef wcstold 00240 #undef wcstoll 00241 #undef wcstoull 00242 00243 namespace __gnu_cxx 00244 { 00245 #if _GLIBCXX_USE_C99_CHECK || _GLIBCXX_USE_C99_DYNAMIC 00246 extern "C" long double 00247 (wcstold)(const wchar_t * __restrict, wchar_t ** __restrict) throw (); 00248 #endif 00249 #if !_GLIBCXX_USE_C99_DYNAMIC 00250 using ::wcstold; 00251 #endif 00252 #if _GLIBCXX_USE_C99_LONG_LONG_CHECK || _GLIBCXX_USE_C99_LONG_LONG_DYNAMIC 00253 extern "C" long long int 00254 (wcstoll)(const wchar_t * __restrict, wchar_t ** __restrict, int) throw (); 00255 extern "C" unsigned long long int 00256 (wcstoull)(const wchar_t * __restrict, wchar_t ** __restrict, int) throw (); 00257 #endif 00258 #if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC 00259 using ::wcstoll; 00260 using ::wcstoull; 00261 #endif 00262 } // namespace __gnu_cxx 00263 00264 namespace std 00265 { 00266 using ::__gnu_cxx::wcstold; 00267 using ::__gnu_cxx::wcstoll; 00268 using ::__gnu_cxx::wcstoull; 00269 } // namespace 00270 00271 #endif 00272 00273 #endif //_GLIBCXX_USE_WCHAR_T 00274 00275 #ifdef __GXX_EXPERIMENTAL_CXX0X__ 00276 00277 #ifdef _GLIBCXX_USE_WCHAR_T 00278 00279 namespace std 00280 { 00281 #if _GLIBCXX_HAVE_WCSTOF 00282 using std::wcstof; 00283 #endif 00284 #if _GLIBCXX_HAVE_VFWSCANF 00285 using std::vfwscanf; 00286 #endif 00287 #if _GLIBCXX_HAVE_VSWSCANF 00288 using std::vswscanf; 00289 #endif 00290 #if _GLIBCXX_HAVE_VWSCANF 00291 using std::vwscanf; 00292 #endif 00293 00294 #if _GLIBCXX_USE_C99 00295 using std::wcstold; 00296 using std::wcstoll; 00297 using std::wcstoull; 00298 #endif 00299 } // namespace 00300 00301 #endif // _GLIBCXX_USE_WCHAR_T 00302 00303 #endif // __GXX_EXPERIMENTAL_CXX0X__ 00304 00305 #endif