100db7afdSDavid E. O'Brien // -*- C++ -*- forwarding header.
200db7afdSDavid E. O'Brien 
3*f8a1b7d9SAlexander Kabaev // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
400db7afdSDavid E. O'Brien // Free Software Foundation, Inc.
500db7afdSDavid E. O'Brien //
600db7afdSDavid E. O'Brien // This file is part of the GNU ISO C++ Library.  This library is free
700db7afdSDavid E. O'Brien // software; you can redistribute it and/or modify it under the
800db7afdSDavid E. O'Brien // terms of the GNU General Public License as published by the
900db7afdSDavid E. O'Brien // Free Software Foundation; either version 2, or (at your option)
1000db7afdSDavid E. O'Brien // any later version.
1100db7afdSDavid E. O'Brien 
1200db7afdSDavid E. O'Brien // This library is distributed in the hope that it will be useful,
1300db7afdSDavid E. O'Brien // but WITHOUT ANY WARRANTY; without even the implied warranty of
1400db7afdSDavid E. O'Brien // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1500db7afdSDavid E. O'Brien // GNU General Public License for more details.
1600db7afdSDavid E. O'Brien 
1700db7afdSDavid E. O'Brien // You should have received a copy of the GNU General Public License along
1800db7afdSDavid E. O'Brien // with this library; see the file COPYING.  If not, write to the Free
19*f8a1b7d9SAlexander Kabaev // Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
2000db7afdSDavid E. O'Brien // USA.
2100db7afdSDavid E. O'Brien 
2200db7afdSDavid E. O'Brien // As a special exception, you may use this file as part of a free software
2300db7afdSDavid E. O'Brien // library without restriction.  Specifically, if other files instantiate
2400db7afdSDavid E. O'Brien // templates or use macros or inline functions from this file, or you compile
2500db7afdSDavid E. O'Brien // this file and link it with other files to produce an executable, this
2600db7afdSDavid E. O'Brien // file does not by itself cause the resulting executable to be covered by
2700db7afdSDavid E. O'Brien // the GNU General Public License.  This exception does not however
2800db7afdSDavid E. O'Brien // invalidate any other reasons why the executable file might be covered by
2900db7afdSDavid E. O'Brien // the GNU General Public License.
3000db7afdSDavid E. O'Brien 
31*f8a1b7d9SAlexander Kabaev /** @file include/cwchar
3200db7afdSDavid E. O'Brien  *  This is a Standard C++ Library file.  You should @c #include this file
3300db7afdSDavid E. O'Brien  *  in your programs, rather than any of the "*.h" implementation files.
3400db7afdSDavid E. O'Brien  *
3500db7afdSDavid E. O'Brien  *  This is the C++ version of the Standard C Library header @c wchar.h,
3600db7afdSDavid E. O'Brien  *  and its contents are (mostly) the same as that header, but are all
37*f8a1b7d9SAlexander Kabaev  *  contained in the namespace @c std (except for names which are defined
38*f8a1b7d9SAlexander Kabaev  *  as macros in C).
3900db7afdSDavid E. O'Brien  */
4000db7afdSDavid E. O'Brien 
41*f8a1b7d9SAlexander Kabaev //
42*f8a1b7d9SAlexander Kabaev // ISO C++ 14882: 21.4
43*f8a1b7d9SAlexander Kabaev //
44*f8a1b7d9SAlexander Kabaev 
45ffeaf689SAlexander Kabaev #ifndef _GLIBCXX_CWCHAR
46ffeaf689SAlexander Kabaev #define _GLIBCXX_CWCHAR 1
4700db7afdSDavid E. O'Brien 
4800db7afdSDavid E. O'Brien #pragma GCC system_header
4900db7afdSDavid E. O'Brien 
5000db7afdSDavid E. O'Brien #include <bits/c++config.h>
5100db7afdSDavid E. O'Brien #include <cstddef>
5200db7afdSDavid E. O'Brien #include <ctime>
5300db7afdSDavid E. O'Brien 
54ffeaf689SAlexander Kabaev #if _GLIBCXX_HAVE_WCHAR_H
5500db7afdSDavid E. O'Brien #include <wchar.h>
5600db7afdSDavid E. O'Brien #endif
5700db7afdSDavid E. O'Brien 
5800db7afdSDavid E. O'Brien // Need to do a bit of trickery here with mbstate_t as char_traits
5900db7afdSDavid E. O'Brien // assumes it is in wchar.h, regardless of wchar_t specializations.
60ffeaf689SAlexander Kabaev #ifndef _GLIBCXX_HAVE_MBSTATE_T
6100db7afdSDavid E. O'Brien extern "C"
6200db7afdSDavid E. O'Brien {
6300db7afdSDavid E. O'Brien   typedef struct
6400db7afdSDavid E. O'Brien   {
6500db7afdSDavid E. O'Brien     int __fill[6];
6600db7afdSDavid E. O'Brien   } mbstate_t;
6700db7afdSDavid E. O'Brien }
6800db7afdSDavid E. O'Brien #endif
6900db7afdSDavid E. O'Brien 
70*f8a1b7d9SAlexander Kabaev _GLIBCXX_BEGIN_NAMESPACE(std)
71*f8a1b7d9SAlexander Kabaev 
7200db7afdSDavid E. O'Brien   using ::mbstate_t;
73*f8a1b7d9SAlexander Kabaev 
74*f8a1b7d9SAlexander Kabaev _GLIBCXX_END_NAMESPACE
7500db7afdSDavid E. O'Brien 
7600db7afdSDavid E. O'Brien // Get rid of those macros defined in <wchar.h> in lieu of real functions.
7700db7afdSDavid E. O'Brien #undef btowc
7800db7afdSDavid E. O'Brien #undef fgetwc
7900db7afdSDavid E. O'Brien #undef fgetws
8000db7afdSDavid E. O'Brien #undef fputwc
8100db7afdSDavid E. O'Brien #undef fputws
8200db7afdSDavid E. O'Brien #undef fwide
8300db7afdSDavid E. O'Brien #undef fwprintf
8400db7afdSDavid E. O'Brien #undef fwscanf
8500db7afdSDavid E. O'Brien #undef getwc
8600db7afdSDavid E. O'Brien #undef getwchar
8700db7afdSDavid E. O'Brien #undef mbrlen
8800db7afdSDavid E. O'Brien #undef mbrtowc
8900db7afdSDavid E. O'Brien #undef mbsinit
9000db7afdSDavid E. O'Brien #undef mbsrtowcs
9100db7afdSDavid E. O'Brien #undef putwc
9200db7afdSDavid E. O'Brien #undef putwchar
9300db7afdSDavid E. O'Brien #undef swprintf
9400db7afdSDavid E. O'Brien #undef swscanf
9500db7afdSDavid E. O'Brien #undef ungetwc
9600db7afdSDavid E. O'Brien #undef vfwprintf
97ffeaf689SAlexander Kabaev #if _GLIBCXX_HAVE_VFWSCANF
9800db7afdSDavid E. O'Brien # undef vfwscanf
99ffeaf689SAlexander Kabaev #endif
10000db7afdSDavid E. O'Brien #undef vswprintf
101ffeaf689SAlexander Kabaev #if _GLIBCXX_HAVE_VSWSCANF
10200db7afdSDavid E. O'Brien # undef vswscanf
103ffeaf689SAlexander Kabaev #endif
10400db7afdSDavid E. O'Brien #undef vwprintf
105ffeaf689SAlexander Kabaev #if _GLIBCXX_HAVE_VWSCANF
10600db7afdSDavid E. O'Brien # undef vwscanf
107ffeaf689SAlexander Kabaev #endif
10800db7afdSDavid E. O'Brien #undef wcrtomb
10900db7afdSDavid E. O'Brien #undef wcscat
11000db7afdSDavid E. O'Brien #undef wcschr
11100db7afdSDavid E. O'Brien #undef wcscmp
11200db7afdSDavid E. O'Brien #undef wcscoll
11300db7afdSDavid E. O'Brien #undef wcscpy
11400db7afdSDavid E. O'Brien #undef wcscspn
11500db7afdSDavid E. O'Brien #undef wcsftime
11600db7afdSDavid E. O'Brien #undef wcslen
11700db7afdSDavid E. O'Brien #undef wcsncat
11800db7afdSDavid E. O'Brien #undef wcsncmp
11900db7afdSDavid E. O'Brien #undef wcsncpy
12000db7afdSDavid E. O'Brien #undef wcspbrk
12100db7afdSDavid E. O'Brien #undef wcsrchr
12200db7afdSDavid E. O'Brien #undef wcsrtombs
12300db7afdSDavid E. O'Brien #undef wcsspn
12400db7afdSDavid E. O'Brien #undef wcsstr
12500db7afdSDavid E. O'Brien #undef wcstod
126ffeaf689SAlexander Kabaev #if _GLIBCXX_HAVE_WCSTOF
12700db7afdSDavid E. O'Brien # undef wcstof
128ffeaf689SAlexander Kabaev #endif
12900db7afdSDavid E. O'Brien #undef wcstok
13000db7afdSDavid E. O'Brien #undef wcstol
13100db7afdSDavid E. O'Brien #undef wcstoul
13200db7afdSDavid E. O'Brien #undef wcsxfrm
13300db7afdSDavid E. O'Brien #undef wctob
13400db7afdSDavid E. O'Brien #undef wmemchr
13500db7afdSDavid E. O'Brien #undef wmemcmp
13600db7afdSDavid E. O'Brien #undef wmemcpy
13700db7afdSDavid E. O'Brien #undef wmemmove
13800db7afdSDavid E. O'Brien #undef wmemset
13900db7afdSDavid E. O'Brien #undef wprintf
14000db7afdSDavid E. O'Brien #undef wscanf
14100db7afdSDavid E. O'Brien 
142ffeaf689SAlexander Kabaev #if _GLIBCXX_USE_WCHAR_T
143*f8a1b7d9SAlexander Kabaev 
144*f8a1b7d9SAlexander Kabaev _GLIBCXX_BEGIN_NAMESPACE(std)
145*f8a1b7d9SAlexander Kabaev 
14600db7afdSDavid E. O'Brien   using ::wint_t;
14700db7afdSDavid E. O'Brien 
14800db7afdSDavid E. O'Brien   using ::btowc;
14900db7afdSDavid E. O'Brien   using ::fgetwc;
15000db7afdSDavid E. O'Brien   using ::fgetws;
15100db7afdSDavid E. O'Brien   using ::fputwc;
15200db7afdSDavid E. O'Brien   using ::fputws;
15300db7afdSDavid E. O'Brien   using ::fwide;
15400db7afdSDavid E. O'Brien   using ::fwprintf;
15500db7afdSDavid E. O'Brien   using ::fwscanf;
15600db7afdSDavid E. O'Brien   using ::getwc;
15700db7afdSDavid E. O'Brien   using ::getwchar;
15800db7afdSDavid E. O'Brien   using ::mbrlen;
15900db7afdSDavid E. O'Brien   using ::mbrtowc;
16000db7afdSDavid E. O'Brien   using ::mbsinit;
16100db7afdSDavid E. O'Brien   using ::mbsrtowcs;
16200db7afdSDavid E. O'Brien   using ::putwc;
16300db7afdSDavid E. O'Brien   using ::putwchar;
16400db7afdSDavid E. O'Brien   using ::swprintf;
16500db7afdSDavid E. O'Brien   using ::swscanf;
16600db7afdSDavid E. O'Brien   using ::ungetwc;
16700db7afdSDavid E. O'Brien   using ::vfwprintf;
168ffeaf689SAlexander Kabaev #if _GLIBCXX_HAVE_VFWSCANF
16900db7afdSDavid E. O'Brien   using ::vfwscanf;
170ffeaf689SAlexander Kabaev #endif
17100db7afdSDavid E. O'Brien   using ::vswprintf;
172ffeaf689SAlexander Kabaev #if _GLIBCXX_HAVE_VSWSCANF
17300db7afdSDavid E. O'Brien   using ::vswscanf;
174ffeaf689SAlexander Kabaev #endif
17500db7afdSDavid E. O'Brien   using ::vwprintf;
176ffeaf689SAlexander Kabaev #if _GLIBCXX_HAVE_VWSCANF
17700db7afdSDavid E. O'Brien   using ::vwscanf;
178ffeaf689SAlexander Kabaev #endif
17900db7afdSDavid E. O'Brien   using ::wcrtomb;
18000db7afdSDavid E. O'Brien   using ::wcscat;
18100db7afdSDavid E. O'Brien   using ::wcscmp;
18200db7afdSDavid E. O'Brien   using ::wcscoll;
18300db7afdSDavid E. O'Brien   using ::wcscpy;
18400db7afdSDavid E. O'Brien   using ::wcscspn;
18500db7afdSDavid E. O'Brien   using ::wcsftime;
18600db7afdSDavid E. O'Brien   using ::wcslen;
18700db7afdSDavid E. O'Brien   using ::wcsncat;
18800db7afdSDavid E. O'Brien   using ::wcsncmp;
18900db7afdSDavid E. O'Brien   using ::wcsncpy;
19000db7afdSDavid E. O'Brien   using ::wcsrtombs;
19100db7afdSDavid E. O'Brien   using ::wcsspn;
19200db7afdSDavid E. O'Brien   using ::wcstod;
193ffeaf689SAlexander Kabaev #if _GLIBCXX_HAVE_WCSTOF
19400db7afdSDavid E. O'Brien   using ::wcstof;
195ffeaf689SAlexander Kabaev #endif
19600db7afdSDavid E. O'Brien   using ::wcstok;
19700db7afdSDavid E. O'Brien   using ::wcstol;
19800db7afdSDavid E. O'Brien   using ::wcstoul;
19900db7afdSDavid E. O'Brien   using ::wcsxfrm;
20000db7afdSDavid E. O'Brien   using ::wctob;
20100db7afdSDavid E. O'Brien   using ::wmemcmp;
20200db7afdSDavid E. O'Brien   using ::wmemcpy;
20300db7afdSDavid E. O'Brien   using ::wmemmove;
20400db7afdSDavid E. O'Brien   using ::wmemset;
20500db7afdSDavid E. O'Brien   using ::wprintf;
20600db7afdSDavid E. O'Brien   using ::wscanf;
20700db7afdSDavid E. O'Brien 
20800db7afdSDavid E. O'Brien   using ::wcschr;
20900db7afdSDavid E. O'Brien 
21000db7afdSDavid E. O'Brien   inline wchar_t*
wcschr(wchar_t * __p,wchar_t __c)21100db7afdSDavid E. O'Brien   wcschr(wchar_t* __p, wchar_t __c)
21200db7afdSDavid E. O'Brien   { return wcschr(const_cast<const wchar_t*>(__p), __c); }
21300db7afdSDavid E. O'Brien 
21400db7afdSDavid E. O'Brien   using ::wcspbrk;
21500db7afdSDavid E. O'Brien 
21600db7afdSDavid E. O'Brien   inline wchar_t*
wcspbrk(wchar_t * __s1,const wchar_t * __s2)217*f8a1b7d9SAlexander Kabaev   wcspbrk(wchar_t* __s1, const wchar_t* __s2)
21800db7afdSDavid E. O'Brien   { return wcspbrk(const_cast<const wchar_t*>(__s1), __s2); }
21900db7afdSDavid E. O'Brien 
22000db7afdSDavid E. O'Brien   using ::wcsrchr;
22100db7afdSDavid E. O'Brien 
22200db7afdSDavid E. O'Brien   inline wchar_t*
wcsrchr(wchar_t * __p,wchar_t __c)22300db7afdSDavid E. O'Brien   wcsrchr(wchar_t* __p, wchar_t __c)
22400db7afdSDavid E. O'Brien   { return wcsrchr(const_cast<const wchar_t*>(__p), __c); }
22500db7afdSDavid E. O'Brien 
22600db7afdSDavid E. O'Brien   using ::wcsstr;
22700db7afdSDavid E. O'Brien 
22800db7afdSDavid E. O'Brien   inline wchar_t*
wcsstr(wchar_t * __s1,const wchar_t * __s2)229ffeaf689SAlexander Kabaev   wcsstr(wchar_t* __s1, const wchar_t* __s2)
23000db7afdSDavid E. O'Brien   { return wcsstr(const_cast<const wchar_t*>(__s1), __s2); }
23100db7afdSDavid E. O'Brien 
23200db7afdSDavid E. O'Brien   using ::wmemchr;
23300db7afdSDavid E. O'Brien 
23400db7afdSDavid E. O'Brien   inline wchar_t*
wmemchr(wchar_t * __p,wchar_t __c,size_t __n)23500db7afdSDavid E. O'Brien   wmemchr(wchar_t* __p, wchar_t __c, size_t __n)
23600db7afdSDavid E. O'Brien   { return wmemchr(const_cast<const wchar_t*>(__p), __c, __n); }
237*f8a1b7d9SAlexander Kabaev 
238*f8a1b7d9SAlexander Kabaev _GLIBCXX_END_NAMESPACE
23900db7afdSDavid E. O'Brien 
240ffeaf689SAlexander Kabaev #if _GLIBCXX_USE_C99
24100db7afdSDavid E. O'Brien 
24200db7afdSDavid E. O'Brien #undef wcstold
24300db7afdSDavid E. O'Brien #undef wcstoll
24400db7afdSDavid E. O'Brien #undef wcstoull
24500db7afdSDavid E. O'Brien 
246*f8a1b7d9SAlexander Kabaev _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
247*f8a1b7d9SAlexander Kabaev 
248ffeaf689SAlexander Kabaev #if _GLIBCXX_USE_C99_CHECK || _GLIBCXX_USE_C99_DYNAMIC
2491b86b14eSAlexander Kabaev   extern "C" long double
2501b86b14eSAlexander Kabaev     (wcstold)(const wchar_t * restrict, wchar_t ** restrict);
2511b86b14eSAlexander Kabaev #endif
252ffeaf689SAlexander Kabaev #if !_GLIBCXX_USE_C99_DYNAMIC
25300db7afdSDavid E. O'Brien   using ::wcstold;
2541b86b14eSAlexander Kabaev #endif
255ffeaf689SAlexander Kabaev #if _GLIBCXX_USE_C99_LONG_LONG_CHECK || _GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
2561b86b14eSAlexander Kabaev   extern "C" long long int
2571b86b14eSAlexander Kabaev     (wcstoll)(const wchar_t * restrict, wchar_t ** restrict, int);
2581b86b14eSAlexander Kabaev   extern "C" unsigned long long int
2591b86b14eSAlexander Kabaev     (wcstoull)(const wchar_t * restrict, wchar_t ** restrict, int);
2601b86b14eSAlexander Kabaev #endif
261ffeaf689SAlexander Kabaev #if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
26200db7afdSDavid E. O'Brien   using ::wcstoll;
26300db7afdSDavid E. O'Brien   using ::wcstoull;
2641b86b14eSAlexander Kabaev #endif
26500db7afdSDavid E. O'Brien 
266*f8a1b7d9SAlexander Kabaev _GLIBCXX_END_NAMESPACE
267*f8a1b7d9SAlexander Kabaev 
268*f8a1b7d9SAlexander Kabaev _GLIBCXX_BEGIN_NAMESPACE(std)
269*f8a1b7d9SAlexander Kabaev 
270*f8a1b7d9SAlexander Kabaev   using ::__gnu_cxx::wcstold;
271*f8a1b7d9SAlexander Kabaev   using ::__gnu_cxx::wcstoll;
272*f8a1b7d9SAlexander Kabaev   using ::__gnu_cxx::wcstoull;
273*f8a1b7d9SAlexander Kabaev 
274*f8a1b7d9SAlexander Kabaev _GLIBCXX_END_NAMESPACE
275*f8a1b7d9SAlexander Kabaev 
27600db7afdSDavid E. O'Brien #endif
27700db7afdSDavid E. O'Brien 
278ffeaf689SAlexander Kabaev #endif //_GLIBCXX_USE_WCHAR_T
27900db7afdSDavid E. O'Brien 
28000db7afdSDavid E. O'Brien #endif
281