1// -*- C++ -*- forwarding header.
2
3// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
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, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
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/** @file include/cwchar
32 *  This is a Standard C++ Library file.  You should @c #include this file
33 *  in your programs, rather than any of the "*.h" implementation files.
34 *
35 *  This is the C++ version of the Standard C Library header @c wchar.h,
36 *  and its contents are (mostly) the same as that header, but are all
37 *  contained in the namespace @c std (except for names which are defined
38 *  as macros in C).
39 */
40
41//
42// ISO C++ 14882: 21.4
43//
44
45#ifndef _GLIBCXX_CWCHAR
46#define _GLIBCXX_CWCHAR 1
47
48#pragma GCC system_header
49
50#include <bits/c++config.h>
51#include <cstddef>
52#include <ctime>
53
54#if _GLIBCXX_HAVE_WCHAR_H
55#include <wchar.h>
56#endif
57
58// Need to do a bit of trickery here with mbstate_t as char_traits
59// assumes it is in wchar.h, regardless of wchar_t specializations.
60#ifndef _GLIBCXX_HAVE_MBSTATE_T
61extern "C"
62{
63  typedef struct
64  {
65    int __fill[6];
66  } mbstate_t;
67}
68#endif
69
70_GLIBCXX_BEGIN_NAMESPACE(std)
71
72  using ::mbstate_t;
73
74_GLIBCXX_END_NAMESPACE
75
76// Get rid of those macros defined in <wchar.h> in lieu of real functions.
77#undef btowc
78#undef fgetwc
79#undef fgetws
80#undef fputwc
81#undef fputws
82#undef fwide
83#undef fwprintf
84#undef fwscanf
85#undef getwc
86#undef getwchar
87#undef mbrlen
88#undef mbrtowc
89#undef mbsinit
90#undef mbsrtowcs
91#undef putwc
92#undef putwchar
93#undef swprintf
94#undef swscanf
95#undef ungetwc
96#undef vfwprintf
97#if _GLIBCXX_HAVE_VFWSCANF
98# undef vfwscanf
99#endif
100#undef vswprintf
101#if _GLIBCXX_HAVE_VSWSCANF
102# undef vswscanf
103#endif
104#undef vwprintf
105#if _GLIBCXX_HAVE_VWSCANF
106# undef vwscanf
107#endif
108#undef wcrtomb
109#undef wcscat
110#undef wcschr
111#undef wcscmp
112#undef wcscoll
113#undef wcscpy
114#undef wcscspn
115#undef wcsftime
116#undef wcslen
117#undef wcsncat
118#undef wcsncmp
119#undef wcsncpy
120#undef wcspbrk
121#undef wcsrchr
122#undef wcsrtombs
123#undef wcsspn
124#undef wcsstr
125#undef wcstod
126#if _GLIBCXX_HAVE_WCSTOF
127# undef wcstof
128#endif
129#undef wcstok
130#undef wcstol
131#undef wcstoul
132#undef wcsxfrm
133#undef wctob
134#undef wmemchr
135#undef wmemcmp
136#undef wmemcpy
137#undef wmemmove
138#undef wmemset
139#undef wprintf
140#undef wscanf
141
142#if _GLIBCXX_USE_WCHAR_T
143
144_GLIBCXX_BEGIN_NAMESPACE(std)
145
146  using ::wint_t;
147
148  using ::btowc;
149  using ::fgetwc;
150  using ::fgetws;
151  using ::fputwc;
152  using ::fputws;
153  using ::fwide;
154  using ::fwprintf;
155  using ::fwscanf;
156  using ::getwc;
157  using ::getwchar;
158  using ::mbrlen;
159  using ::mbrtowc;
160  using ::mbsinit;
161  using ::mbsrtowcs;
162  using ::putwc;
163  using ::putwchar;
164  using ::swprintf;
165  using ::swscanf;
166  using ::ungetwc;
167  using ::vfwprintf;
168#if _GLIBCXX_HAVE_VFWSCANF
169  using ::vfwscanf;
170#endif
171  using ::vswprintf;
172#if _GLIBCXX_HAVE_VSWSCANF
173  using ::vswscanf;
174#endif
175  using ::vwprintf;
176#if _GLIBCXX_HAVE_VWSCANF
177  using ::vwscanf;
178#endif
179  using ::wcrtomb;
180  using ::wcscat;
181  using ::wcscmp;
182  using ::wcscoll;
183  using ::wcscpy;
184  using ::wcscspn;
185  using ::wcsftime;
186  using ::wcslen;
187  using ::wcsncat;
188  using ::wcsncmp;
189  using ::wcsncpy;
190  using ::wcsrtombs;
191  using ::wcsspn;
192  using ::wcstod;
193#if _GLIBCXX_HAVE_WCSTOF
194  using ::wcstof;
195#endif
196  using ::wcstok;
197  using ::wcstol;
198  using ::wcstoul;
199  using ::wcsxfrm;
200  using ::wctob;
201  using ::wmemcmp;
202  using ::wmemcpy;
203  using ::wmemmove;
204  using ::wmemset;
205  using ::wprintf;
206  using ::wscanf;
207
208  using ::wcschr;
209
210  inline wchar_t*
211  wcschr(wchar_t* __p, wchar_t __c)
212  { return wcschr(const_cast<const wchar_t*>(__p), __c); }
213
214  using ::wcspbrk;
215
216  inline wchar_t*
217  wcspbrk(wchar_t* __s1, const wchar_t* __s2)
218  { return wcspbrk(const_cast<const wchar_t*>(__s1), __s2); }
219
220  using ::wcsrchr;
221
222  inline wchar_t*
223  wcsrchr(wchar_t* __p, wchar_t __c)
224  { return wcsrchr(const_cast<const wchar_t*>(__p), __c); }
225
226  using ::wcsstr;
227
228  inline wchar_t*
229  wcsstr(wchar_t* __s1, const wchar_t* __s2)
230  { return wcsstr(const_cast<const wchar_t*>(__s1), __s2); }
231
232  using ::wmemchr;
233
234  inline wchar_t*
235  wmemchr(wchar_t* __p, wchar_t __c, size_t __n)
236  { return wmemchr(const_cast<const wchar_t*>(__p), __c, __n); }
237
238_GLIBCXX_END_NAMESPACE
239
240#if _GLIBCXX_USE_C99
241
242#undef wcstold
243#undef wcstoll
244#undef wcstoull
245
246_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
247
248#if _GLIBCXX_USE_C99_CHECK || _GLIBCXX_USE_C99_DYNAMIC
249  extern "C" long double
250    (wcstold)(const wchar_t * restrict, wchar_t ** restrict);
251#endif
252#if !_GLIBCXX_USE_C99_DYNAMIC
253  using ::wcstold;
254#endif
255#if _GLIBCXX_USE_C99_LONG_LONG_CHECK || _GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
256  extern "C" long long int
257    (wcstoll)(const wchar_t * restrict, wchar_t ** restrict, int);
258  extern "C" unsigned long long int
259    (wcstoull)(const wchar_t * restrict, wchar_t ** restrict, int);
260#endif
261#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
262  using ::wcstoll;
263  using ::wcstoull;
264#endif
265
266_GLIBCXX_END_NAMESPACE
267
268_GLIBCXX_BEGIN_NAMESPACE(std)
269
270  using ::__gnu_cxx::wcstold;
271  using ::__gnu_cxx::wcstoll;
272  using ::__gnu_cxx::wcstoull;
273
274_GLIBCXX_END_NAMESPACE
275
276#endif
277
278#endif //_GLIBCXX_USE_WCHAR_T
279
280#endif
281