1// -*- C++ -*-
2//===--------------------------- cwchar -----------------------------------===//
3//
4//                     The LLVM Compiler Infrastructure
5//
6// This file is dual licensed under the MIT and the University of Illinois Open
7// Source Licenses. See LICENSE.TXT for details.
8//
9//===----------------------------------------------------------------------===//
10
11#ifndef _LIBCPP_CWCHAR
12#define _LIBCPP_CWCHAR
13
14/*
15    cwchar synopsis
16
17Macros:
18
19    NULL
20    WCHAR_MAX
21    WCHAR_MIN
22    WEOF
23
24namespace std
25{
26
27Types:
28
29    mbstate_t
30    size_t
31    tm
32    wint_t
33
34int fwprintf(FILE* restrict stream, const wchar_t* restrict format, ...);
35int fwscanf(FILE* restrict stream, const wchar_t* restrict format, ...);
36int swprintf(wchar_t* restrict s, size_t n, const wchar_t* restrict format, ...);
37int swscanf(const wchar_t* restrict s, const wchar_t* restrict format, ...);
38int vfwprintf(FILE* restrict stream, const wchar_t* restrict format, va_list arg);
39int vfwscanf(FILE* restrict stream, const wchar_t* restrict format, va_list arg);  // C99
40int vswprintf(wchar_t* restrict s, size_t n, const wchar_t* restrict format, va_list arg);
41int vswscanf(const wchar_t* restrict s, const wchar_t* restrict format, va_list arg);  // C99
42int vwprintf(const wchar_t* restrict format, va_list arg);
43int vwscanf(const wchar_t* restrict format, va_list arg);  // C99
44int wprintf(const wchar_t* restrict format, ...);
45int wscanf(const wchar_t* restrict format, ...);
46wint_t fgetwc(FILE* stream);
47wchar_t* fgetws(wchar_t* restrict s, int n, FILE* restrict stream);
48wint_t fputwc(wchar_t c, FILE* stream);
49int fputws(const wchar_t* restrict s, FILE* restrict stream);
50int fwide(FILE* stream, int mode);
51wint_t getwc(FILE* stream);
52wint_t getwchar();
53wint_t putwc(wchar_t c, FILE* stream);
54wint_t putwchar(wchar_t c);
55wint_t ungetwc(wint_t c, FILE* stream);
56double wcstod(const wchar_t* restrict nptr, wchar_t** restrict endptr);
57float wcstof(const wchar_t* restrict nptr, wchar_t** restrict endptr);         // C99
58long double wcstold(const wchar_t* restrict nptr, wchar_t** restrict endptr);  // C99
59long wcstol(const wchar_t* restrict nptr, wchar_t** restrict endptr, int base);
60long long wcstoll(const wchar_t* restrict nptr, wchar_t** restrict endptr, int base);  // C99
61unsigned long wcstoul(const wchar_t* restrict nptr, wchar_t** restrict endptr, int base);
62unsigned long long wcstoull(const wchar_t* restrict nptr, wchar_t** restrict endptr, int base);  // C99
63wchar_t* wcscpy(wchar_t* restrict s1, const wchar_t* restrict s2);
64wchar_t* wcsncpy(wchar_t* restrict s1, const wchar_t* restrict s2, size_t n);
65wchar_t* wcscat(wchar_t* restrict s1, const wchar_t* restrict s2);
66wchar_t* wcsncat(wchar_t* restrict s1, const wchar_t* restrict s2, size_t n);
67int wcscmp(const wchar_t* s1, const wchar_t* s2);
68int wcscoll(const wchar_t* s1, const wchar_t* s2);
69int wcsncmp(const wchar_t* s1, const wchar_t* s2, size_t n);
70size_t wcsxfrm(wchar_t* restrict s1, const wchar_t* restrict s2, size_t n);
71const wchar_t* wcschr(const wchar_t* s, wchar_t c);
72      wchar_t* wcschr(      wchar_t* s, wchar_t c);
73size_t wcscspn(const wchar_t* s1, const wchar_t* s2);
74size_t wcslen(const wchar_t* s);
75const wchar_t* wcspbrk(const wchar_t* s1, const wchar_t* s2);
76      wchar_t* wcspbrk(      wchar_t* s1, const wchar_t* s2);
77const wchar_t* wcsrchr(const wchar_t* s, wchar_t c);
78      wchar_t* wcsrchr(      wchar_t* s, wchar_t c);
79size_t wcsspn(const wchar_t* s1, const wchar_t* s2);
80const wchar_t* wcsstr(const wchar_t* s1, const wchar_t* s2);
81      wchar_t* wcsstr(      wchar_t* s1, const wchar_t* s2);
82wchar_t* wcstok(wchar_t* restrict s1, const wchar_t* restrict s2, wchar_t** restrict ptr);
83const wchar_t* wmemchr(const wchar_t* s, wchar_t c, size_t n);
84      wchar_t* wmemchr(      wchar_t* s, wchar_t c, size_t n);
85int wmemcmp(wchar_t* restrict s1, const wchar_t* restrict s2, size_t n);
86wchar_t* wmemcpy(wchar_t* restrict s1, const wchar_t* restrict s2, size_t n);
87wchar_t* wmemmove(wchar_t* s1, const wchar_t* s2, size_t n);
88wchar_t* wmemset(wchar_t* s, wchar_t c, size_t n);
89size_t wcsftime(wchar_t* restrict s, size_t maxsize, const wchar_t* restrict format,
90                const tm* restrict timeptr);
91wint_t btowc(int c);
92int wctob(wint_t c);
93int mbsinit(const mbstate_t* ps);
94size_t mbrlen(const char* restrict s, size_t n, mbstate_t* restrict ps);
95size_t mbrtowc(wchar_t* restrict pwc, const char* restrict s, size_t n, mbstate_t* restrict ps);
96size_t wcrtomb(char* restrict s, wchar_t wc, mbstate_t* restrict ps);
97size_t mbsrtowcs(wchar_t* restrict dst, const char** restrict src, size_t len,
98                 mbstate_t* restrict ps);
99size_t wcsrtombs(char* restrict dst, const wchar_t** restrict src, size_t len,
100                 mbstate_t* restrict ps);
101
102}  // std
103
104*/
105
106#include <__config>
107#include <cwctype>
108#include <wchar.h>
109#if defined(_LIBCPP_MSVCRT) || defined(__MINGW32__)
110#include <support/win32/support.h> // pull in *swprintf defines
111#endif // _LIBCPP_MSVCRT
112
113#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
114#pragma GCC system_header
115#endif
116
117_LIBCPP_BEGIN_NAMESPACE_STD
118
119using ::mbstate_t;
120using ::size_t;
121using ::tm;
122using ::wint_t;
123using ::FILE;
124using ::fwprintf;
125using ::fwscanf;
126using ::swprintf;
127using ::vfwprintf;
128using ::vswprintf;
129#ifndef _LIBCPP_MSVCRT
130using ::swscanf;
131using ::vfwscanf;
132using ::vswscanf;
133#endif // _LIBCPP_MSVCRT
134using ::fgetwc;
135using ::fgetws;
136using ::fputwc;
137using ::fputws;
138using ::fwide;
139using ::getwc;
140using ::putwc;
141using ::ungetwc;
142using ::wcstod;
143#ifndef _LIBCPP_MSVCRT
144using ::wcstof;
145using ::wcstold;
146#endif // _LIBCPP_MSVCRT
147using ::wcstol;
148#ifndef _LIBCPP_HAS_NO_LONG_LONG
149using ::wcstoll;
150#endif // _LIBCPP_HAS_NO_LONG_LONG
151using ::wcstoul;
152#ifndef _LIBCPP_HAS_NO_LONG_LONG
153using ::wcstoull;
154#endif // _LIBCPP_HAS_NO_LONG_LONG
155using ::wcscpy;
156using ::wcsncpy;
157using ::wcscat;
158using ::wcsncat;
159using ::wcscmp;
160using ::wcscoll;
161using ::wcsncmp;
162using ::wcsxfrm;
163
164#if defined(_WCHAR_H_CPLUSPLUS_98_CONFORMANCE_)
165
166using ::wcschr;
167using ::wcspbrk;
168using ::wcsrchr;
169using ::wcsstr;
170using ::wmemchr;
171
172#else
173
174inline _LIBCPP_INLINE_VISIBILITY const wchar_t* wcschr(const wchar_t* __s, wchar_t __c) {return ::wcschr(__s, __c);}
175inline _LIBCPP_INLINE_VISIBILITY       wchar_t* wcschr(      wchar_t* __s, wchar_t __c) {return ::wcschr(__s, __c);}
176
177inline _LIBCPP_INLINE_VISIBILITY const wchar_t* wcspbrk(const wchar_t* __s1, const wchar_t* __s2) {return ::wcspbrk(__s1, __s2);}
178inline _LIBCPP_INLINE_VISIBILITY       wchar_t* wcspbrk(      wchar_t* __s1, const wchar_t* __s2) {return ::wcspbrk(__s1, __s2);}
179
180inline _LIBCPP_INLINE_VISIBILITY const wchar_t* wcsrchr(const wchar_t* __s, wchar_t __c) {return ::wcsrchr(__s, __c);}
181inline _LIBCPP_INLINE_VISIBILITY       wchar_t* wcsrchr(      wchar_t* __s, wchar_t __c) {return ::wcsrchr(__s, __c);}
182
183inline _LIBCPP_INLINE_VISIBILITY const wchar_t* wcsstr(const wchar_t* __s1, const wchar_t* __s2) {return ::wcsstr(__s1, __s2);}
184inline _LIBCPP_INLINE_VISIBILITY       wchar_t* wcsstr(      wchar_t* __s1, const wchar_t* __s2) {return ::wcsstr(__s1, __s2);}
185
186inline _LIBCPP_INLINE_VISIBILITY const wchar_t* wmemchr(const wchar_t* __s, wchar_t __c, size_t __n) {return ::wmemchr(__s, __c, __n);}
187inline _LIBCPP_INLINE_VISIBILITY       wchar_t* wmemchr(      wchar_t* __s, wchar_t __c, size_t __n) {return ::wmemchr(__s, __c, __n);}
188
189#endif
190
191using ::wcscspn;
192using ::wcslen;
193using ::wcsspn;
194using ::wcstok;
195using ::wmemcmp;
196using ::wmemcpy;
197using ::wmemmove;
198using ::wmemset;
199using ::wcsftime;
200using ::btowc;
201using ::wctob;
202using ::mbsinit;
203using ::mbrlen;
204using ::mbrtowc;
205using ::wcrtomb;
206using ::mbsrtowcs;
207using ::wcsrtombs;
208
209#ifndef _LIBCPP_HAS_NO_STDIN
210using ::getwchar;
211#ifndef _LIBCPP_MSVCRT
212using ::vwscanf;
213#endif // _LIBCPP_MSVCRT
214using ::wscanf;
215#endif
216
217#ifndef _LIBCPP_HAS_NO_STDOUT
218using ::putwchar;
219using ::vwprintf;
220using ::wprintf;
221#endif
222
223_LIBCPP_END_NAMESPACE_STD
224
225#endif  // _LIBCPP_CWCHAR
226