blob: 01f7cf16b78e817e1a943da862b0f584f40f0bad [file] [log] [blame]
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001// -*- C++ -*-
2//===--------------------------- cwchar -----------------------------------===//
3//
Howard Hinnantf5256e12010-05-11 21:36:01 +00004// The LLVM Compiler Infrastructure
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00005//
Howard Hinnantb64f8b02010-11-16 22:09:02 +00006// This file is dual licensed under the MIT and the University of Illinois Open
7// Source Licenses. See LICENSE.TXT for details.
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00008//
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
Howard Hinnant324bb032010-08-22 00:02:43 +000023
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000024namespace 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);
Howard Hinnant324bb032010-08-22 00:02:43 +000052wint_t getwchar();
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000053wint_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);
Howard Hinnant324bb032010-08-22 00:02:43 +000095size_t mbrtowc(wchar_t* restrict pwc, const char* restrict s, size_t n, mbstate_t* restrict ps);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000096size_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,
Howard Hinnant324bb032010-08-22 00:02:43 +000098 mbstate_t* restrict ps);
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000099size_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>
Howard Hinnantef5aa932013-09-17 01:34:47 +0000109#if defined(_LIBCPP_MSVCRT) || defined(__MINGW32__)
Howard Hinnantefbe4062011-09-28 21:39:20 +0000110#include <support/win32/support.h> // pull in *swprintf defines
Howard Hinnante9df0a52013-08-01 18:17:34 +0000111#endif // _LIBCPP_MSVCRT
Dan Albert2ef012e2014-04-08 12:03:21 -0700112#ifdef __ANDROID__
113#include <support/android/wchar_bionic.h>
114#endif // __ANDROID__
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000115
Howard Hinnant08e17472011-10-17 20:05:10 +0000116#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000117#pragma GCC system_header
Howard Hinnant08e17472011-10-17 20:05:10 +0000118#endif
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000119
120_LIBCPP_BEGIN_NAMESPACE_STD
121
122using ::mbstate_t;
123using ::size_t;
124using ::tm;
125using ::wint_t;
126using ::FILE;
127using ::fwprintf;
128using ::fwscanf;
129using ::swprintf;
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000130using ::vfwprintf;
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000131using ::vswprintf;
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000132using ::vwprintf;
Howard Hinnante9df0a52013-08-01 18:17:34 +0000133#ifndef _LIBCPP_MSVCRT
Howard Hinnant78b68282011-10-22 20:59:45 +0000134using ::swscanf;
135using ::vfwscanf;
136using ::vswscanf;
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000137using ::vwscanf;
Howard Hinnante9df0a52013-08-01 18:17:34 +0000138#endif // _LIBCPP_MSVCRT
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000139using ::wprintf;
140using ::wscanf;
141using ::fgetwc;
142using ::fgetws;
143using ::fputwc;
144using ::fputws;
145using ::fwide;
146using ::getwc;
147using ::getwchar;
148using ::putwc;
149using ::putwchar;
150using ::ungetwc;
151using ::wcstod;
Howard Hinnante9df0a52013-08-01 18:17:34 +0000152#ifndef _LIBCPP_MSVCRT
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000153using ::wcstof;
154using ::wcstold;
Howard Hinnante9df0a52013-08-01 18:17:34 +0000155#endif // _LIBCPP_MSVCRT
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000156using ::wcstol;
Howard Hinnant8a9c5ea2012-11-26 21:18:17 +0000157#ifndef _LIBCPP_HAS_NO_LONG_LONG
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000158using ::wcstoll;
Howard Hinnant8a9c5ea2012-11-26 21:18:17 +0000159#endif // _LIBCPP_HAS_NO_LONG_LONG
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000160using ::wcstoul;
Howard Hinnant8a9c5ea2012-11-26 21:18:17 +0000161#ifndef _LIBCPP_HAS_NO_LONG_LONG
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000162using ::wcstoull;
Howard Hinnant8a9c5ea2012-11-26 21:18:17 +0000163#endif // _LIBCPP_HAS_NO_LONG_LONG
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000164using ::wcscpy;
165using ::wcsncpy;
166using ::wcscat;
167using ::wcsncat;
168using ::wcscmp;
169using ::wcscoll;
170using ::wcsncmp;
171using ::wcsxfrm;
172
Howard Hinnant07959312013-04-08 18:59:28 +0000173#if defined(_WCHAR_H_CPLUSPLUS_98_CONFORMANCE_)
174
175using ::wcschr;
176using ::wcspbrk;
177using ::wcsrchr;
178using ::wcsstr;
179using ::wmemchr;
180
181#else
182
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000183inline _LIBCPP_INLINE_VISIBILITY const wchar_t* wcschr(const wchar_t* __s, wchar_t __c) {return ::wcschr(__s, __c);}
184inline _LIBCPP_INLINE_VISIBILITY wchar_t* wcschr( wchar_t* __s, wchar_t __c) {return ::wcschr(__s, __c);}
185
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000186inline _LIBCPP_INLINE_VISIBILITY const wchar_t* wcspbrk(const wchar_t* __s1, const wchar_t* __s2) {return ::wcspbrk(__s1, __s2);}
187inline _LIBCPP_INLINE_VISIBILITY wchar_t* wcspbrk( wchar_t* __s1, const wchar_t* __s2) {return ::wcspbrk(__s1, __s2);}
188
189inline _LIBCPP_INLINE_VISIBILITY const wchar_t* wcsrchr(const wchar_t* __s, wchar_t __c) {return ::wcsrchr(__s, __c);}
190inline _LIBCPP_INLINE_VISIBILITY wchar_t* wcsrchr( wchar_t* __s, wchar_t __c) {return ::wcsrchr(__s, __c);}
191
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000192inline _LIBCPP_INLINE_VISIBILITY const wchar_t* wcsstr(const wchar_t* __s1, const wchar_t* __s2) {return ::wcsstr(__s1, __s2);}
193inline _LIBCPP_INLINE_VISIBILITY wchar_t* wcsstr( wchar_t* __s1, const wchar_t* __s2) {return ::wcsstr(__s1, __s2);}
194
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000195inline _LIBCPP_INLINE_VISIBILITY const wchar_t* wmemchr(const wchar_t* __s, wchar_t __c, size_t __n) {return ::wmemchr(__s, __c, __n);}
196inline _LIBCPP_INLINE_VISIBILITY wchar_t* wmemchr( wchar_t* __s, wchar_t __c, size_t __n) {return ::wmemchr(__s, __c, __n);}
197
Howard Hinnant07959312013-04-08 18:59:28 +0000198#endif
199
200using ::wcscspn;
201using ::wcslen;
202using ::wcsspn;
203using ::wcstok;
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000204using ::wmemcmp;
205using ::wmemcpy;
206using ::wmemmove;
207using ::wmemset;
208using ::wcsftime;
209using ::btowc;
210using ::wctob;
211using ::mbsinit;
212using ::mbrlen;
213using ::mbrtowc;
214using ::wcrtomb;
215using ::mbsrtowcs;
216using ::wcsrtombs;
217
218_LIBCPP_END_NAMESPACE_STD
219
220#endif // _LIBCPP_CWCHAR