xref: /llvm-project/libcxx/include/wctype.h (revision b9a2658a3e8bd13b0f9e7a8a440832a95b377216)
1 // -*- C++ -*-
2 //===----------------------------------------------------------------------===//
3 //
4 // 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
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #ifndef _LIBCPP_WCTYPE_H
11 #define _LIBCPP_WCTYPE_H
12 
13 /*
14     wctype.h synopsis
15 
16 Macros:
17 
18     WEOF
19 
20 Types:
21 
22     wint_t
23     wctrans_t
24     wctype_t
25 
26 int iswalnum(wint_t wc);
27 int iswalpha(wint_t wc);
28 int iswblank(wint_t wc);  // C99
29 int iswcntrl(wint_t wc);
30 int iswdigit(wint_t wc);
31 int iswgraph(wint_t wc);
32 int iswlower(wint_t wc);
33 int iswprint(wint_t wc);
34 int iswpunct(wint_t wc);
35 int iswspace(wint_t wc);
36 int iswupper(wint_t wc);
37 int iswxdigit(wint_t wc);
38 int iswctype(wint_t wc, wctype_t desc);
39 wctype_t wctype(const char* property);
40 wint_t towlower(wint_t wc);
41 wint_t towupper(wint_t wc);
42 wint_t towctrans(wint_t wc, wctrans_t desc);
43 wctrans_t wctrans(const char* property);
44 
45 */
46 
47 #if defined(__cplusplus) && __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
48 #  include <__cxx03/wctype.h>
49 #else
50 #  include <__config>
51 
52 #  if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
53 #    pragma GCC system_header
54 #  endif
55 
56 // 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.
65 #  if __has_include_next(<wctype.h>)
66 #    include_next <wctype.h>
67 #    define _LIBCPP_INCLUDED_C_LIBRARY_WCTYPE_H
68 #  endif
69 
70 #  ifdef __cplusplus
71 
72 #    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
90 
91 #  endif // __cplusplus
92 #endif   // defined(__cplusplus) && __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
93 
94 #endif // _LIBCPP_WCTYPE_H
95