blob: 9a5b163ba43a9889125b3a285fd597f9fc914d39 [file] [log] [blame]
Richard Smitha6e8ebb2015-10-09 19:57:37 +00001// -*- C++ -*-
Louis Dionneeb8650a2021-11-17 16:25:01 -05002//===----------------------------------------------------------------------===//
Richard Smitha6e8ebb2015-10-09 19:57:37 +00003//
Chandler Carruth57b08b02019-01-19 10:56:40 +00004// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5// See https://llvm.org/LICENSE.txt for license information.
6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
Richard Smitha6e8ebb2015-10-09 19:57:37 +00007//
8//===----------------------------------------------------------------------===//
9
10#ifndef _LIBCPP_WCTYPE_H
11#define _LIBCPP_WCTYPE_H
12
13/*
14 wctype.h synopsis
15
16Macros:
17
18 WEOF
19
20Types:
21
22 wint_t
23 wctrans_t
24 wctype_t
25
26int iswalnum(wint_t wc);
27int iswalpha(wint_t wc);
28int iswblank(wint_t wc); // C99
29int iswcntrl(wint_t wc);
30int iswdigit(wint_t wc);
31int iswgraph(wint_t wc);
32int iswlower(wint_t wc);
33int iswprint(wint_t wc);
34int iswpunct(wint_t wc);
35int iswspace(wint_t wc);
36int iswupper(wint_t wc);
37int iswxdigit(wint_t wc);
38int iswctype(wint_t wc, wctype_t desc);
39wctype_t wctype(const char* property);
40wint_t towlower(wint_t wc);
41wint_t towupper(wint_t wc);
42wint_t towctrans(wint_t wc, wctrans_t desc);
43wctrans_t wctrans(const char* property);
44
45*/
46
Nikolas Klauserb9a26582024-12-21 13:01:48 +010047#if defined(__cplusplus) && __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
48# include <__cxx03/wctype.h>
49#else
Nikolas Klauserc166a9c2024-12-10 16:02:12 +010050# include <__config>
Richard Smitha6e8ebb2015-10-09 19:57:37 +000051
Nikolas Klauserc166a9c2024-12-10 16:02:12 +010052# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
53# pragma GCC system_header
54# endif
Richard Smitha6e8ebb2015-10-09 19:57:37 +000055
Louis Dionnea4357bc2021-08-25 12:27:20 -040056// TODO:
57// In the future, we should unconditionally include_next <wctype.h> here and instead
58// have a mode under which the library does not need libc++'s <wctype.h> or <cwctype>
59// at all (i.e. a mode without wchar_t). As it stands, we need to do that to completely
60// bypass the using declarations in <cwctype> when we did not include <wctype.h>.
61// Otherwise, a using declaration like `using ::wint_t` in <cwctype> will refer to
62// nothing (with using_if_exists), and if we include another header that defines one
63// of these declarations (e.g. <wchar.h>), the second `using ::wint_t` with using_if_exists
64// will fail because it does not refer to the same declaration.
Nikolas Klauserc166a9c2024-12-10 16:02:12 +010065# if __has_include_next(<wctype.h>)
66# include_next <wctype.h>
67# define _LIBCPP_INCLUDED_C_LIBRARY_WCTYPE_H
68# endif
Richard Smitha6e8ebb2015-10-09 19:57:37 +000069
Nikolas Klauserc166a9c2024-12-10 16:02:12 +010070# ifdef __cplusplus
Richard Smitha6e8ebb2015-10-09 19:57:37 +000071
Nikolas Klauserc166a9c2024-12-10 16:02:12 +010072# undef iswalnum
73# undef iswalpha
74# undef iswblank
75# undef iswcntrl
76# undef iswdigit
77# undef iswgraph
78# undef iswlower
79# undef iswprint
80# undef iswpunct
81# undef iswspace
82# undef iswupper
83# undef iswxdigit
84# undef iswctype
85# undef wctype
86# undef towlower
87# undef towupper
88# undef towctrans
89# undef wctrans
Richard Smitha6e8ebb2015-10-09 19:57:37 +000090
Nikolas Klauserc166a9c2024-12-10 16:02:12 +010091# endif // __cplusplus
Nikolas Klauserb9a26582024-12-21 13:01:48 +010092#endif // defined(__cplusplus) && __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
Richard Smitha6e8ebb2015-10-09 19:57:37 +000093
Louis Dionne4cd6ca12021-04-20 12:03:32 -040094#endif // _LIBCPP_WCTYPE_H