[libc++] Implement P1885R12: <text_encoding> (#141312)
Resolves #105373, resolves #118371 and resolves #105332 - Implements `<text_encoding>` - Adds availability macros for LLVM 23. - The data is stored in three tables: - One giant string split by null-terminators to represent the aliases - An index table which stores indexes into the string, each entry representing the first character of an alias - Text encoding data, which stores an index to the index table, the MIB, and the number of aliases the encoding has. Storing it in the above manner allows us to make significant savings in binary file size and required runtime storage for the data. As required by the LLVM Project's AI use policy: - The implementation for `__get_locale_encoding(const char*)` for Windows has been developed with the assistance of AI. --------- Co-authored-by: A. Jiang <de34@live.cn>
This commit is contained in:
parent
c4249350f2
commit
8a531c3608
74 changed files with 4447 additions and 38 deletions
|
|
@ -536,7 +536,7 @@ Status
|
|||
---------------------------------------------------------- -----------------
|
||||
``__cpp_lib_submdspan`` *unimplemented*
|
||||
---------------------------------------------------------- -----------------
|
||||
``__cpp_lib_text_encoding`` *unimplemented*
|
||||
``__cpp_lib_text_encoding`` ``202306L``
|
||||
---------------------------------------------------------- -----------------
|
||||
``__cpp_lib_to_chars`` *unimplemented*
|
||||
---------------------------------------------------------- -----------------
|
||||
|
|
|
|||
|
|
@ -39,7 +39,9 @@ Implemented Papers
|
|||
------------------
|
||||
|
||||
- P2440R1: ``ranges::iota``, ``ranges::shift_left`` and ``ranges::shift_right`` (`Github <https://llvm.org/PR105184>`__)
|
||||
- P1885R12: Naming Text Encodings to Demystify Them (`Github <https://llvm.org/PR105373>`__)
|
||||
- P1899R3: ``stride_view`` (`Github <https://llvm.org/PR105198>`__)
|
||||
- P2862R1: ``text_encoding::name()`` should never return null values (`Github <https://llvm.org/PR118371>`__)
|
||||
- P3936R1: Safer ``atomic_ref::address`` (`Github <https://llvm.org/PR189594>`__)
|
||||
- P3953R3: Rename ``std::runtime_format`` (`Github <https://llvm.org/PR189624>`__)
|
||||
- P4052R0: Renaming saturation arithmetic functions (`Github <https://llvm.org/PR189589>`__)
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@
|
|||
"`LWG4035 <https://wg21.link/LWG4035>`__","``single_view`` should provide ``empty``","2024-03 (Tokyo)","|Complete|","19","`#105328 <https://github.com/llvm/llvm-project/issues/105328>`__",""
|
||||
"`LWG4036 <https://wg21.link/LWG4036>`__","``__alignof_is_defined`` is only implicitly specified in C++ and not yet deprecated","2024-03 (Tokyo)","","","`#105329 <https://github.com/llvm/llvm-project/issues/105329>`__",""
|
||||
"`LWG4037 <https://wg21.link/LWG4037>`__","Static data members of ``ctype_base`` are not yet required to be usable in constant expressions","2024-03 (Tokyo)","","","`#105330 <https://github.com/llvm/llvm-project/issues/105330>`__",""
|
||||
"`LWG4038 <https://wg21.link/LWG4038>`__","``std::text_encoding::aliases_view`` should have constexpr iterators","2024-03 (Tokyo)","","","`#105332 <https://github.com/llvm/llvm-project/issues/105332>`__",""
|
||||
"`LWG4038 <https://wg21.link/LWG4038>`__","``std::text_encoding::aliases_view`` should have constexpr iterators","2024-03 (Tokyo)","|Complete|","23","`#105332 <https://github.com/llvm/llvm-project/issues/105332>`__",""
|
||||
"`LWG4043 <https://wg21.link/LWG4043>`__","""ASCII"" is not a registered character encoding","2024-03 (Tokyo)","|Nothing To Do|","","`#105335 <https://github.com/llvm/llvm-project/issues/105335>`__",""
|
||||
"`LWG4045 <https://wg21.link/LWG4045>`__","``tuple`` can create dangling references from ``tuple-like``","2024-03 (Tokyo)","","","`#105337 <https://github.com/llvm/llvm-project/issues/105337>`__",""
|
||||
"`LWG4053 <https://wg21.link/LWG4053>`__","Unary call to ``std::views::repeat`` does not decay the argument","2024-03 (Tokyo)","|Complete|","19","`#105338 <https://github.com/llvm/llvm-project/issues/105338>`__",""
|
||||
|
|
|
|||
|
|
|
@ -13,7 +13,7 @@
|
|||
"`P2013R5 <https://wg21.link/P2013R5>`__","Freestanding Language: Optional ``::operator new``","2023-06 (Varna)","","","`#105370 <https://github.com/llvm/llvm-project/issues/105370>`__",""
|
||||
"`P2363R5 <https://wg21.link/P2363R5>`__","Extending associative containers with the remaining heterogeneous overloads","2023-06 (Varna)","","","`#105371 <https://github.com/llvm/llvm-project/issues/105371>`__",""
|
||||
"`P1901R2 <https://wg21.link/P1901R2>`__","Enabling the Use of ``weak_ptr`` as Keys in Unordered Associative Containers","2023-06 (Varna)","","","`#105372 <https://github.com/llvm/llvm-project/issues/105372>`__",""
|
||||
"`P1885R12 <https://wg21.link/P1885R12>`__","Naming Text Encodings to Demystify Them","2023-06 (Varna)","","","`#105373 <https://github.com/llvm/llvm-project/issues/105373>`__",""
|
||||
"`P1885R12 <https://wg21.link/P1885R12>`__","Naming Text Encodings to Demystify Them","2023-06 (Varna)","|Complete|","23","`#105373 <https://github.com/llvm/llvm-project/issues/105373>`__",""
|
||||
"`P0792R14 <https://wg21.link/P0792R14>`__","``function_ref``: a type-erased callable reference","2023-06 (Varna)","","","`#105376 <https://github.com/llvm/llvm-project/issues/105376>`__",""
|
||||
"`P2874R2 <https://wg21.link/P2874R2>`__","P2874R2: Mandating Annex D Require No More","2023-06 (Varna)","|Complete|","12","`#105377 <https://github.com/llvm/llvm-project/issues/105377>`__",""
|
||||
"`P2757R3 <https://wg21.link/P2757R3>`__","Type-checking format args","2023-06 (Varna)","","","`#105378 <https://github.com/llvm/llvm-project/issues/105378>`__",""
|
||||
|
|
@ -79,7 +79,7 @@
|
|||
"`P3136R1 <https://wg21.link/P3136R1>`__","Retiring niebloids","2024-11 (Wrocław)","|Complete|","14","`#118133 <https://github.com/llvm/llvm-project/issues/118133>`__",""
|
||||
"`P3138R5 <https://wg21.link/P3138R5>`__","``views::cache_latest``","2024-11 (Wrocław)","","","`#118134 <https://github.com/llvm/llvm-project/issues/118134>`__",""
|
||||
"`P3379R0 <https://wg21.link/P3379R0>`__","Constrain ``std::expected`` equality operators","2024-11 (Wrocław)","|Complete|","21","`#118135 <https://github.com/llvm/llvm-project/issues/118135>`__",""
|
||||
"`P2862R1 <https://wg21.link/P2862R1>`__","``text_encoding::name()`` should never return null values","2024-11 (Wrocław)","","","`#118371 <https://github.com/llvm/llvm-project/issues/118371>`__",""
|
||||
"`P2862R1 <https://wg21.link/P2862R1>`__","``text_encoding::name()`` should never return null values","2024-11 (Wrocław)","|Complete|","23","`#118371 <https://github.com/llvm/llvm-project/issues/118371>`__",""
|
||||
"`P2897R7 <https://wg21.link/P2897R7>`__","``aligned_accessor``: An ``mdspan`` accessor expressing pointer over-alignment","2024-11 (Wrocław)","|Complete|","21","`#118372 <https://github.com/llvm/llvm-project/issues/118372>`__",""
|
||||
"`P3355R2 <https://wg21.link/P3355R2>`__","Fix ``submdspan`` for C++26","2024-11 (Wrocław)","","","`#118373 <https://github.com/llvm/llvm-project/issues/118373>`__",""
|
||||
"`P3222R0 <https://wg21.link/P3222R0>`__","Fix C++26 by adding transposed special cases for P2642 layouts","2024-11 (Wrocław)","","","`#118374 <https://github.com/llvm/llvm-project/issues/118374>`__",""
|
||||
|
|
|
|||
|
|
|
@ -1090,6 +1090,7 @@ set(files
|
|||
strstream
|
||||
syncstream
|
||||
system_error
|
||||
text_encoding
|
||||
tgmath.h
|
||||
thread
|
||||
tuple
|
||||
|
|
|
|||
|
|
@ -38,6 +38,8 @@
|
|||
// When availability annotations are disabled, we take for granted that features introduced
|
||||
// in all versions of the library are available.
|
||||
#if !_LIBCPP_HAS_VENDOR_AVAILABILITY_ANNOTATIONS
|
||||
# define _LIBCPP_INTRODUCED_IN_LLVM_23 1
|
||||
# define _LIBCPP_INTRODUCED_IN_LLVM_23_ATTRIBUTE /* nothing */
|
||||
|
||||
# define _LIBCPP_INTRODUCED_IN_LLVM_23 1
|
||||
# define _LIBCPP_INTRODUCED_IN_LLVM_23_ATTRIBUTE /* nothing */
|
||||
|
|
@ -323,6 +325,10 @@
|
|||
# define _LIBCPP_AVAILABILITY_HAS_ADDITIONAL_IOSTREAM_EXPLICIT_INSTANTIATIONS_1 0
|
||||
#endif
|
||||
|
||||
// Controls whether the implementation for text_encoding::environment() is available
|
||||
#define _LIBCPP_AVAILABILITY_HAS_TEXT_ENCODING_ENVIRONMENT _LIBCPP_INTRODUCED_IN_LLVM_23
|
||||
#define _LIBCPP_AVAILABILITY_TEXT_ENCODING_ENVIRONMENT _LIBCPP_INTRODUCED_IN_LLVM_23_ATTRIBUTE
|
||||
|
||||
// Only define a bunch of symbols in the dylib if we need to be compatible with LLVM 7 headers or older
|
||||
# if defined(_LIBCPP_BUILDING_LIBRARY) && _LIBCPP_AVAILABILITY_MINIMUM_HEADER_VERSION < 8
|
||||
# define _LIBCPP_HIDE_FROM_ABI_SINCE_LLVM8
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
#define _LIBCPP___LOCALE
|
||||
|
||||
#include <__config>
|
||||
#include <__configuration/availability.h>
|
||||
|
||||
#if _LIBCPP_HAS_LOCALIZATION
|
||||
|
||||
|
|
@ -26,6 +27,7 @@
|
|||
# include <cstdint>
|
||||
# include <cstdlib>
|
||||
# include <string>
|
||||
# include <text_encoding>
|
||||
|
||||
// Some platforms require more includes than others. Keep the includes on all plaforms for now.
|
||||
# include <cstddef>
|
||||
|
|
@ -109,6 +111,13 @@ public:
|
|||
return std::use_facet<std::collate<_CharT> >(*this).compare(
|
||||
__x.data(), __x.data() + __x.size(), __y.data(), __y.data() + __y.size()) < 0;
|
||||
}
|
||||
# if _LIBCPP_STD_VER >= 26
|
||||
[[nodiscard]] _LIBCPP_AVAILABILITY_TEXT_ENCODING_ENVIRONMENT
|
||||
_LIBCPP_HIDE_FROM_ABI std::text_encoding encoding() const {
|
||||
std::string __name = name();
|
||||
return std::__get_locale_encoding(__name.c_str());
|
||||
}
|
||||
# endif
|
||||
|
||||
// global locale objects:
|
||||
static locale global(const locale&);
|
||||
|
|
|
|||
|
|
@ -102,6 +102,8 @@
|
|||
//
|
||||
// int __snprintf(char*, size_t, __locale_t, const char*, ...); // required by the headers
|
||||
// int __asprintf(char**, __locale_t, const char*, ...); // required by the headers
|
||||
//
|
||||
// const char* __get_locale_encoding(__locale_t);
|
||||
// }
|
||||
|
||||
#if _LIBCPP_HAS_LOCALIZATION
|
||||
|
|
@ -139,6 +141,7 @@
|
|||
# include <__cstddef/size_t.h>
|
||||
# include <__utility/forward.h>
|
||||
# include <ctype.h>
|
||||
# include <langinfo.h>
|
||||
# include <string.h>
|
||||
# include <time.h>
|
||||
# if _LIBCPP_HAS_WIDE_CHARACTERS
|
||||
|
|
@ -268,7 +271,12 @@ __mbsrtowcs(wchar_t* __dest, const char** __src, size_t __len, mbstate_t* __ps,
|
|||
return __libcpp_mbsrtowcs_l(__dest, __src, __len, __ps, __loc);
|
||||
}
|
||||
# endif // _LIBCPP_HAS_WIDE_CHARACTERS
|
||||
# endif // _LIBCPP_BUILDING_LIBRARY
|
||||
|
||||
inline _LIBCPP_HIDE_FROM_ABI const char* __get_locale_encoding(__locale_t __loc) {
|
||||
return ::nl_langinfo_l(CODESET, __loc);
|
||||
}
|
||||
|
||||
# endif // _LIBCPP_BUILDING_LIBRARY
|
||||
|
||||
_LIBCPP_DIAGNOSTIC_PUSH
|
||||
_LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wgcc-compat")
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@
|
|||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <ctype.h>
|
||||
#include <langinfo.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#if _LIBCPP_HAS_WIDE_CHARACTERS
|
||||
|
|
@ -79,6 +80,10 @@ inline _LIBCPP_HIDE_FROM_ABI __lconv_t* __localeconv(__locale_t& __loc) {
|
|||
__locale_guard __current(__loc);
|
||||
return std::localeconv();
|
||||
}
|
||||
|
||||
inline _LIBCPP_HIDE_FROM_ABI const char* __get_locale_encoding(__locale_t __loc) {
|
||||
return ::nl_langinfo_l(CODESET, __loc);
|
||||
}
|
||||
#endif // _LIBCPP_BUILDING_LIBRARY
|
||||
|
||||
// The following structure is a quick-and-dirty workaround for routines that AIX
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
#include <__utility/forward.h>
|
||||
#include <clocale> // std::lconv
|
||||
#include <ctype.h>
|
||||
#include <langinfo.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
|
@ -180,7 +181,11 @@ __mbsrtowcs(wchar_t* __dest, const char** __src, size_t __len, mbstate_t* __ps,
|
|||
return ::mbsrtowcs_l(__dest, __src, __len, __ps, __loc);
|
||||
}
|
||||
# endif // _LIBCPP_HAS_WIDE_CHARACTERS
|
||||
#endif // _LIBCPP_BUILDING_LIBRARY
|
||||
|
||||
inline _LIBCPP_HIDE_FROM_ABI const char* __get_locale_encoding(__locale_t __loc) {
|
||||
return ::nl_langinfo_l(CODESET, __loc);
|
||||
}
|
||||
#endif // _LIBCPP_BUILDING_LIBRARY
|
||||
|
||||
_LIBCPP_DIAGNOSTIC_PUSH
|
||||
_LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wgcc-compat")
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@
|
|||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <ctype.h>
|
||||
#include <langinfo.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
|
|
@ -211,7 +212,15 @@ __mbsrtowcs(wchar_t* __dest, const char** __src, size_t __len, mbstate_t* __ps,
|
|||
return std::mbsrtowcs(__dest, __src, __len, __ps);
|
||||
}
|
||||
# endif // _LIBCPP_HAS_WIDE_CHARACTERS
|
||||
#endif // _LIBCPP_BUILDING_LIBRARY
|
||||
|
||||
inline _LIBCPP_HIDE_FROM_ABI const char* __get_locale_encoding([[maybe_unused]] __locale_t __loc) {
|
||||
# if defined(__ANDROID__)
|
||||
return "UTF-8";
|
||||
# else
|
||||
return ::nl_langinfo_l(CODESET, __loc);
|
||||
# endif
|
||||
}
|
||||
#endif // _LIBCPP_BUILDING_LIBRARY
|
||||
|
||||
#ifndef _LIBCPP_COMPILER_GCC // GCC complains that this can't be always_inline due to C-style varargs
|
||||
_LIBCPP_HIDE_FROM_ABI
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@
|
|||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <ctype.h>
|
||||
#include <langinfo.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
|
|
@ -76,6 +77,10 @@ inline _LIBCPP_HIDE_FROM_ABI __lconv_t* __localeconv(__locale_t& __loc) {
|
|||
__locale_guard __current(__loc);
|
||||
return std::localeconv();
|
||||
}
|
||||
|
||||
inline _LIBCPP_HIDE_FROM_ABI const char* __get_locale_encoding(__locale_t __loc) {
|
||||
return ::nl_langinfo_l(CODESET, __loc);
|
||||
}
|
||||
#endif // _LIBCPP_BUILDING_LIBRARY
|
||||
|
||||
//
|
||||
|
|
|
|||
|
|
@ -164,6 +164,7 @@ inline _LIBCPP_HIDE_FROM_ABI char* __setlocale(int __category, const char* __loc
|
|||
return __new_locale;
|
||||
}
|
||||
_LIBCPP_EXPORTED_FROM_ABI __lconv_t* __localeconv(__locale_t& __loc);
|
||||
_LIBCPP_EXPORTED_FROM_ABI const char* __get_locale_encoding(__locale_t __loc);
|
||||
#endif // _LIBCPP_BUILDING_LIBRARY
|
||||
|
||||
//
|
||||
|
|
|
|||
|
|
@ -2125,6 +2125,11 @@ module std [system] {
|
|||
export *
|
||||
}
|
||||
|
||||
module text_encoding {
|
||||
header "text_encoding"
|
||||
export *
|
||||
}
|
||||
|
||||
module thread {
|
||||
module formatter { header "__thread/formatter.h" }
|
||||
module id { header "__thread/id.h" }
|
||||
|
|
|
|||
835
libcxx/include/text_encoding
Normal file
835
libcxx/include/text_encoding
Normal file
|
|
@ -0,0 +1,835 @@
|
|||
// -*- C++ -*-
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef _LIBCPP_TEXT_ENCODING
|
||||
#define _LIBCPP_TEXT_ENCODING
|
||||
|
||||
/* text_encoding synopsis
|
||||
namespace std {
|
||||
|
||||
struct text_encoding;
|
||||
|
||||
// [text.encoding.hash], hash support
|
||||
template<class T> struct hash;
|
||||
template<> struct hash<text_encoding>;
|
||||
|
||||
struct text_encoding
|
||||
{
|
||||
static constexpr size_t max_name_length = 63;
|
||||
|
||||
// [text.encoding.id], enumeration text_encoding::id
|
||||
enum class id : int_least32_t {
|
||||
see below
|
||||
};
|
||||
using enum id;
|
||||
|
||||
constexpr text_encoding() = default;
|
||||
constexpr explicit text_encoding(string_view enc) noexcept;
|
||||
constexpr text_encoding(id i) noexcept;
|
||||
|
||||
constexpr id mib() const noexcept;
|
||||
constexpr const char* name() const noexcept;
|
||||
|
||||
// [text.encoding.aliases], class text_encoding::aliases_view
|
||||
// struct aliases_view;
|
||||
constexpr aliases_view aliases() const noexcept;
|
||||
|
||||
friend constexpr bool operator==(const text_encoding& a,
|
||||
const text_encoding& b) noexcept;
|
||||
friend constexpr bool operator==(const text_encoding& encoding, id i) noexcept;
|
||||
|
||||
static consteval text_encoding literal() noexcept;
|
||||
static text_encoding environment();
|
||||
template<id i> static bool environment_is();
|
||||
|
||||
private:
|
||||
id mib_ = id::unknown; // exposition only
|
||||
char name_[max_name_length + 1] = {0}; // exposition only
|
||||
static constexpr bool comp-name(string_view a, string_view b); // exposition only
|
||||
};
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
#if __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
|
||||
# include <__cxx03/__config>
|
||||
#else
|
||||
# include <__config>
|
||||
|
||||
# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
||||
# pragma GCC system_header
|
||||
# endif
|
||||
|
||||
# if _LIBCPP_STD_VER >= 26
|
||||
|
||||
# include <__algorithm/count.h>
|
||||
# include <__algorithm/find_if.h>
|
||||
# include <__algorithm/lower_bound.h>
|
||||
# include <__cstddef/ptrdiff_t.h>
|
||||
# include <__functional/hash.h>
|
||||
# include <__iterator/iterator_traits.h>
|
||||
# include <__ranges/enable_borrowed_range.h>
|
||||
# include <__ranges/view_interface.h>
|
||||
# include <climits>
|
||||
# include <cstdint>
|
||||
# include <string_view>
|
||||
# include <version>
|
||||
|
||||
_LIBCPP_BEGIN_NAMESPACE_STD
|
||||
struct text_encoding;
|
||||
|
||||
_LIBCPP_BEGIN_EXPLICIT_ABI_ANNOTATIONS
|
||||
|
||||
_LIBCPP_AVAILABILITY_TEXT_ENCODING_ENVIRONMENT _LIBCPP_EXPORTED_FROM_ABI text_encoding
|
||||
__get_locale_encoding(const char* __name);
|
||||
|
||||
_LIBCPP_END_EXPLICIT_ABI_ANNOTATIONS
|
||||
|
||||
struct text_encoding {
|
||||
static_assert(CHAR_BIT == 8, "libc++ only supports platforms where CHAR_BIT == 8");
|
||||
enum class id : int_least32_t {
|
||||
other = 1,
|
||||
unknown = 2,
|
||||
ASCII = 3,
|
||||
ISOLatin1 = 4,
|
||||
ISOLatin2 = 5,
|
||||
ISOLatin3 = 6,
|
||||
ISOLatin4 = 7,
|
||||
ISOLatinCyrillic = 8,
|
||||
ISOLatinArabic = 9,
|
||||
ISOLatinGreek = 10,
|
||||
ISOLatinHebrew = 11,
|
||||
ISOLatin5 = 12,
|
||||
ISOLatin6 = 13,
|
||||
ISOTextComm = 14,
|
||||
HalfWidthKatakana = 15,
|
||||
JISEncoding = 16,
|
||||
ShiftJIS = 17,
|
||||
EUCPkdFmtJapanese = 18,
|
||||
EUCFixWidJapanese = 19,
|
||||
ISO4UnitedKingdom = 20,
|
||||
ISO11SwedishForNames = 21,
|
||||
ISO15Italian = 22,
|
||||
ISO17Spanish = 23,
|
||||
ISO21German = 24,
|
||||
ISO60DanishNorwegian = 25,
|
||||
ISO69French = 26,
|
||||
ISO10646UTF1 = 27,
|
||||
ISO646basic1983 = 28,
|
||||
INVARIANT = 29,
|
||||
ISO2IntlRefVersion = 30,
|
||||
NATSSEFI = 31,
|
||||
NATSSEFIADD = 32, // NATS-DANO (33) and NATS-DANO-ADD (34) are omitted by the standard.
|
||||
ISO10Swedish = 35,
|
||||
KSC56011987 = 36,
|
||||
ISO2022KR = 37,
|
||||
EUCKR = 38,
|
||||
ISO2022JP = 39,
|
||||
ISO2022JP2 = 40,
|
||||
ISO13JISC6220jp = 41,
|
||||
ISO14JISC6220ro = 42,
|
||||
ISO16Portuguese = 43,
|
||||
ISO18Greek7Old = 44,
|
||||
ISO19LatinGreek = 45,
|
||||
ISO25French = 46,
|
||||
ISO27LatinGreek1 = 47,
|
||||
ISO5427Cyrillic = 48,
|
||||
ISO42JISC62261978 = 49,
|
||||
ISO47BSViewdata = 50,
|
||||
ISO49INIS = 51,
|
||||
ISO50INIS8 = 52,
|
||||
ISO51INISCyrillic = 53,
|
||||
ISO54271981 = 54,
|
||||
ISO5428Greek = 55,
|
||||
ISO57GB1988 = 56,
|
||||
ISO58GB231280 = 57,
|
||||
ISO61Norwegian2 = 58,
|
||||
ISO70VideotexSupp1 = 59,
|
||||
ISO84Portuguese2 = 60,
|
||||
ISO85Spanish2 = 61,
|
||||
ISO86Hungarian = 62,
|
||||
ISO87JISX0208 = 63,
|
||||
ISO88Greek7 = 64,
|
||||
ISO89ASMO449 = 65,
|
||||
ISO90 = 66,
|
||||
ISO91JISC62291984a = 67,
|
||||
ISO92JISC62991984b = 68,
|
||||
ISO93JIS62291984badd = 69,
|
||||
ISO94JIS62291984hand = 70,
|
||||
ISO95JIS62291984handadd = 71,
|
||||
ISO96JISC62291984kana = 72,
|
||||
ISO2033 = 73,
|
||||
ISO99NAPLPS = 74,
|
||||
ISO102T617bit = 75,
|
||||
ISO103T618bit = 76,
|
||||
ISO111ECMACyrillic = 77,
|
||||
ISO121Canadian1 = 78,
|
||||
ISO122Canadian2 = 79,
|
||||
ISO123CSAZ24341985gr = 80,
|
||||
ISO88596E = 81,
|
||||
ISO88596I = 82,
|
||||
ISO128T101G2 = 83,
|
||||
ISO88598E = 84,
|
||||
ISO88598I = 85,
|
||||
ISO139CSN369103 = 86,
|
||||
ISO141JUSIB1002 = 87,
|
||||
ISO143IECP271 = 88,
|
||||
ISO146Serbian = 89,
|
||||
ISO147Macedonian = 90,
|
||||
ISO150 = 91,
|
||||
ISO151Cuba = 92,
|
||||
ISO6937Add = 93,
|
||||
ISO153GOST1976874 = 94,
|
||||
ISO8859Supp = 95,
|
||||
ISO10367Box = 96,
|
||||
ISO158Lap = 97,
|
||||
ISO159JISX02121990 = 98,
|
||||
ISO646Danish = 99,
|
||||
USDK = 100,
|
||||
DKUS = 101,
|
||||
KSC5636 = 102,
|
||||
Unicode11UTF7 = 103,
|
||||
ISO2022CN = 104,
|
||||
ISO2022CNEXT = 105,
|
||||
UTF8 = 106,
|
||||
ISO885913 = 109,
|
||||
ISO885914 = 110,
|
||||
ISO885915 = 111,
|
||||
ISO885916 = 112,
|
||||
GBK = 113,
|
||||
GB18030 = 114,
|
||||
OSDEBCDICDF0415 = 115,
|
||||
OSDEBCDICDF03IRV = 116,
|
||||
OSDEBCDICDF041 = 117,
|
||||
ISO115481 = 118,
|
||||
KZ1048 = 119,
|
||||
UCS2 = 1000,
|
||||
UCS4 = 1001,
|
||||
UnicodeASCII = 1002,
|
||||
UnicodeLatin1 = 1003,
|
||||
UnicodeJapanese = 1004,
|
||||
UnicodeIBM1261 = 1005,
|
||||
UnicodeIBM1268 = 1006,
|
||||
UnicodeIBM1276 = 1007,
|
||||
UnicodeIBM1264 = 1008,
|
||||
UnicodeIBM1265 = 1009,
|
||||
Unicode11 = 1010,
|
||||
SCSU = 1011,
|
||||
UTF7 = 1012,
|
||||
UTF16BE = 1013,
|
||||
UTF16LE = 1014,
|
||||
UTF16 = 1015,
|
||||
CESU8 = 1016,
|
||||
UTF32 = 1017,
|
||||
UTF32BE = 1018,
|
||||
UTF32LE = 1019,
|
||||
BOCU1 = 1020,
|
||||
UTF7IMAP = 1021,
|
||||
Windows30Latin1 = 2000,
|
||||
Windows31Latin1 = 2001,
|
||||
Windows31Latin2 = 2002,
|
||||
Windows31Latin5 = 2003,
|
||||
HPRoman8 = 2004,
|
||||
AdobeStandardEncoding = 2005,
|
||||
VenturaUS = 2006,
|
||||
VenturaInternational = 2007,
|
||||
DECMCS = 2008,
|
||||
PC850Multilingual = 2009,
|
||||
PC8DanishNorwegian = 2012,
|
||||
PC862LatinHebrew = 2013,
|
||||
PC8Turkish = 2014,
|
||||
IBMSymbols = 2015,
|
||||
IBMThai = 2016,
|
||||
HPLegal = 2017,
|
||||
HPPiFont = 2018,
|
||||
HPMath8 = 2019,
|
||||
HPPSMath = 2020,
|
||||
HPDesktop = 2021,
|
||||
VenturaMath = 2022,
|
||||
MicrosoftPublishing = 2023,
|
||||
Windows31J = 2024,
|
||||
GB2312 = 2025,
|
||||
Big5 = 2026,
|
||||
Macintosh = 2027,
|
||||
IBM037 = 2028,
|
||||
IBM038 = 2029,
|
||||
IBM273 = 2030,
|
||||
IBM274 = 2031,
|
||||
IBM275 = 2032,
|
||||
IBM277 = 2033,
|
||||
IBM278 = 2034,
|
||||
IBM280 = 2035,
|
||||
IBM281 = 2036,
|
||||
IBM284 = 2037,
|
||||
IBM285 = 2038,
|
||||
IBM290 = 2039,
|
||||
IBM297 = 2040,
|
||||
IBM420 = 2041,
|
||||
IBM423 = 2042,
|
||||
IBM424 = 2043,
|
||||
PC8CodePage437 = 2011,
|
||||
IBM500 = 2044,
|
||||
IBM851 = 2045,
|
||||
PCp852 = 2010,
|
||||
IBM855 = 2046,
|
||||
IBM857 = 2047,
|
||||
IBM860 = 2048,
|
||||
IBM861 = 2049,
|
||||
IBM863 = 2050,
|
||||
IBM864 = 2051,
|
||||
IBM865 = 2052,
|
||||
IBM868 = 2053,
|
||||
IBM869 = 2054,
|
||||
IBM870 = 2055,
|
||||
IBM871 = 2056,
|
||||
IBM880 = 2057,
|
||||
IBM891 = 2058,
|
||||
IBM903 = 2059,
|
||||
IBM904 = 2060,
|
||||
IBM905 = 2061,
|
||||
IBM918 = 2062,
|
||||
IBM1026 = 2063,
|
||||
IBMEBCDICATDE = 2064,
|
||||
EBCDICATDEA = 2065,
|
||||
EBCDICCAFR = 2066,
|
||||
EBCDICDKNO = 2067,
|
||||
EBCDICDKNOA = 2068,
|
||||
EBCDICFISE = 2069,
|
||||
EBCDICFISEA = 2070,
|
||||
EBCDICFR = 2071,
|
||||
EBCDICIT = 2072,
|
||||
EBCDICPT = 2073,
|
||||
EBCDICES = 2074,
|
||||
EBCDICESA = 2075,
|
||||
EBCDICESS = 2076,
|
||||
EBCDICUK = 2077,
|
||||
EBCDICUS = 2078,
|
||||
Unknown8BiT = 2079,
|
||||
Mnemonic = 2080,
|
||||
Mnem = 2081,
|
||||
VISCII = 2082,
|
||||
VIQR = 2083,
|
||||
KOI8R = 2084,
|
||||
HZGB2312 = 2085,
|
||||
IBM866 = 2086,
|
||||
PC775Baltic = 2087,
|
||||
KOI8U = 2088,
|
||||
IBM00858 = 2089,
|
||||
IBM00924 = 2090,
|
||||
IBM01140 = 2091,
|
||||
IBM01141 = 2092,
|
||||
IBM01142 = 2093,
|
||||
IBM01143 = 2094,
|
||||
IBM01144 = 2095,
|
||||
IBM01145 = 2096,
|
||||
IBM01146 = 2097,
|
||||
IBM01147 = 2098,
|
||||
IBM01148 = 2099,
|
||||
IBM01149 = 2100,
|
||||
Big5HKSCS = 2101,
|
||||
IBM1047 = 2102,
|
||||
PTCP154 = 2103,
|
||||
Amiga1251 = 2104,
|
||||
KOI7switched = 2105,
|
||||
BRF = 2106,
|
||||
TSCII = 2107,
|
||||
CP51932 = 2108,
|
||||
windows874 = 2109,
|
||||
windows1250 = 2250,
|
||||
windows1251 = 2251,
|
||||
windows1252 = 2252,
|
||||
windows1253 = 2253,
|
||||
windows1254 = 2254,
|
||||
windows1255 = 2255,
|
||||
windows1256 = 2256,
|
||||
windows1257 = 2257,
|
||||
windows1258 = 2258,
|
||||
TIS620 = 2259,
|
||||
CP50220 = 2260
|
||||
};
|
||||
|
||||
private:
|
||||
static constexpr int __nats_dano_ = 33;
|
||||
static constexpr int __nats_dano_add_ = 34;
|
||||
|
||||
// A __te_data structure stores:
|
||||
// Index into a table of offsets in the giant aliases string
|
||||
// The MIB of that text encoding
|
||||
// Number of aliases the current MIB holds
|
||||
// We only need 6 bytes of information to store this information.
|
||||
|
||||
// The data is structured in three different locations:
|
||||
// The mib table (array of __te_data)
|
||||
// Aliases string
|
||||
// Table of offsets into the aliases string
|
||||
|
||||
// All of the alias strings were transformed from an array of char* into one giant string split by '\0'.
|
||||
// This allows us to reduce runtime memory footprint by not only removing the need to store ~884 pointers, it also
|
||||
// significantly reduces the disk space taken by removing the need for relocation data for those pointers.
|
||||
// We also know ahead of time that the total number of characters of all of these aliases combined can fit into 2
|
||||
// bytes, so we can also save even more memory by using 2 byte offsets rather than a full pointer into the aliases
|
||||
// string.
|
||||
|
||||
struct __te_data {
|
||||
unsigned short __first_alias_index_;
|
||||
unsigned short __mib_rep_;
|
||||
unsigned char __num_aliases_;
|
||||
|
||||
friend constexpr bool operator<(const __te_data& __enc, id __i) noexcept {
|
||||
return __enc.__mib_rep_ < static_cast<unsigned short>(__i);
|
||||
}
|
||||
};
|
||||
|
||||
static constexpr bool __comp_name(string_view __a, string_view __b) noexcept {
|
||||
if (__a.empty() || __b.empty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Map any non-alphanumeric character to 255, skip prefix 0s, else get tolower(__n).
|
||||
auto __map_char = [](char __n, bool& __in_number) -> unsigned char {
|
||||
if (__n == '0') {
|
||||
return __in_number ? '0' : 255;
|
||||
}
|
||||
__in_number = __n >= '1' && __n <= '9';
|
||||
|
||||
if ((__n >= '1' && __n <= '9') || (__n >= 'a' && __n <= 'z')) {
|
||||
return __n;
|
||||
}
|
||||
if (__n >= 'A' && __n <= 'Z') {
|
||||
return __n + ('a' - 'A'); // tolower
|
||||
}
|
||||
|
||||
return 255;
|
||||
};
|
||||
|
||||
auto __a_ptr = __a.begin(), __b_ptr = __b.begin();
|
||||
bool __a_in_number = false, __b_in_number = false;
|
||||
|
||||
unsigned char __a_val = 255, __b_val = 255;
|
||||
for (;; __a_ptr++, __b_ptr++) {
|
||||
while (__a_ptr != __a.end() && (__a_val = __map_char(*__a_ptr, __a_in_number)) == 255)
|
||||
__a_ptr++;
|
||||
while (__b_ptr != __b.end() && (__b_val = __map_char(*__b_ptr, __b_in_number)) == 255)
|
||||
__b_ptr++;
|
||||
|
||||
if (__a_ptr == __a.end())
|
||||
return __b_ptr == __b.end();
|
||||
if (__b_ptr == __b.end())
|
||||
return false;
|
||||
if (__a_val != __b_val)
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static constexpr unsigned short __find_data_idx(string_view __a) noexcept {
|
||||
_LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN(__a.size() <= max_name_length, "input string_view must have size <= 63");
|
||||
_LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN(!__a.contains('\0'), "input string_view must not contain '\\0'");
|
||||
|
||||
auto __pred = [&__a](const __te_data& __entry) -> bool {
|
||||
// Search aliases of text encoding for string
|
||||
aliases_view __aliases(__entry);
|
||||
return std::find_if(__aliases.begin(), __aliases.end(), [&__a](auto __alias) {
|
||||
return __comp_name(__a, __alias);
|
||||
}) != __aliases.end();
|
||||
};
|
||||
|
||||
const __te_data* __found = std::find_if(__entries + 2, std::end(__entries), __pred);
|
||||
if (__found == std::end(__entries)) {
|
||||
return __other_idx_; // other
|
||||
}
|
||||
|
||||
return __found - __entries;
|
||||
}
|
||||
|
||||
static constexpr unsigned short __find_data_idx_by_id(id __i) noexcept {
|
||||
_LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN(__i >= id::other, "invalid text_encoding::id passed");
|
||||
_LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN(__i <= id::CP50220, "invalid text_encoding::id passed");
|
||||
_LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN(int_least32_t(__i) != __nats_dano_, "Mib for NATS-DANO used");
|
||||
_LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN(int_least32_t(__i) != __nats_dano_add_, "Mib for NATS-DANO-ADD used");
|
||||
auto __found = std::lower_bound(std::begin(__entries), std::end(__entries), __i);
|
||||
|
||||
if (__found == std::end(__entries)) {
|
||||
return __unknown_idx_; // unknown
|
||||
}
|
||||
|
||||
return __found - __entries;
|
||||
}
|
||||
|
||||
public:
|
||||
using enum id;
|
||||
static constexpr size_t max_name_length = 63;
|
||||
|
||||
// [text.encoding.aliases], class text_encoding::aliases_view
|
||||
struct aliases_view : ranges::view_interface<aliases_view> {
|
||||
struct __iterator {
|
||||
using iterator_concept = random_access_iterator_tag;
|
||||
using iterator_category = random_access_iterator_tag;
|
||||
using value_type = const char*;
|
||||
using reference = const char*;
|
||||
using difference_type = int;
|
||||
|
||||
constexpr __iterator() noexcept = default;
|
||||
|
||||
[[nodiscard]] constexpr reference operator*() const noexcept {
|
||||
return __get_alias_from_offset_table(__current_idx_);
|
||||
}
|
||||
|
||||
[[nodiscard]] constexpr reference operator[](difference_type __n) const noexcept {
|
||||
auto __it = *this;
|
||||
return *(__it + __n);
|
||||
}
|
||||
|
||||
[[nodiscard]] friend constexpr __iterator operator+(__iterator __it, difference_type __n) noexcept {
|
||||
__it += __n;
|
||||
return __it;
|
||||
}
|
||||
|
||||
[[nodiscard]] friend constexpr __iterator operator+(difference_type __n, __iterator __it) noexcept {
|
||||
__it += __n;
|
||||
return __it;
|
||||
}
|
||||
|
||||
[[nodiscard]] friend constexpr __iterator operator-(__iterator __it, difference_type __n) noexcept {
|
||||
__it -= __n;
|
||||
return __it;
|
||||
}
|
||||
|
||||
[[nodiscard]] constexpr difference_type operator-(const __iterator& __other) const noexcept {
|
||||
return __current_idx_ - __other.__current_idx_;
|
||||
}
|
||||
|
||||
constexpr __iterator& operator++() noexcept {
|
||||
__current_idx_++;
|
||||
return *this;
|
||||
}
|
||||
|
||||
constexpr __iterator operator++(int) noexcept {
|
||||
auto __old = *this;
|
||||
__current_idx_++;
|
||||
return __old;
|
||||
}
|
||||
|
||||
constexpr __iterator& operator--() noexcept {
|
||||
__current_idx_--;
|
||||
return *this;
|
||||
}
|
||||
|
||||
constexpr __iterator operator--(int) noexcept {
|
||||
auto __old = *this;
|
||||
__current_idx_--;
|
||||
return __old;
|
||||
}
|
||||
|
||||
constexpr __iterator& operator+=(difference_type __n) noexcept {
|
||||
__current_idx_ += __n;
|
||||
return *this;
|
||||
}
|
||||
|
||||
constexpr __iterator& operator-=(difference_type __n) noexcept { return (*this += -__n); }
|
||||
|
||||
friend constexpr auto operator<=>(const __iterator& __it, const __iterator& __it2) noexcept = default;
|
||||
|
||||
private:
|
||||
friend struct aliases_view;
|
||||
|
||||
constexpr __iterator(unsigned short __enc_d) noexcept : __current_idx_(__enc_d) {}
|
||||
|
||||
unsigned short __current_idx_;
|
||||
}; // __iterator
|
||||
|
||||
[[nodiscard]] constexpr __iterator begin() const noexcept { return __iterator(__first_idx_); }
|
||||
|
||||
[[nodiscard]] constexpr __iterator end() const noexcept { return __iterator(__last_idx_); }
|
||||
|
||||
private:
|
||||
friend struct text_encoding;
|
||||
|
||||
constexpr aliases_view(const __te_data& __d)
|
||||
: __first_idx_(__d.__first_alias_index_), __last_idx_(__d.__first_alias_index_ + __d.__num_aliases_) {}
|
||||
|
||||
unsigned short __first_idx_;
|
||||
unsigned short __last_idx_;
|
||||
}; // aliases_view
|
||||
|
||||
constexpr text_encoding() = default;
|
||||
|
||||
constexpr explicit text_encoding(string_view __enc) noexcept : __encoding_idx_(__find_data_idx(__enc)) {
|
||||
__enc.copy(__name_, max_name_length, 0);
|
||||
}
|
||||
|
||||
constexpr text_encoding(id __i) noexcept : __encoding_idx_(__find_data_idx_by_id(__i)) {
|
||||
const char* __alias = __get_alias_from_offset_table(__get().__first_alias_index_);
|
||||
if (__alias[0] != '\0') {
|
||||
string_view(__alias).copy(__name_, max_name_length);
|
||||
}
|
||||
}
|
||||
|
||||
[[nodiscard]] constexpr id mib() const noexcept { return id(__get().__mib_rep_); }
|
||||
|
||||
[[nodiscard]] constexpr const char* name() const noexcept { return __name_; }
|
||||
|
||||
[[nodiscard]] constexpr aliases_view aliases() const noexcept { return aliases_view(__get()); }
|
||||
|
||||
friend constexpr bool operator==(const text_encoding& __a, const text_encoding& __b) noexcept {
|
||||
return __a.mib() == id::other && __b.mib() == id::other
|
||||
? __comp_name(__a.__name_, __b.__name_)
|
||||
: __a.mib() == __b.mib();
|
||||
}
|
||||
|
||||
friend constexpr bool operator==(const text_encoding& __encoding, id __i) noexcept { return __encoding.mib() == __i; }
|
||||
|
||||
[[nodiscard]] static consteval text_encoding literal() noexcept {
|
||||
// TODO: Remove this branch once we have __GNUC_EXECUTION_CHARSET_NAME or __clang_literal_encoding__ unconditionally
|
||||
# ifdef __GNUC_EXECUTION_CHARSET_NAME
|
||||
return text_encoding(__GNUC_EXECUTION_CHARSET_NAME);
|
||||
# elif defined(__clang_literal_encoding__)
|
||||
return text_encoding(__clang_literal_encoding__);
|
||||
# else
|
||||
return text_encoding();
|
||||
# endif
|
||||
}
|
||||
|
||||
# if _LIBCPP_HAS_LOCALIZATION
|
||||
[[nodiscard]] _LIBCPP_AVAILABILITY_TEXT_ENCODING_ENVIRONMENT static text_encoding environment() {
|
||||
# if defined(_LIBCPP_WIN32API)
|
||||
return __get_locale_encoding(nullptr);
|
||||
# else
|
||||
return __get_locale_encoding("");
|
||||
# endif
|
||||
}
|
||||
|
||||
template <id _Id>
|
||||
[[nodiscard]] _LIBCPP_AVAILABILITY_TEXT_ENCODING_ENVIRONMENT static bool environment_is() {
|
||||
// TODO: It may be worthwhile to implement an optimization for popular encodings, e.g. UTF-8,
|
||||
// to allow checking the environment text encoding without needing to use the data tables.
|
||||
|
||||
# if defined(__ANDROID__)
|
||||
return _Id == std::text_encoding::id::UTF8;
|
||||
# else
|
||||
return environment() == _Id;
|
||||
# endif
|
||||
}
|
||||
# else
|
||||
static text_encoding environment() = delete;
|
||||
|
||||
template <id>
|
||||
static bool environment_is() = delete;
|
||||
# endif
|
||||
|
||||
private:
|
||||
constexpr const __te_data& __get() const { return __entries[__encoding_idx_]; }
|
||||
|
||||
static constexpr char const* __get_alias_from_offset_table(unsigned short __idx) {
|
||||
return __aliases_string + __alias_offsets.__table[__idx];
|
||||
}
|
||||
|
||||
static constexpr auto __other_idx_ = 0u;
|
||||
static constexpr auto __unknown_idx_ = 1u;
|
||||
|
||||
char __name_[max_name_length + 1]{};
|
||||
unsigned short __encoding_idx_{1u};
|
||||
|
||||
static constexpr __te_data __entries[] = {
|
||||
{0, 1, 0}, {1, 2, 0}, {2, 3, 11}, {13, 4, 9}, {22, 5, 7}, {29, 6, 7}, {36, 7, 7},
|
||||
{43, 8, 6}, {49, 9, 8}, {57, 10, 9}, {66, 11, 6}, {72, 12, 7}, {79, 13, 6}, {85, 14, 3},
|
||||
{88, 15, 3}, {91, 16, 2}, {93, 17, 3}, {96, 18, 3}, {99, 19, 2}, {101, 20, 6}, {107, 21, 5},
|
||||
{112, 22, 4}, {116, 23, 4}, {120, 24, 5}, {125, 25, 6}, {131, 26, 5}, {136, 27, 2}, {138, 28, 3},
|
||||
{141, 29, 2}, {143, 30, 4}, {147, 31, 3}, {150, 32, 3}, {153, 35, 7}, {160, 36, 6}, {166, 37, 2},
|
||||
{168, 38, 2}, {170, 39, 2}, {172, 40, 2}, {174, 41, 6}, {180, 42, 5}, {185, 43, 4}, {189, 44, 3},
|
||||
{192, 45, 3}, {195, 46, 4}, {199, 47, 3}, {202, 48, 3}, {205, 49, 3}, {208, 50, 3}, {211, 51, 3},
|
||||
{214, 52, 3}, {217, 53, 3}, {220, 54, 4}, {224, 55, 3}, {227, 56, 5}, {232, 57, 4}, {236, 58, 5},
|
||||
{241, 59, 3}, {244, 60, 4}, {248, 61, 4}, {252, 62, 5}, {257, 63, 5}, {262, 64, 3}, {265, 65, 5},
|
||||
{270, 66, 2}, {272, 67, 4}, {276, 68, 5}, {281, 69, 4}, {285, 70, 4}, {289, 71, 4}, {293, 72, 3},
|
||||
{296, 73, 4}, {300, 74, 5}, {305, 75, 3}, {308, 76, 4}, {312, 77, 4}, {316, 78, 7}, {323, 79, 6},
|
||||
{329, 80, 3}, {332, 81, 3}, {335, 82, 3}, {338, 83, 3}, {341, 84, 3}, {344, 85, 3}, {347, 86, 3},
|
||||
{350, 87, 6}, {356, 88, 3}, {359, 89, 4}, {363, 90, 4}, {367, 91, 4}, {371, 92, 5}, {376, 93, 3},
|
||||
{379, 94, 4}, {383, 95, 4}, {387, 96, 3}, {390, 97, 4}, {394, 98, 4}, {398, 99, 5}, {403, 100, 2},
|
||||
{405, 101, 2}, {407, 102, 3}, {410, 103, 2}, {412, 104, 2}, {414, 105, 2}, {416, 106, 2}, {418, 109, 2},
|
||||
{420, 110, 8}, {428, 111, 4}, {432, 112, 7}, {439, 113, 5}, {444, 114, 2}, {446, 115, 2}, {448, 116, 2},
|
||||
{450, 117, 2}, {452, 118, 4}, {456, 119, 4}, {460, 1000, 2}, {462, 1001, 2}, {464, 1002, 2}, {466, 1003, 3},
|
||||
{469, 1004, 2}, {471, 1005, 2}, {473, 1006, 2}, {475, 1007, 2}, {477, 1008, 2}, {479, 1009, 2}, {481, 1010, 2},
|
||||
{483, 1011, 2}, {485, 1012, 2}, {487, 1013, 2}, {489, 1014, 2}, {491, 1015, 2}, {493, 1016, 3}, {496, 1017, 2},
|
||||
{498, 1018, 2}, {500, 1019, 2}, {502, 1020, 3}, {505, 1021, 2}, {507, 2000, 2}, {509, 2001, 2}, {511, 2002, 2},
|
||||
{513, 2003, 2}, {515, 2004, 4}, {519, 2005, 2}, {521, 2006, 2}, {523, 2007, 2}, {525, 2008, 3}, {528, 2009, 4},
|
||||
{532, 2010, 4}, {536, 2011, 4}, {540, 2012, 2}, {542, 2013, 4}, {546, 2014, 2}, {548, 2015, 2}, {550, 2016, 2},
|
||||
{552, 2017, 2}, {554, 2018, 2}, {556, 2019, 2}, {558, 2020, 2}, {560, 2021, 2}, {562, 2022, 2}, {564, 2023, 2},
|
||||
{566, 2024, 2}, {568, 2025, 2}, {570, 2026, 2}, {572, 2027, 3}, {575, 2028, 7}, {582, 2029, 4}, {586, 2030, 3},
|
||||
{589, 2031, 4}, {593, 2032, 4}, {597, 2033, 4}, {601, 2034, 5}, {606, 2035, 4}, {610, 2036, 4}, {614, 2037, 4},
|
||||
{618, 2038, 4}, {622, 2039, 4}, {626, 2040, 4}, {630, 2041, 4}, {634, 2042, 4}, {638, 2043, 4}, {642, 2044, 5},
|
||||
{647, 2045, 4}, {651, 2046, 4}, {655, 2047, 4}, {659, 2048, 4}, {663, 2049, 5}, {668, 2050, 4}, {672, 2051, 3},
|
||||
{675, 2052, 4}, {679, 2053, 4}, {683, 2054, 5}, {688, 2055, 5}, {693, 2056, 4}, {697, 2057, 4}, {701, 2058, 3},
|
||||
{704, 2059, 3}, {707, 2060, 4}, {711, 2061, 4}, {715, 2062, 4}, {719, 2063, 3}, {722, 2064, 2}, {724, 2065, 2},
|
||||
{726, 2066, 2}, {728, 2067, 2}, {730, 2068, 2}, {732, 2069, 2}, {734, 2070, 2}, {736, 2071, 2}, {738, 2072, 2},
|
||||
{740, 2073, 2}, {742, 2074, 2}, {744, 2075, 2}, {746, 2076, 2}, {748, 2077, 2}, {750, 2078, 2}, {752, 2079, 2},
|
||||
{754, 2080, 2}, {756, 2081, 2}, {758, 2082, 2}, {760, 2083, 2}, {762, 2084, 2}, {764, 2085, 1}, {765, 2086, 4},
|
||||
{769, 2087, 3}, {772, 2088, 2}, {774, 2089, 5}, {779, 2090, 5}, {784, 2091, 5}, {789, 2092, 5}, {794, 2093, 6},
|
||||
{800, 2094, 6}, {806, 2095, 5}, {811, 2096, 5}, {816, 2097, 5}, {821, 2098, 5}, {826, 2099, 5}, {831, 2100, 5},
|
||||
{836, 2101, 2}, {838, 2102, 3}, {841, 2103, 5}, {846, 2104, 5}, {851, 2105, 2}, {853, 2106, 2}, {855, 2107, 2},
|
||||
{857, 2108, 2}, {859, 2109, 2}, {861, 2250, 2}, {863, 2251, 2}, {865, 2252, 2}, {867, 2253, 2}, {869, 2254, 2},
|
||||
{871, 2255, 2}, {873, 2256, 2}, {875, 2257, 2}, {877, 2258, 2}, {879, 2259, 3}, {882, 2260, 2}};
|
||||
|
||||
static constexpr char __aliases_string[] =
|
||||
"US-ASCII\0iso-ir-6\0ANSI_X3.4-1968\0ANSI_X3.4-1986\0ISO_646.irv:1991\0ISO646-"
|
||||
"US\0us\0IBM367\0cp367\0csASCII\0ASCII\0ISO_8859-1:1987\0iso-ir-100\0ISO_8859-1\0ISO-8859-"
|
||||
"1\0latin1\0l1\0IBM819\0CP819\0csISOLatin1\0ISO_8859-2:1987\0iso-ir-101\0ISO_8859-2\0ISO-8859-"
|
||||
"2\0latin2\0l2\0csISOLatin2\0ISO_8859-3:1988\0iso-ir-109\0ISO_8859-3\0ISO-8859-3\0latin3\0l3\0csISOLatin3\0ISO_"
|
||||
"8859-4:1988\0iso-ir-110\0ISO_8859-4\0ISO-8859-4\0latin4\0l4\0csISOLatin4\0ISO_8859-5:1988\0iso-ir-144\0ISO_8859-"
|
||||
"5\0ISO-8859-5\0cyrillic\0csISOLatinCyrillic\0ISO_8859-6:1987\0iso-ir-127\0ISO_8859-6\0ISO-8859-6\0ECMA-"
|
||||
"114\0ASMO-708\0arabic\0csISOLatinArabic\0ISO_8859-7:1987\0iso-ir-126\0ISO_8859-7\0ISO-8859-7\0ELOT_928\0ECMA-"
|
||||
"118\0greek\0greek8\0csISOLatinGreek\0ISO_8859-8:1988\0iso-ir-138\0ISO_8859-8\0ISO-8859-"
|
||||
"8\0hebrew\0csISOLatinHebrew\0ISO_8859-9:1989\0iso-ir-148\0ISO_8859-9\0ISO-8859-9\0latin5\0l5\0csISOLatin5\0ISO-"
|
||||
"8859-10\0iso-ir-157\0l6\0ISO_8859-10:1992\0csISOLatin6\0latin6\0ISO_6937-2-add\0iso-ir-142\0csISOTextComm\0JIS_"
|
||||
"X0201\0X0201\0csHalfWidthKatakana\0JIS_Encoding\0csJISEncoding\0Shift_JIS\0MS_Kanji\0csShiftJIS\0Extended_UNIX_"
|
||||
"Code_Packed_Format_for_Japanese\0csEUCPkdFmtJapanese\0EUC-JP\0Extended_UNIX_Code_Fixed_Width_for_"
|
||||
"Japanese\0csEUCFixWidJapanese\0BS_4730\0iso-ir-4\0ISO646-GB\0gb\0uk\0csISO4UnitedKingdom\0SEN_850200_C\0iso-ir-"
|
||||
"11\0ISO646-SE2\0se2\0csISO11SwedishForNames\0IT\0iso-ir-15\0ISO646-IT\0csISO15Italian\0ES\0iso-ir-17\0ISO646-"
|
||||
"ES\0csISO17Spanish\0DIN_66003\0iso-ir-21\0de\0ISO646-DE\0csISO21German\0NS_4551-1\0iso-ir-60\0ISO646-"
|
||||
"NO\0no\0csISO60DanishNorwegian\0csISO60Norwegian1\0NF_Z_62-010\0iso-ir-69\0ISO646-FR\0fr\0csISO69French\0ISO-"
|
||||
"10646-UTF-1\0csISO10646UTF1\0ISO_646.basic:1983\0ref\0csISO646basic1983\0INVARIANT\0csINVARIANT\0ISO_646.irv:"
|
||||
"1983\0iso-ir-2\0irv\0csISO2IntlRefVersion\0NATS-SEFI\0iso-ir-8-1\0csNATSSEFI\0NATS-SEFI-ADD\0iso-ir-8-"
|
||||
"2\0csNATSSEFIADD\0SEN_850200_B\0iso-ir-10\0FI\0ISO646-FI\0ISO646-SE\0se\0csISO10Swedish\0KS_C_5601-1987\0iso-ir-"
|
||||
"149\0KS_C_5601-1989\0KSC_5601\0korean\0csKSC56011987\0ISO-2022-KR\0csISO2022KR\0EUC-KR\0csEUCKR\0ISO-2022-"
|
||||
"JP\0csISO2022JP\0ISO-2022-JP-2\0csISO2022JP2\0JIS_C6220-1969-jp\0JIS_C6220-1969\0iso-ir-13\0katakana\0x0201-"
|
||||
"7\0csISO13JISC6220jp\0JIS_C6220-1969-ro\0iso-ir-14\0jp\0ISO646-JP\0csISO14JISC6220ro\0PT\0iso-ir-16\0ISO646-"
|
||||
"PT\0csISO16Portuguese\0greek7-old\0iso-ir-18\0csISO18Greek7Old\0latin-greek\0iso-ir-19\0csISO19LatinGreek\0NF_Z_"
|
||||
"62-010_(1973)\0iso-ir-25\0ISO646-FR1\0csISO25French\0Latin-greek-1\0iso-ir-27\0csISO27LatinGreek1\0ISO_"
|
||||
"5427\0iso-ir-37\0csISO5427Cyrillic\0JIS_C6226-1978\0iso-ir-42\0csISO42JISC62261978\0BS_viewdata\0iso-ir-"
|
||||
"47\0csISO47BSViewdata\0INIS\0iso-ir-49\0csISO49INIS\0INIS-8\0iso-ir-50\0csISO50INIS8\0INIS-cyrillic\0iso-ir-"
|
||||
"51\0csISO51INISCyrillic\0ISO_5427:1981\0iso-ir-54\0ISO5427Cyrillic1981\0csISO54271981\0ISO_5428:1980\0iso-ir-"
|
||||
"55\0csISO5428Greek\0GB_1988-80\0iso-ir-57\0cn\0ISO646-CN\0csISO57GB1988\0GB_2312-80\0iso-ir-"
|
||||
"58\0chinese\0csISO58GB231280\0NS_4551-2\0ISO646-NO2\0iso-ir-61\0no2\0csISO61Norwegian2\0videotex-suppl\0iso-ir-"
|
||||
"70\0csISO70VideotexSupp1\0PT2\0iso-ir-84\0ISO646-PT2\0csISO84Portuguese2\0ES2\0iso-ir-85\0ISO646-"
|
||||
"ES2\0csISO85Spanish2\0MSZ_7795.3\0iso-ir-86\0ISO646-HU\0hu\0csISO86Hungarian\0JIS_C6226-1983\0iso-ir-"
|
||||
"87\0x0208\0JIS_X0208-1983\0csISO87JISX0208\0greek7\0iso-ir-88\0csISO88Greek7\0ASMO_449\0ISO_9036\0arabic7\0iso-"
|
||||
"ir-89\0csISO89ASMO449\0iso-ir-90\0csISO90\0JIS_C6229-1984-a\0iso-ir-91\0jp-ocr-a\0csISO91JISC62291984a\0JIS_"
|
||||
"C6229-1984-b\0iso-ir-92\0ISO646-JP-OCR-B\0jp-ocr-b\0csISO92JISC62991984b\0JIS_C6229-1984-b-add\0iso-ir-93\0jp-"
|
||||
"ocr-b-add\0csISO93JIS62291984badd\0JIS_C6229-1984-hand\0iso-ir-94\0jp-ocr-hand\0csISO94JIS62291984hand\0JIS_"
|
||||
"C6229-1984-hand-add\0iso-ir-95\0jp-ocr-hand-add\0csISO95JIS62291984handadd\0JIS_C6229-1984-kana\0iso-ir-"
|
||||
"96\0csISO96JISC62291984kana\0ISO_2033-1983\0iso-ir-98\0e13b\0csISO2033\0ANSI_X3.110-1983\0iso-ir-99\0CSA_T500-"
|
||||
"1983\0NAPLPS\0csISO99NAPLPS\0T.61-7bit\0iso-ir-102\0csISO102T617bit\0T.61-8bit\0T.61\0iso-ir-"
|
||||
"103\0csISO103T618bit\0ECMA-cyrillic\0iso-ir-111\0KOI8-E\0csISO111ECMACyrillic\0CSA_Z243.4-1985-1\0iso-ir-"
|
||||
"121\0ISO646-CA\0csa7-1\0csa71\0ca\0csISO121Canadian1\0CSA_Z243.4-1985-2\0iso-ir-122\0ISO646-CA2\0csa7-"
|
||||
"2\0csa72\0csISO122Canadian2\0CSA_Z243.4-1985-gr\0iso-ir-123\0csISO123CSAZ24341985gr\0ISO_8859-6-"
|
||||
"E\0csISO88596E\0ISO-8859-6-E\0ISO_8859-6-I\0csISO88596I\0ISO-8859-6-I\0T.101-G2\0iso-ir-"
|
||||
"128\0csISO128T101G2\0ISO_8859-8-E\0csISO88598E\0ISO-8859-8-E\0ISO_8859-8-I\0csISO88598I\0ISO-8859-8-I\0CSN_"
|
||||
"369103\0iso-ir-139\0csISO139CSN369103\0JUS_I.B1.002\0iso-ir-141\0ISO646-YU\0js\0yu\0csISO141JUSIB1002\0IEC_P27-"
|
||||
"1\0iso-ir-143\0csISO143IECP271\0JUS_I.B1.003-serb\0iso-ir-146\0serbian\0csISO146Serbian\0JUS_I.B1.003-"
|
||||
"mac\0macedonian\0iso-ir-147\0csISO147Macedonian\0greek-ccitt\0iso-ir-150\0csISO150\0csISO150GreekCCITT\0NC_NC00-"
|
||||
"10:81\0cuba\0iso-ir-151\0ISO646-CU\0csISO151Cuba\0ISO_6937-2-25\0iso-ir-152\0csISO6937Add\0GOST_19768-74\0ST_"
|
||||
"SEV_358-88\0iso-ir-153\0csISO153GOST1976874\0ISO_8859-supp\0iso-ir-154\0latin1-2-5\0csISO8859Supp\0ISO_10367-"
|
||||
"box\0iso-ir-155\0csISO10367Box\0latin-lap\0lap\0iso-ir-158\0csISO158Lap\0JIS_X0212-1990\0x0212\0iso-ir-"
|
||||
"159\0csISO159JISX02121990\0DS_2089\0DS2089\0ISO646-DK\0dk\0csISO646Danish\0us-dk\0csUSDK\0dk-"
|
||||
"us\0csDKUS\0KSC5636\0ISO646-KR\0csKSC5636\0UNICODE-1-1-UTF-7\0csUnicode11UTF7\0ISO-2022-CN\0csISO2022CN\0ISO-"
|
||||
"2022-CN-EXT\0csISO2022CNEXT\0UTF-8\0csUTF8\0ISO-8859-13\0csISO885913\0ISO-8859-14\0iso-ir-199\0ISO_8859-14:"
|
||||
"1998\0ISO_8859-14\0latin8\0iso-celtic\0l8\0csISO885914\0ISO-8859-15\0ISO_8859-15\0Latin-9\0csISO885915\0ISO-"
|
||||
"8859-16\0iso-ir-226\0ISO_8859-16:2001\0ISO_8859-16\0latin10\0l10\0csISO885916\0GBK\0CP936\0MS936\0windows-"
|
||||
"936\0csGBK\0GB18030\0csGB18030\0OSD_EBCDIC_DF04_15\0csOSDEBCDICDF0415\0OSD_EBCDIC_DF03_"
|
||||
"IRV\0csOSDEBCDICDF03IRV\0OSD_EBCDIC_DF04_1\0csOSDEBCDICDF041\0ISO-11548-1\0ISO_11548-1\0ISO_TR_11548-"
|
||||
"1\0csISO115481\0KZ-1048\0STRK1048-2002\0RK1048\0csKZ1048\0ISO-10646-UCS-2\0csUnicode\0ISO-10646-UCS-"
|
||||
"4\0csUCS4\0ISO-10646-UCS-Basic\0csUnicodeASCII\0ISO-10646-Unicode-Latin1\0csUnicodeLatin1\0ISO-10646\0ISO-10646-"
|
||||
"J-1\0csUnicodeJapanese\0ISO-Unicode-IBM-1261\0csUnicodeIBM1261\0ISO-Unicode-IBM-1268\0csUnicodeIBM1268\0ISO-"
|
||||
"Unicode-IBM-1276\0csUnicodeIBM1276\0ISO-Unicode-IBM-1264\0csUnicodeIBM1264\0ISO-Unicode-IBM-"
|
||||
"1265\0csUnicodeIBM1265\0UNICODE-1-1\0csUnicode11\0SCSU\0csSCSU\0UTF-7\0csUTF7\0UTF-16BE\0csUTF16BE\0UTF-"
|
||||
"16LE\0csUTF16LE\0UTF-16\0csUTF16\0CESU-8\0csCESU8\0csCESU-8\0UTF-32\0csUTF32\0UTF-32BE\0csUTF32BE\0UTF-"
|
||||
"32LE\0csUTF32LE\0BOCU-1\0csBOCU1\0csBOCU-1\0UTF-7-IMAP\0csUTF7IMAP\0ISO-8859-1-Windows-3.0-Latin-"
|
||||
"1\0csWindows30Latin1\0ISO-8859-1-Windows-3.1-Latin-1\0csWindows31Latin1\0ISO-8859-2-Windows-Latin-"
|
||||
"2\0csWindows31Latin2\0ISO-8859-9-Windows-Latin-5\0csWindows31Latin5\0hp-roman8\0roman8\0r8\0csHPRoman8\0Adobe-"
|
||||
"Standard-Encoding\0csAdobeStandardEncoding\0Ventura-US\0csVenturaUS\0Ventura-"
|
||||
"International\0csVenturaInternational\0DEC-"
|
||||
"MCS\0dec\0csDECMCS\0IBM850\0cp850\0850\0csPC850Multilingual\0IBM852\0cp852\0852\0csPCp852\0IBM437\0cp437\0"
|
||||
"437\0csPC8CodePage437\0PC8-Danish-Norwegian\0csPC8DanishNorwegian\0IBM862\0cp862\0862\0csPC862LatinHebrew\0PC8-"
|
||||
"Turkish\0csPC8Turkish\0IBM-Symbols\0csIBMSymbols\0IBM-Thai\0csIBMThai\0HP-Legal\0csHPLegal\0HP-Pi-"
|
||||
"font\0csHPPiFont\0HP-Math8\0csHPMath8\0Adobe-Symbol-Encoding\0csHPPSMath\0HP-DeskTop\0csHPDesktop\0Ventura-"
|
||||
"Math\0csVenturaMath\0Microsoft-Publishing\0csMicrosoftPublishing\0Windows-"
|
||||
"31J\0csWindows31J\0GB2312\0csGB2312\0Big5\0csBig5\0macintosh\0mac\0csMacintosh\0IBM037\0cp037\0ebcdic-cp-"
|
||||
"us\0ebcdic-cp-ca\0ebcdic-cp-wt\0ebcdic-cp-nl\0csIBM037\0IBM038\0EBCDIC-"
|
||||
"INT\0cp038\0csIBM038\0IBM273\0CP273\0csIBM273\0IBM274\0EBCDIC-BE\0CP274\0csIBM274\0IBM275\0EBCDIC-"
|
||||
"BR\0cp275\0csIBM275\0IBM277\0EBCDIC-CP-DK\0EBCDIC-CP-NO\0csIBM277\0IBM278\0CP278\0ebcdic-cp-fi\0ebcdic-cp-"
|
||||
"se\0csIBM278\0IBM280\0CP280\0ebcdic-cp-it\0csIBM280\0IBM281\0EBCDIC-JP-"
|
||||
"E\0cp281\0csIBM281\0IBM284\0CP284\0ebcdic-cp-es\0csIBM284\0IBM285\0CP285\0ebcdic-cp-"
|
||||
"gb\0csIBM285\0IBM290\0cp290\0EBCDIC-JP-kana\0csIBM290\0IBM297\0cp297\0ebcdic-cp-"
|
||||
"fr\0csIBM297\0IBM420\0cp420\0ebcdic-cp-ar1\0csIBM420\0IBM423\0cp423\0ebcdic-cp-"
|
||||
"gr\0csIBM423\0IBM424\0cp424\0ebcdic-cp-he\0csIBM424\0IBM500\0CP500\0ebcdic-cp-be\0ebcdic-cp-"
|
||||
"ch\0csIBM500\0IBM851\0cp851\0851\0csIBM851\0IBM855\0cp855\0855\0csIBM855\0IBM857\0cp857\0857\0csIBM857\0IBM860\0"
|
||||
"cp860\0860\0csIBM860\0IBM861\0cp861\0861\0cp-"
|
||||
"is\0csIBM861\0IBM863\0cp863\0863\0csIBM863\0IBM864\0cp864\0csIBM864\0IBM865\0cp865\0865\0csIBM865\0IBM868\0CP868"
|
||||
"\0cp-ar\0csIBM868\0IBM869\0cp869\0869\0cp-gr\0csIBM869\0IBM870\0CP870\0ebcdic-cp-roece\0ebcdic-cp-"
|
||||
"yu\0csIBM870\0IBM871\0CP871\0ebcdic-cp-is\0csIBM871\0IBM880\0cp880\0EBCDIC-"
|
||||
"Cyrillic\0csIBM880\0IBM891\0cp891\0csIBM891\0IBM903\0cp903\0csIBM903\0IBM904\0cp904\0904\0csIBBM904\0IBM905\0CP9"
|
||||
"05\0ebcdic-cp-tr\0csIBM905\0IBM918\0CP918\0ebcdic-cp-ar2\0csIBM918\0IBM1026\0CP1026\0csIBM1026\0EBCDIC-AT-"
|
||||
"DE\0csIBMEBCDICATDE\0EBCDIC-AT-DE-A\0csEBCDICATDEA\0EBCDIC-CA-FR\0csEBCDICCAFR\0EBCDIC-DK-"
|
||||
"NO\0csEBCDICDKNO\0EBCDIC-DK-NO-A\0csEBCDICDKNOA\0EBCDIC-FI-SE\0csEBCDICFISE\0EBCDIC-FI-SE-"
|
||||
"A\0csEBCDICFISEA\0EBCDIC-FR\0csEBCDICFR\0EBCDIC-IT\0csEBCDICIT\0EBCDIC-PT\0csEBCDICPT\0EBCDIC-"
|
||||
"ES\0csEBCDICES\0EBCDIC-ES-A\0csEBCDICESA\0EBCDIC-ES-S\0csEBCDICESS\0EBCDIC-UK\0csEBCDICUK\0EBCDIC-"
|
||||
"US\0csEBCDICUS\0UNKNOWN-"
|
||||
"8BIT\0csUnknown8BiT\0MNEMONIC\0csMnemonic\0MNEM\0csMnem\0VISCII\0csVISCII\0VIQR\0csVIQR\0KOI8-R\0csKOI8R\0HZ-GB-"
|
||||
"2312\0IBM866\0cp866\0866\0csIBM866\0IBM775\0cp775\0csPC775Baltic\0KOI8-"
|
||||
"U\0csKOI8U\0IBM00858\0CCSID00858\0CP00858\0PC-Multilingual-850+"
|
||||
"euro\0csIBM00858\0IBM00924\0CCSID00924\0CP00924\0ebcdic-Latin9--"
|
||||
"euro\0csIBM00924\0IBM01140\0CCSID01140\0CP01140\0ebcdic-us-37+"
|
||||
"euro\0csIBM01140\0IBM01141\0CCSID01141\0CP01141\0ebcdic-de-273+"
|
||||
"euro\0csIBM01141\0IBM01142\0CCSID01142\0CP01142\0ebcdic-dk-277+euro\0ebcdic-no-277+"
|
||||
"euro\0csIBM01142\0IBM01143\0CCSID01143\0CP01143\0ebcdic-fi-278+euro\0ebcdic-se-278+"
|
||||
"euro\0csIBM01143\0IBM01144\0CCSID01144\0CP01144\0ebcdic-it-280+"
|
||||
"euro\0csIBM01144\0IBM01145\0CCSID01145\0CP01145\0ebcdic-es-284+"
|
||||
"euro\0csIBM01145\0IBM01146\0CCSID01146\0CP01146\0ebcdic-gb-285+"
|
||||
"euro\0csIBM01146\0IBM01147\0CCSID01147\0CP01147\0ebcdic-fr-297+"
|
||||
"euro\0csIBM01147\0IBM01148\0CCSID01148\0CP01148\0ebcdic-international-500+"
|
||||
"euro\0csIBM01148\0IBM01149\0CCSID01149\0CP01149\0ebcdic-is-871+euro\0csIBM01149\0Big5-"
|
||||
"HKSCS\0csBig5HKSCS\0IBM1047\0IBM-1047\0csIBM1047\0PTCP154\0csPTCP154\0PT154\0CP154\0Cyrillic-Asian\0Amiga-"
|
||||
"1251\0Ami1251\0Amiga1251\0Ami-1251\0csAmiga1251\0KOI7-"
|
||||
"switched\0csKOI7switched\0BRF\0csBRF\0TSCII\0csTSCII\0CP51932\0csCP51932\0windows-874\0cswindows874\0windows-"
|
||||
"1250\0cswindows1250\0windows-1251\0cswindows1251\0windows-1252\0cswindows1252\0windows-"
|
||||
"1253\0cswindows1253\0windows-1254\0cswindows1254\0windows-1255\0cswindows1255\0windows-"
|
||||
"1256\0cswindows1256\0windows-1257\0cswindows1257\0windows-1258\0cswindows1258\0TIS-620\0csTIS620\0ISO-8859-"
|
||||
"11\0CP50220\0csCP50220\0";
|
||||
|
||||
struct __offset_table {
|
||||
constexpr static unsigned long long __num_aliases =
|
||||
std::count(__aliases_string, __aliases_string + sizeof(__aliases_string), '\0') + 1;
|
||||
unsigned short __table[__num_aliases];
|
||||
};
|
||||
|
||||
static constexpr __offset_table __alias_offsets = [] {
|
||||
__offset_table __aliases{};
|
||||
__aliases.__table[0] = sizeof(__aliases_string) - 1;
|
||||
__aliases.__table[1] = sizeof(__aliases_string) - 1;
|
||||
__aliases.__table[2] = 0;
|
||||
|
||||
unsigned long long __idx = 3;
|
||||
|
||||
for (unsigned short __pos = 0; __pos < sizeof(__aliases_string) - 1 && __idx < __offset_table::__num_aliases;
|
||||
__pos++) {
|
||||
if (__aliases_string[__pos] == '\0') {
|
||||
__aliases.__table[__idx++] = __pos + 1;
|
||||
}
|
||||
}
|
||||
|
||||
return __aliases;
|
||||
}();
|
||||
};
|
||||
|
||||
template <>
|
||||
struct hash<text_encoding> {
|
||||
[[nodiscard]] static size_t operator()(const text_encoding& __enc) noexcept {
|
||||
return std::hash<std::text_encoding::id>()(__enc.mib());
|
||||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
inline constexpr bool ranges::enable_borrowed_range<text_encoding::aliases_view> = true;
|
||||
|
||||
_LIBCPP_END_NAMESPACE_STD
|
||||
|
||||
# endif // _LIBCPP_STD_VER >= 26
|
||||
|
||||
#endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
|
||||
|
||||
#endif // _LIBCPP_TEXT_ENCODING
|
||||
|
|
@ -633,7 +633,7 @@ __cpp_lib_void_t 201411L <type_traits>
|
|||
# undef __cpp_lib_string_view
|
||||
# define __cpp_lib_string_view 202403L
|
||||
// # define __cpp_lib_submdspan 202306L
|
||||
// # define __cpp_lib_text_encoding 202306L
|
||||
# define __cpp_lib_text_encoding 202306L
|
||||
# undef __cpp_lib_to_chars
|
||||
// # define __cpp_lib_to_chars 202306L
|
||||
// # define __cpp_lib_to_string 202306L
|
||||
|
|
|
|||
|
|
@ -1562,6 +1562,7 @@
|
|||
{'is_defined': True, 'name': '__ZNSt3__120__libcpp_atomic_waitEPVKNS_17__cxx_atomic_implIxNS_22__cxx_atomic_base_implIxEEEEx', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '__ZNSt3__120__libcpp_atomic_waitEPVKvx', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '__ZNSt3__120__throw_system_errorEiPKc', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '__ZNSt3__121__get_locale_encodingEPKc', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '__ZNSt3__121__throw_runtime_errorEPKc', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '__ZNSt3__121recursive_timed_mutex4lockEv', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '__ZNSt3__121recursive_timed_mutex6unlockEv', 'type': 'FUNC'}
|
||||
|
|
@ -2655,4 +2656,4 @@
|
|||
{'is_defined': True, 'name': '___cxa_vec_new2', 'type': 'I'}
|
||||
{'is_defined': True, 'name': '___cxa_vec_new3', 'type': 'I'}
|
||||
{'is_defined': True, 'name': '___dynamic_cast', 'type': 'I'}
|
||||
{'is_defined': True, 'name': '___gxx_personality_v0', 'type': 'I'}
|
||||
{'is_defined': True, 'name': '___gxx_personality_v0', 'type': 'I'}
|
||||
|
|
@ -1199,6 +1199,7 @@
|
|||
{'is_defined': True, 'name': '_ZNSt6__ndk120__libcpp_atomic_waitEPVKNS_17__cxx_atomic_implIiNS_22__cxx_atomic_base_implIiEEEEi', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZNSt6__ndk120__libcpp_atomic_waitEPVKvi', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZNSt6__ndk120__throw_system_errorEiPKc', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZNSt6__ndk121__get_locale_encodingEPKc', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZNSt6__ndk121__throw_runtime_errorEPKc', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZNSt6__ndk121recursive_timed_mutex4lockEv', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZNSt6__ndk121recursive_timed_mutex6unlockEv', 'type': 'FUNC'}
|
||||
|
|
|
|||
|
|
@ -555,6 +555,7 @@
|
|||
{'import_export': 'EXP', 'is_defined': True, 'name': '_ZNSt3__120__libcpp_atomic_waitEPVKNS_17__cxx_atomic_implIiNS_22__cxx_atomic_base_implIiEEEEi', 'storage_mapping_class': 'DS', 'type': 'FUNC'}
|
||||
{'import_export': 'EXP', 'is_defined': True, 'name': '_ZNSt3__120__libcpp_atomic_waitEPVKvi', 'storage_mapping_class': 'DS', 'type': 'FUNC'}
|
||||
{'import_export': 'EXP', 'is_defined': True, 'name': '_ZNSt3__120__throw_system_errorEiPKc', 'storage_mapping_class': 'DS', 'type': 'FUNC'}
|
||||
{'import_export': 'EXP', 'is_defined': True, 'name': '_ZNSt3__121__get_locale_encodingEPKc', 'storage_mapping_class': 'DS', 'type': 'FUNC'}
|
||||
{'import_export': 'EXP', 'is_defined': True, 'name': '_ZNSt3__121__throw_runtime_errorEPKc', 'storage_mapping_class': 'DS', 'type': 'FUNC'}
|
||||
{'import_export': 'EXP', 'is_defined': True, 'name': '_ZNSt3__121recursive_timed_mutex4lockEv', 'storage_mapping_class': 'DS', 'type': 'FUNC'}
|
||||
{'import_export': 'EXP', 'is_defined': True, 'name': '_ZNSt3__121recursive_timed_mutex6unlockEv', 'storage_mapping_class': 'DS', 'type': 'FUNC'}
|
||||
|
|
|
|||
|
|
@ -555,6 +555,7 @@
|
|||
{'import_export': 'EXP', 'is_defined': True, 'name': '_ZNSt3__120__libcpp_atomic_waitEPVKNS_17__cxx_atomic_implIlNS_22__cxx_atomic_base_implIlEEEEl', 'storage_mapping_class': 'DS', 'type': 'FUNC'}
|
||||
{'import_export': 'EXP', 'is_defined': True, 'name': '_ZNSt3__120__libcpp_atomic_waitEPVKvl', 'storage_mapping_class': 'DS', 'type': 'FUNC'}
|
||||
{'import_export': 'EXP', 'is_defined': True, 'name': '_ZNSt3__120__throw_system_errorEiPKc', 'storage_mapping_class': 'DS', 'type': 'FUNC'}
|
||||
{'import_export': 'EXP', 'is_defined': True, 'name': '_ZNSt3__121__get_locale_encodingEPKc', 'storage_mapping_class': 'DS', 'type': 'FUNC'}
|
||||
{'import_export': 'EXP', 'is_defined': True, 'name': '_ZNSt3__121__throw_runtime_errorEPKc', 'storage_mapping_class': 'DS', 'type': 'FUNC'}
|
||||
{'import_export': 'EXP', 'is_defined': True, 'name': '_ZNSt3__121recursive_timed_mutex4lockEv', 'storage_mapping_class': 'DS', 'type': 'FUNC'}
|
||||
{'import_export': 'EXP', 'is_defined': True, 'name': '_ZNSt3__121recursive_timed_mutex6unlockEv', 'storage_mapping_class': 'DS', 'type': 'FUNC'}
|
||||
|
|
|
|||
|
|
@ -1199,6 +1199,7 @@
|
|||
{'is_defined': True, 'name': '_ZNSt6__ndk120__libcpp_atomic_waitEPVKNS_17__cxx_atomic_implIiNS_22__cxx_atomic_base_implIiEEEEi', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZNSt6__ndk120__libcpp_atomic_waitEPVKvi', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZNSt6__ndk120__throw_system_errorEiPKc', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZNSt6__ndk121__get_locale_encodingEPKc', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZNSt6__ndk121__throw_runtime_errorEPKc', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZNSt6__ndk121recursive_timed_mutex4lockEv', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZNSt6__ndk121recursive_timed_mutex6unlockEv', 'type': 'FUNC'}
|
||||
|
|
|
|||
|
|
@ -1212,6 +1212,7 @@
|
|||
{'is_defined': True, 'name': '_ZNSt3__120__libcpp_atomic_waitEPVKNS_17__cxx_atomic_implIlNS_22__cxx_atomic_base_implIlEEEEl', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZNSt3__120__libcpp_atomic_waitEPVKvl', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZNSt3__120__throw_system_errorEiPKc', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZNSt3__121__get_locale_encodingEPKc', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZNSt3__121__throw_runtime_errorEPKc', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZNSt3__121recursive_timed_mutex4lockEv', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZNSt3__121recursive_timed_mutex6unlockEv', 'type': 'FUNC'}
|
||||
|
|
@ -2031,4 +2032,4 @@
|
|||
{'is_defined': True, 'name': '_ZTv0_n24_NSt3__114basic_iostreamIcNS_11char_traitsIcEEED0Ev', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZTv0_n24_NSt3__114basic_iostreamIcNS_11char_traitsIcEEED1Ev', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZTv0_n24_NSt3__19strstreamD0Ev', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZTv0_n24_NSt3__19strstreamD1Ev', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZTv0_n24_NSt3__19strstreamD1Ev', 'type': 'FUNC'}
|
||||
|
|
@ -1210,6 +1210,7 @@
|
|||
{'is_defined': True, 'name': '_ZNSt3__120__libcpp_atomic_waitEPVKNS_17__cxx_atomic_implIiNS_22__cxx_atomic_base_implIiEEEEi', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZNSt3__120__libcpp_atomic_waitEPVKvi', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZNSt3__120__throw_system_errorEiPKc', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZNSt3__121__get_locale_encodingEPKc', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZNSt3__121__throw_runtime_errorEPKc', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZNSt3__121recursive_timed_mutex4lockEv', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZNSt3__121recursive_timed_mutex6unlockEv', 'type': 'FUNC'}
|
||||
|
|
@ -2030,4 +2031,4 @@
|
|||
{'is_defined': True, 'name': '_ZTv0_n24_NSt3__114basic_iostreamIcNS_11char_traitsIcEEED0Ev', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZTv0_n24_NSt3__114basic_iostreamIcNS_11char_traitsIcEEED1Ev', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZTv0_n24_NSt3__19strstreamD0Ev', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZTv0_n24_NSt3__19strstreamD1Ev', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZTv0_n24_NSt3__19strstreamD1Ev', 'type': 'FUNC'}
|
||||
|
|
@ -1181,6 +1181,7 @@
|
|||
{'is_defined': True, 'name': '_ZNSt3__120__libcpp_atomic_waitEPVKNS_17__cxx_atomic_implIiNS_22__cxx_atomic_base_implIiEEEEi', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZNSt3__120__libcpp_atomic_waitEPVKvi', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZNSt3__120__throw_system_errorEiPKc', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZNSt3__121__get_locale_encodingEPKc', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZNSt3__121__throw_runtime_errorEPKc', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZNSt3__121recursive_timed_mutex4lockEv', 'type': 'FUNC'}
|
||||
{'is_defined': True, 'name': '_ZNSt3__121recursive_timed_mutex6unlockEv', 'type': 'FUNC'}
|
||||
|
|
|
|||
|
|
@ -75,9 +75,6 @@ module;
|
|||
# if __has_include(<stdfloat>)
|
||||
# error "please update the header information for <stdfloat> in headers_not_available in utils/libcxx/header_information.py"
|
||||
# endif // __has_include(<stdfloat>)
|
||||
# if __has_include(<text_encoding>)
|
||||
# error "please update the header information for <text_encoding> in headers_not_available in utils/libcxx/header_information.py"
|
||||
# endif // __has_include(<text_encoding>)
|
||||
#endif // _WIN32
|
||||
|
||||
export module std.compat;
|
||||
|
|
|
|||
|
|
@ -108,6 +108,7 @@ module;
|
|||
#include <strstream>
|
||||
#include <syncstream>
|
||||
#include <system_error>
|
||||
#include <text_encoding>
|
||||
#include <thread>
|
||||
#include <tuple>
|
||||
#include <type_traits>
|
||||
|
|
@ -157,9 +158,6 @@ module;
|
|||
# if __has_include(<stdfloat>)
|
||||
# error "please update the header information for <stdfloat> in headers_not_available in utils/libcxx/header_information.py"
|
||||
# endif // __has_include(<stdfloat>)
|
||||
# if __has_include(<text_encoding>)
|
||||
# error "please update the header information for <text_encoding> in headers_not_available in utils/libcxx/header_information.py"
|
||||
# endif // __has_include(<text_encoding>)
|
||||
#endif // _WIN32
|
||||
|
||||
export module std;
|
||||
|
|
|
|||
|
|
@ -8,12 +8,11 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
|
||||
export namespace std {
|
||||
#if 0
|
||||
# if _LIBCPP_STD_VER >= 23
|
||||
using std::text_encoding;
|
||||
|
||||
// hash support
|
||||
#if _LIBCPP_STD_VER >= 26
|
||||
using std::hash;
|
||||
# endif // _LIBCPP_STD_VER >= 23
|
||||
namespace ranges {
|
||||
using std::ranges::enable_borrowed_range;
|
||||
}
|
||||
using std::text_encoding;
|
||||
#endif
|
||||
} // namespace std
|
||||
|
|
|
|||
|
|
@ -91,6 +91,7 @@ if (LIBCXX_ENABLE_LOCALIZATION)
|
|||
ostream.cpp
|
||||
regex.cpp
|
||||
strstream.cpp
|
||||
text_encoding.cpp
|
||||
)
|
||||
endif()
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include <__locale_dir/support/windows.h>
|
||||
#include <cctype>
|
||||
#include <charconv>
|
||||
#include <clocale> // std::localeconv() & friends
|
||||
#include <cstdarg> // va_start & friends
|
||||
#include <cstddef>
|
||||
|
|
@ -14,6 +16,8 @@
|
|||
#include <cstdlib> // std::strtof & friends
|
||||
#include <ctime> // std::strftime
|
||||
#include <cwchar> // wide char manipulation
|
||||
#include <string_view>
|
||||
#include <windows.h>
|
||||
|
||||
_LIBCPP_BEGIN_NAMESPACE_STD
|
||||
_LIBCPP_BEGIN_EXPLICIT_ABI_ANNOTATIONS
|
||||
|
|
@ -35,6 +39,262 @@ __lconv_t* __localeconv(__locale_t& loc) {
|
|||
return loc.__store_lconv(lc);
|
||||
}
|
||||
|
||||
namespace {
|
||||
const char* __codepage_name(unsigned int __codepage) {
|
||||
switch (__codepage) {
|
||||
case 0:
|
||||
// If no ANSI code page is available, only Unicode can be used for the locale.
|
||||
// In this case, the value is CP_ACP (0).
|
||||
// Such a locale cannot be set as the system locale.
|
||||
// Applications that do not support Unicode do not work correctly with locales
|
||||
// marked as "Unicode only".
|
||||
return nullptr;
|
||||
case 037:
|
||||
return "IBM037";
|
||||
case 437:
|
||||
return "IBM437";
|
||||
case 500:
|
||||
return "IBM500";
|
||||
case 708:
|
||||
return "ASMO-708";
|
||||
case 709:
|
||||
return "ASMO_449";
|
||||
case 775:
|
||||
return "IBM775";
|
||||
case 850:
|
||||
return "IBM850";
|
||||
case 852:
|
||||
return "IBM852";
|
||||
case 855:
|
||||
return "IBM855";
|
||||
case 857:
|
||||
return "IBM857";
|
||||
case 858:
|
||||
return "IBM00858";
|
||||
case 860:
|
||||
return "IBM860";
|
||||
case 861:
|
||||
return "IBM861";
|
||||
case 862:
|
||||
return "IBM862";
|
||||
case 863:
|
||||
return "IBM863";
|
||||
case 864:
|
||||
return "IBM864";
|
||||
case 865:
|
||||
return "IBM865";
|
||||
case 866:
|
||||
return "IBM866";
|
||||
case 869:
|
||||
return "IBM869";
|
||||
case 870:
|
||||
return "IBM870";
|
||||
case 874:
|
||||
return "windows-874";
|
||||
case 932:
|
||||
return "Shift_JIS";
|
||||
case 936:
|
||||
return "GB2312";
|
||||
case 949:
|
||||
return "KS_C_5601-1989";
|
||||
case 950:
|
||||
return "Big5";
|
||||
case 1026:
|
||||
return "IBM1026";
|
||||
case 1047:
|
||||
return "IBM1047";
|
||||
case 1140:
|
||||
return "IBM01140";
|
||||
case 1141:
|
||||
return "IBM01141";
|
||||
case 1142:
|
||||
return "IBM01142";
|
||||
case 1143:
|
||||
return "IBM01143";
|
||||
case 1144:
|
||||
return "IBM01144";
|
||||
case 1145:
|
||||
return "IBM01145";
|
||||
case 1146:
|
||||
return "IBM01146";
|
||||
case 1147:
|
||||
return "IBM01147";
|
||||
case 1148:
|
||||
return "IBM01148";
|
||||
case 1149:
|
||||
return "IBM01149";
|
||||
case 1200:
|
||||
return "UTF-16LE";
|
||||
case 1201:
|
||||
return "UTF-16BE";
|
||||
case 1250:
|
||||
return "windows-1250";
|
||||
case 1251:
|
||||
return "windows-1251";
|
||||
case 1252:
|
||||
return "windows-1252";
|
||||
case 1253:
|
||||
return "windows-1253";
|
||||
case 1254:
|
||||
return "windows-1254";
|
||||
case 1255:
|
||||
return "windows-1255";
|
||||
case 1256:
|
||||
return "windows-1256";
|
||||
case 1257:
|
||||
return "windows-1257";
|
||||
case 1258:
|
||||
return "windows-1258";
|
||||
case 10000:
|
||||
return "macintosh";
|
||||
case 12000:
|
||||
return "UTF-32LE";
|
||||
case 12001:
|
||||
return "UTF-32BE";
|
||||
case 20127:
|
||||
return "US-ASCII";
|
||||
case 20273:
|
||||
return "IBM273";
|
||||
case 20277:
|
||||
return "IBM277";
|
||||
case 20278:
|
||||
return "IBM278";
|
||||
case 20280:
|
||||
return "IBM280";
|
||||
case 20284:
|
||||
return "IBM284";
|
||||
case 20285:
|
||||
return "IBM285";
|
||||
case 20290:
|
||||
return "IBM290";
|
||||
case 20297:
|
||||
return "IBM297";
|
||||
case 20420:
|
||||
return "IBM420";
|
||||
case 20423:
|
||||
return "IBM423";
|
||||
case 20424:
|
||||
return "IBM424";
|
||||
case 20838:
|
||||
return "IBM-Thai";
|
||||
case 20866:
|
||||
return "KOI8-R";
|
||||
case 20871:
|
||||
return "IBM871";
|
||||
case 20880:
|
||||
return "IBM880";
|
||||
case 20905:
|
||||
return "IBM905";
|
||||
case 20924:
|
||||
return "IBM00924";
|
||||
case 20932:
|
||||
return "EUC-JP";
|
||||
case 21866:
|
||||
return "KOI8-U";
|
||||
case 28591:
|
||||
return "ISO-8859-1";
|
||||
case 28592:
|
||||
return "ISO-8859-2";
|
||||
case 28593:
|
||||
return "ISO-8859-3";
|
||||
case 28594:
|
||||
return "ISO-8859-4";
|
||||
case 28595:
|
||||
return "ISO-8859-9";
|
||||
case 28596:
|
||||
return "ISO-8859-10";
|
||||
case 28597:
|
||||
return "ISO-8859-7";
|
||||
case 28598:
|
||||
return "ISO-8859-8";
|
||||
case 28599:
|
||||
return "ISO-8859-9-Windows-Latin-5";
|
||||
case 28603:
|
||||
return "ISO-8859-13";
|
||||
case 28605:
|
||||
return "ISO-8859-15";
|
||||
case 38598:
|
||||
return "ISO-8859-8-I";
|
||||
case 50220:
|
||||
case 50221:
|
||||
case 50222:
|
||||
return "ISO-2022-JP";
|
||||
case 51932:
|
||||
return "EUC-JP";
|
||||
case 51936:
|
||||
return "GB2312";
|
||||
case 51949:
|
||||
return "EUC-KR";
|
||||
case 52936:
|
||||
return "HZ-GB-2312";
|
||||
case 54936:
|
||||
return "GB18030";
|
||||
case 65000:
|
||||
return "UTF-7";
|
||||
case 65001:
|
||||
return "UTF-8";
|
||||
default:
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
} // namespace
|
||||
|
||||
const char* __get_locale_encoding(__locale_t loc) {
|
||||
const char* locale_name = loc.__get_locale();
|
||||
if (locale_name == nullptr) {
|
||||
return __codepage_name(::GetACP());
|
||||
}
|
||||
|
||||
std::string_view __sv(locale_name);
|
||||
|
||||
// locale :: "locale-name"
|
||||
// | "language"[_country-region[.code-page]]
|
||||
// | ".code-page"
|
||||
// GetLocaleInfoEx doesn't accept anything other than BCP-47 locale names, e.g. "en_US",
|
||||
// so do a best-attempt to derive the text encoding from the name.
|
||||
if (__sv == "C" || __sv == "") {
|
||||
// "A locale argument value of C specifies the minimal ANSI conforming environment for C translation."
|
||||
// TODO: Figure out what to do for an empty string:
|
||||
// "If locale points to an empty string, the locale is the implementation-defined native environment."
|
||||
return __codepage_name(::GetACP());
|
||||
} else if (auto dot = __sv.find('.'); dot != std::string_view::npos) {
|
||||
std::string_view __code_page(locale_name + dot + 1);
|
||||
|
||||
// Windows allows the codepage number as part of the name,
|
||||
// e.g. "en_US.1252" for English US, Windows-1252.
|
||||
if (std::isdigit(__code_page[0])) {
|
||||
unsigned int __cpage{};
|
||||
auto __res = std::from_chars(__code_page.data(), __code_page.data() + __code_page.size(), __cpage);
|
||||
if (__res) {
|
||||
return __codepage_name(__cpage);
|
||||
}
|
||||
} else { // POSIX-style name
|
||||
return locale_name + dot + 1;
|
||||
}
|
||||
}
|
||||
|
||||
wchar_t locale_wbuffer[LOCALE_NAME_MAX_LENGTH + 1]{};
|
||||
wchar_t number_buffer[11]{};
|
||||
|
||||
bool is_ansi = ::AreFileApisANSI();
|
||||
auto codepage = is_ansi ? CP_ACP : CP_OEMCP;
|
||||
int ret = ::MultiByteToWideChar(
|
||||
codepage, MB_ERR_INVALID_CHARS, locale_name, __sv.size(), locale_wbuffer, LOCALE_NAME_MAX_LENGTH);
|
||||
|
||||
if (ret <= 0)
|
||||
return nullptr;
|
||||
|
||||
// The below function fills the string with the number in text.
|
||||
auto lctype = is_ansi ? LOCALE_IDEFAULTANSICODEPAGE : LOCALE_IDEFAULTCODEPAGE;
|
||||
int result = ::GetLocaleInfoEx(locale_wbuffer, lctype, number_buffer, 10);
|
||||
|
||||
if (result <= 0)
|
||||
return nullptr;
|
||||
|
||||
unsigned int acp = std::wcstoul(number_buffer, nullptr, 10);
|
||||
return __codepage_name(acp);
|
||||
}
|
||||
|
||||
//
|
||||
// Strtonum functions
|
||||
//
|
||||
|
|
|
|||
54
libcxx/src/text_encoding.cpp
Normal file
54
libcxx/src/text_encoding.cpp
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include <__config>
|
||||
#include <__locale_dir/locale_base_api.h>
|
||||
#include <__utility/scope_guard.h>
|
||||
#include <text_encoding>
|
||||
|
||||
_LIBCPP_BEGIN_NAMESPACE_STD
|
||||
_LIBCPP_BEGIN_EXPLICIT_ABI_ANNOTATIONS
|
||||
|
||||
#if defined(__ANDROID__)
|
||||
// UTF-8 is the always the environment encoding on Android.
|
||||
std::text_encoding __get_locale_encoding([[maybe_unused]] const char* __name) { return std::text_encoding::id::UTF8; }
|
||||
#else
|
||||
static text_encoding __make_text_encoding(const char* __name) {
|
||||
if (__name == nullptr)
|
||||
return text_encoding{};
|
||||
|
||||
string_view __name_view(__name);
|
||||
if (__name_view.size() > text_encoding::max_name_length)
|
||||
return text_encoding{};
|
||||
|
||||
return text_encoding(__name_view);
|
||||
}
|
||||
|
||||
std::text_encoding __get_locale_encoding(const char* __name) {
|
||||
if (__name == nullptr)
|
||||
return __make_text_encoding(__locale::__get_locale_encoding(static_cast<__locale::__locale_t>(nullptr)));
|
||||
|
||||
__locale::__locale_t __l = __locale::__newlocale(_LIBCPP_CTYPE_MASK, __name, static_cast<__locale::__locale_t>(0));
|
||||
|
||||
__scope_guard __locale_guard([&__l] {
|
||||
if (__l) {
|
||||
__locale::__freelocale(__l);
|
||||
}
|
||||
});
|
||||
|
||||
if (!__l) {
|
||||
return text_encoding{};
|
||||
}
|
||||
|
||||
return __make_text_encoding(__locale::__get_locale_encoding(__l));
|
||||
}
|
||||
|
||||
#endif // __ANDROID__
|
||||
|
||||
_LIBCPP_END_EXPLICIT_ABI_ANNOTATIONS
|
||||
_LIBCPP_END_NAMESPACE_STD
|
||||
|
|
@ -32,8 +32,9 @@ void test() {
|
|||
// expected-warning@+1 {{ignoring return value of function declared with 'nodiscard' attribute}}
|
||||
l.combine<std::messages<char> >(l);
|
||||
l.name(); // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}}
|
||||
#if TEST_STD_VER >= 26
|
||||
// l.encoding(); // TODO: Verify this once P1885R12 (https://llvm.org/PR105373) is implemented.
|
||||
#if TEST_STD_VER >= 26 && _LIBCPP_AVAILABILITY_HAS_TEXT_ENCODING_ENVIRONMENT
|
||||
// expected-warning@+1 {{ignoring return value of function declared with 'nodiscard' attribute}}
|
||||
l.encoding();
|
||||
#endif
|
||||
// expected-warning@+1 {{ignoring return value of function declared with 'nodiscard' attribute}}
|
||||
l(std::string(), std::string());
|
||||
|
|
|
|||
|
|
@ -0,0 +1,36 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <text_encoding>
|
||||
|
||||
// REQUIRES: std-at-least-c++26
|
||||
// REQUIRES: locale.fr_CA.ISO8859-1
|
||||
|
||||
// UNSUPPORTED: no-localization
|
||||
// UNSUPPORTED: availability-te-environment-missing
|
||||
// REQUIRES: android
|
||||
|
||||
// std::text_encoding::environment()
|
||||
|
||||
#include <cassert>
|
||||
#include <cstdlib>
|
||||
#include <text_encoding>
|
||||
|
||||
#include "platform_support.h" // locale name macros
|
||||
|
||||
int main(int, char**) {
|
||||
// On Android, UTF-8 is unconditionally returned.
|
||||
::setenv("LANG", LOCALE_fr_CA_ISO8859_1, 1);
|
||||
|
||||
auto te = std::text_encoding::environment();
|
||||
assert(std::text_encoding::environment_is<std::text_encoding::id::UTF8>());
|
||||
assert(te == std::text_encoding::environment());
|
||||
assert(te.mib() == std::text_encoding::id::UTF8);
|
||||
|
||||
return 0;
|
||||
}
|
||||
40
libcxx/test/libcxx/text/text_encoding/environment.pass.cpp
Normal file
40
libcxx/test/libcxx/text/text_encoding/environment.pass.cpp
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <text_encoding>
|
||||
|
||||
// REQUIRES: std-at-least-c++26
|
||||
// REQUIRES: locale.fr_CA.ISO8859-1
|
||||
|
||||
// UNSUPPORTED: no-localization
|
||||
// UNSUPPORTED: windows, android
|
||||
// UNSUPPORTED: availability-te-environment-missing
|
||||
|
||||
// std::text_encoding::environment()
|
||||
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
#include <cstdlib>
|
||||
#include <text_encoding>
|
||||
|
||||
#include "platform_support.h" // locale name macros
|
||||
|
||||
int main(int, char**) {
|
||||
// The default text_encoding::environment() which relies on nl_langinfo is
|
||||
// affected by changes to the "LANG" environment variable on POSIX systems.
|
||||
setenv("LANG", LOCALE_fr_CA_ISO8859_1, 1);
|
||||
|
||||
auto te = std::text_encoding::environment();
|
||||
|
||||
assert(std::text_encoding::environment_is<std::text_encoding::id::ISOLatin1>());
|
||||
assert(te == std::text_encoding::environment());
|
||||
assert(te.mib() == std::text_encoding::id::ISOLatin1);
|
||||
assert(std::ranges::contains(te.aliases(), std::string_view("ISO_8859-1")));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <text_encoding>
|
||||
|
||||
// REQUIRES: std-at-least-c++26
|
||||
// REQUIRES: locale.fr_CA.ISO8859-1
|
||||
|
||||
// UNSUPPORTED: no-localization
|
||||
// UNSUPPORTED: availability-te-environment-missing
|
||||
// REQUIRES: windows
|
||||
|
||||
// std::text_encoding::environment()
|
||||
|
||||
#include <cassert>
|
||||
#include <cstdlib>
|
||||
#include <text_encoding>
|
||||
#include <windows.h>
|
||||
|
||||
#include "platform_support.h" // locale name macros
|
||||
|
||||
int main(int, char**) {
|
||||
// On Windows, changes to the "LANG" environment variable don't affect the result
|
||||
// of std::text_encoding::environment() and environment_is()
|
||||
auto te = std::text_encoding::environment();
|
||||
|
||||
::SetEnvironmentVariableA("LANG", LOCALE_fr_CA_ISO8859_1);
|
||||
|
||||
assert(std::text_encoding::environment_is<std::text_encoding::id::windows1252>());
|
||||
assert(te == std::text_encoding::environment());
|
||||
assert(te.mib() == std::text_encoding::id::windows1252);
|
||||
|
||||
return 0;
|
||||
}
|
||||
64
libcxx/test/libcxx/text/text_encoding/nodiscard.verify.cpp
Normal file
64
libcxx/test/libcxx/text/text_encoding/nodiscard.verify.cpp
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// REQUIRES: std-at-least-c++26
|
||||
|
||||
// <text_encoding>
|
||||
|
||||
#include <text_encoding>
|
||||
|
||||
#include "test_macros.h"
|
||||
|
||||
void test() {
|
||||
std::text_encoding te{};
|
||||
|
||||
// expected-warning@+1 {{ignoring return value of function declared with 'nodiscard' attribute}}
|
||||
te.mib();
|
||||
// expected-warning@+1 {{ignoring return value of function declared with 'nodiscard' attribute}}
|
||||
te.name();
|
||||
// expected-warning@+1 {{ignoring return value of function declared with 'nodiscard' attribute}}
|
||||
te.aliases();
|
||||
|
||||
// expected-warning@+1 {{ignoring return value of function declared with 'nodiscard' attribute}}
|
||||
te.aliases();
|
||||
|
||||
auto alias = te.aliases();
|
||||
|
||||
// expected-warning@+1 {{ignoring return value of function declared with 'nodiscard' attribute}}
|
||||
alias.begin();
|
||||
// expected-warning@+1 {{ignoring return value of function declared with 'nodiscard' attribute}}
|
||||
alias.end();
|
||||
|
||||
auto it = alias.begin();
|
||||
|
||||
// expected-warning@+1 {{ignoring return value of function declared with 'nodiscard' attribute}}
|
||||
*it;
|
||||
// expected-warning@+1 {{ignoring return value of function declared with 'nodiscard' attribute}}
|
||||
it[0];
|
||||
// expected-warning@+1 {{ignoring return value of function declared with 'nodiscard' attribute}}
|
||||
it + 1;
|
||||
// expected-warning@+1 {{ignoring return value of function declared with 'nodiscard' attribute}}
|
||||
it - 1;
|
||||
// expected-warning@+1 {{ignoring return value of function declared with 'nodiscard' attribute}}
|
||||
it - it;
|
||||
|
||||
// expected-warning@+1 {{ignoring return value of function declared with 'nodiscard' attribute}}
|
||||
std::hash<std::text_encoding>()(std::text_encoding::ASCII);
|
||||
|
||||
#if !defined(TEST_HAS_NO_LOCALIZATION) && _LIBCPP_AVAILABILITY_HAS_TEXT_ENCODING_ENVIRONMENT
|
||||
// expected-warning@+1 {{ignoring return value of function declared with 'nodiscard' attribute}}
|
||||
te.environment();
|
||||
// expected-warning@+1 {{ignoring return value of function declared with 'nodiscard' attribute}}
|
||||
te.environment_is<std::text_encoding::UTF8>();
|
||||
#endif
|
||||
}
|
||||
|
||||
consteval void literal() {
|
||||
// expected-warning@+1 {{ignoring return value of function declared with 'nodiscard' attribute}}
|
||||
std::text_encoding::literal();
|
||||
}
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// REQUIRES: std-at-least-c++26
|
||||
// REQUIRES: libcpp-hardening-mode={{extensive|debug}}
|
||||
|
||||
// <text_encoding>
|
||||
|
||||
// text_encoding text_encoding(std::text_encoding::id) noexcept
|
||||
|
||||
#include <climits>
|
||||
#include <text_encoding>
|
||||
|
||||
#include "check_assertion.h"
|
||||
|
||||
int main(int, char**) {
|
||||
// Make sure that text_encoding(id) asserts when the input id is not in the range of allowed values
|
||||
|
||||
TEST_LIBCPP_ASSERT_FAILURE(std::text_encoding(std::text_encoding::id(33)), "Mib for NATS-DANO used");
|
||||
TEST_LIBCPP_ASSERT_FAILURE(std::text_encoding(std::text_encoding::id(34)), "Mib for NATS-DANO-ADD used");
|
||||
TEST_LIBCPP_ASSERT_FAILURE(std::text_encoding(std::text_encoding::id(-1)), "invalid text_encoding::id passed");
|
||||
TEST_LIBCPP_ASSERT_FAILURE(std::text_encoding(std::text_encoding::id(INT_MAX)), "invalid text_encoding::id passed");
|
||||
TEST_LIBCPP_ASSERT_FAILURE(std::text_encoding(std::text_encoding::id(int(std::text_encoding::id::CP50220) + 1)),
|
||||
"invalid text_encoding::id passed");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// REQUIRES: has-unix-headers
|
||||
// REQUIRES: std-at-least-c++26
|
||||
// REQUIRES: libcpp-hardening-mode={{extensive|debug}}
|
||||
|
||||
// <text_encoding>
|
||||
|
||||
// text_encoding text_encoding(string_view)
|
||||
|
||||
#include <string>
|
||||
#include <string_view>
|
||||
#include <text_encoding>
|
||||
|
||||
#include "check_assertion.h"
|
||||
|
||||
int main(int, char**) {
|
||||
std::string str(std::text_encoding::max_name_length + 1, 'X');
|
||||
|
||||
// text_encoding(string_view) asserts if its input size() > max_name_length
|
||||
TEST_LIBCPP_ASSERT_FAILURE(std::text_encoding(std::string_view(str)), "input string_view must have size <= 63");
|
||||
|
||||
// text_encoding(string_view) asserts if its input contains a null terminator
|
||||
std::string str2(std::text_encoding::max_name_length, 'X');
|
||||
str2[3] = '\0';
|
||||
|
||||
TEST_LIBCPP_ASSERT_FAILURE(std::text_encoding(std::string_view(str2)), "input string_view must not contain '\\0'");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// REQUIRES: std-at-least-c++26
|
||||
|
||||
// REQUIRES: no-localization
|
||||
|
||||
// <text_encoding>
|
||||
|
||||
// text_encoding text_encoding::environment()
|
||||
// template<std::text_encoding::id> text_encoding text_encoding::environment_is()
|
||||
|
||||
// environment() and environment_is() are deleted if libc++ is built without localization.
|
||||
|
||||
#include <text_encoding>
|
||||
|
||||
void test() {
|
||||
// expected-error@+1 {{attempt to use a deleted function}}
|
||||
std::text_encoding::environment();
|
||||
// expected-error@+1 {{call to deleted function 'environment_is'}}
|
||||
std::text_encoding::environment_is<std::text_encoding::UTF8>();
|
||||
}
|
||||
|
|
@ -69,6 +69,7 @@ any streambuf
|
|||
any string
|
||||
any string_view
|
||||
any system_error
|
||||
any text_encoding
|
||||
any tuple
|
||||
any type_traits
|
||||
any typeinfo
|
||||
|
|
@ -122,15 +123,19 @@ atomic ratio
|
|||
atomic type_traits
|
||||
atomic version
|
||||
barrier atomic
|
||||
barrier cctype
|
||||
barrier climits
|
||||
barrier cmath
|
||||
barrier compare
|
||||
barrier concepts
|
||||
barrier cstddef
|
||||
barrier cstdint
|
||||
barrier cstdio
|
||||
barrier cstdlib
|
||||
barrier cstring
|
||||
barrier ctime
|
||||
barrier cwchar
|
||||
barrier cwctype
|
||||
barrier exception
|
||||
barrier initializer_list
|
||||
barrier iosfwd
|
||||
|
|
@ -234,6 +239,7 @@ ccomplex streambuf
|
|||
ccomplex string
|
||||
ccomplex string_view
|
||||
ccomplex system_error
|
||||
ccomplex text_encoding
|
||||
ccomplex tuple
|
||||
ccomplex type_traits
|
||||
ccomplex typeinfo
|
||||
|
|
@ -292,6 +298,7 @@ chrono streambuf
|
|||
chrono string
|
||||
chrono string_view
|
||||
chrono system_error
|
||||
chrono text_encoding
|
||||
chrono tuple
|
||||
chrono type_traits
|
||||
chrono typeinfo
|
||||
|
|
@ -337,6 +344,7 @@ codecvt stdexcept
|
|||
codecvt string
|
||||
codecvt string_view
|
||||
codecvt system_error
|
||||
codecvt text_encoding
|
||||
codecvt tuple
|
||||
codecvt type_traits
|
||||
codecvt typeinfo
|
||||
|
|
@ -396,6 +404,7 @@ complex streambuf
|
|||
complex string
|
||||
complex string_view
|
||||
complex system_error
|
||||
complex text_encoding
|
||||
complex tuple
|
||||
complex type_traits
|
||||
complex typeinfo
|
||||
|
|
@ -501,6 +510,7 @@ ctgmath streambuf
|
|||
ctgmath string
|
||||
ctgmath string_view
|
||||
ctgmath system_error
|
||||
ctgmath text_encoding
|
||||
ctgmath tuple
|
||||
ctgmath type_traits
|
||||
ctgmath typeinfo
|
||||
|
|
@ -552,6 +562,7 @@ deque streambuf
|
|||
deque string
|
||||
deque string_view
|
||||
deque system_error
|
||||
deque text_encoding
|
||||
deque tuple
|
||||
deque type_traits
|
||||
deque typeinfo
|
||||
|
|
@ -607,6 +618,7 @@ experimental/iterator streambuf
|
|||
experimental/iterator string
|
||||
experimental/iterator string_view
|
||||
experimental/iterator system_error
|
||||
experimental/iterator text_encoding
|
||||
experimental/iterator tuple
|
||||
experimental/iterator type_traits
|
||||
experimental/iterator typeinfo
|
||||
|
|
@ -732,6 +744,7 @@ format streambuf
|
|||
format string
|
||||
format string_view
|
||||
format system_error
|
||||
format text_encoding
|
||||
format tuple
|
||||
format type_traits
|
||||
format typeinfo
|
||||
|
|
@ -778,6 +791,7 @@ forward_list streambuf
|
|||
forward_list string
|
||||
forward_list string_view
|
||||
forward_list system_error
|
||||
forward_list text_encoding
|
||||
forward_list tuple
|
||||
forward_list type_traits
|
||||
forward_list typeinfo
|
||||
|
|
@ -834,6 +848,7 @@ fstream streambuf
|
|||
fstream string
|
||||
fstream string_view
|
||||
fstream system_error
|
||||
fstream text_encoding
|
||||
fstream tuple
|
||||
fstream type_traits
|
||||
fstream typeinfo
|
||||
|
|
@ -879,6 +894,7 @@ functional streambuf
|
|||
functional string
|
||||
functional string_view
|
||||
functional system_error
|
||||
functional text_encoding
|
||||
functional tuple
|
||||
functional type_traits
|
||||
functional typeinfo
|
||||
|
|
@ -936,6 +952,7 @@ future streambuf
|
|||
future string
|
||||
future string_view
|
||||
future system_error
|
||||
future text_encoding
|
||||
future thread
|
||||
future tuple
|
||||
future type_traits
|
||||
|
|
@ -993,6 +1010,7 @@ iomanip streambuf
|
|||
iomanip string
|
||||
iomanip string_view
|
||||
iomanip system_error
|
||||
iomanip text_encoding
|
||||
iomanip tuple
|
||||
iomanip type_traits
|
||||
iomanip typeinfo
|
||||
|
|
@ -1033,6 +1051,7 @@ ios stdexcept
|
|||
ios string
|
||||
ios string_view
|
||||
ios system_error
|
||||
ios text_encoding
|
||||
ios tuple
|
||||
ios type_traits
|
||||
ios typeinfo
|
||||
|
|
@ -1086,6 +1105,7 @@ iostream streambuf
|
|||
iostream string
|
||||
iostream string_view
|
||||
iostream system_error
|
||||
iostream text_encoding
|
||||
iostream tuple
|
||||
iostream type_traits
|
||||
iostream typeinfo
|
||||
|
|
@ -1139,6 +1159,7 @@ istream streambuf
|
|||
istream string
|
||||
istream string_view
|
||||
istream system_error
|
||||
istream text_encoding
|
||||
istream tuple
|
||||
istream type_traits
|
||||
istream typeinfo
|
||||
|
|
@ -1223,6 +1244,7 @@ list streambuf
|
|||
list string
|
||||
list string_view
|
||||
list system_error
|
||||
list text_encoding
|
||||
list tuple
|
||||
list type_traits
|
||||
list typeinfo
|
||||
|
|
@ -1266,6 +1288,7 @@ locale streambuf
|
|||
locale string
|
||||
locale string_view
|
||||
locale system_error
|
||||
locale text_encoding
|
||||
locale tuple
|
||||
locale type_traits
|
||||
locale typeinfo
|
||||
|
|
@ -1310,6 +1333,7 @@ map streambuf
|
|||
map string
|
||||
map string_view
|
||||
map system_error
|
||||
map text_encoding
|
||||
map tuple
|
||||
map type_traits
|
||||
map typeinfo
|
||||
|
|
@ -1442,6 +1466,7 @@ numeric streambuf
|
|||
numeric string
|
||||
numeric string_view
|
||||
numeric system_error
|
||||
numeric text_encoding
|
||||
numeric tuple
|
||||
numeric type_traits
|
||||
numeric typeinfo
|
||||
|
|
@ -1523,6 +1548,7 @@ ostream streambuf
|
|||
ostream string
|
||||
ostream string_view
|
||||
ostream system_error
|
||||
ostream text_encoding
|
||||
ostream tuple
|
||||
ostream type_traits
|
||||
ostream typeinfo
|
||||
|
|
@ -1573,6 +1599,7 @@ print streambuf
|
|||
print string
|
||||
print string_view
|
||||
print system_error
|
||||
print text_encoding
|
||||
print tuple
|
||||
print type_traits
|
||||
print typeinfo
|
||||
|
|
@ -1620,6 +1647,7 @@ queue streambuf
|
|||
queue string
|
||||
queue string_view
|
||||
queue system_error
|
||||
queue text_encoding
|
||||
queue tuple
|
||||
queue type_traits
|
||||
queue typeinfo
|
||||
|
|
@ -1668,6 +1696,7 @@ random streambuf
|
|||
random string
|
||||
random string_view
|
||||
random system_error
|
||||
random text_encoding
|
||||
random tuple
|
||||
random type_traits
|
||||
random typeinfo
|
||||
|
|
@ -1742,6 +1771,7 @@ regex streambuf
|
|||
regex string
|
||||
regex string_view
|
||||
regex system_error
|
||||
regex text_encoding
|
||||
regex tuple
|
||||
regex type_traits
|
||||
regex typeinfo
|
||||
|
|
@ -1830,6 +1860,7 @@ set streambuf
|
|||
set string
|
||||
set string_view
|
||||
set system_error
|
||||
set text_encoding
|
||||
set tuple
|
||||
set type_traits
|
||||
set typeinfo
|
||||
|
|
@ -1914,6 +1945,7 @@ span streambuf
|
|||
span string
|
||||
span string_view
|
||||
span system_error
|
||||
span text_encoding
|
||||
span tuple
|
||||
span type_traits
|
||||
span typeinfo
|
||||
|
|
@ -1968,6 +2000,7 @@ sstream streambuf
|
|||
sstream string
|
||||
sstream string_view
|
||||
sstream system_error
|
||||
sstream text_encoding
|
||||
sstream tuple
|
||||
sstream type_traits
|
||||
sstream typeinfo
|
||||
|
|
@ -2015,6 +2048,7 @@ stack streambuf
|
|||
stack string
|
||||
stack string_view
|
||||
stack system_error
|
||||
stack text_encoding
|
||||
stack tuple
|
||||
stack type_traits
|
||||
stack typeinfo
|
||||
|
|
@ -2032,6 +2066,7 @@ stdexcept new
|
|||
stdexcept type_traits
|
||||
stdexcept typeinfo
|
||||
stdexcept version
|
||||
stop_token cstddef
|
||||
stop_token iosfwd
|
||||
stop_token version
|
||||
streambuf algorithm
|
||||
|
|
@ -2067,6 +2102,7 @@ streambuf stdexcept
|
|||
streambuf string
|
||||
streambuf string_view
|
||||
streambuf system_error
|
||||
streambuf text_encoding
|
||||
streambuf tuple
|
||||
streambuf type_traits
|
||||
streambuf typeinfo
|
||||
|
|
@ -2184,6 +2220,7 @@ strstream streambuf
|
|||
strstream string
|
||||
strstream string_view
|
||||
strstream system_error
|
||||
strstream text_encoding
|
||||
strstream tuple
|
||||
strstream type_traits
|
||||
strstream typeinfo
|
||||
|
|
@ -2239,6 +2276,7 @@ syncstream streambuf
|
|||
syncstream string
|
||||
syncstream string_view
|
||||
syncstream system_error
|
||||
syncstream text_encoding
|
||||
syncstream tuple
|
||||
syncstream type_traits
|
||||
syncstream typeinfo
|
||||
|
|
@ -2331,6 +2369,7 @@ thread streambuf
|
|||
thread string
|
||||
thread string_view
|
||||
thread system_error
|
||||
thread text_encoding
|
||||
thread tuple
|
||||
thread type_traits
|
||||
thread typeinfo
|
||||
|
|
@ -2443,6 +2482,7 @@ unordered_set streambuf
|
|||
unordered_set string
|
||||
unordered_set string_view
|
||||
unordered_set system_error
|
||||
unordered_set text_encoding
|
||||
unordered_set tuple
|
||||
unordered_set type_traits
|
||||
unordered_set typeinfo
|
||||
|
|
@ -2499,6 +2539,7 @@ valarray streambuf
|
|||
valarray string
|
||||
valarray string_view
|
||||
valarray system_error
|
||||
valarray text_encoding
|
||||
valarray tuple
|
||||
valarray type_traits
|
||||
valarray typeinfo
|
||||
|
|
@ -2560,6 +2601,7 @@ vector streambuf
|
|||
vector string
|
||||
vector string_view
|
||||
vector system_error
|
||||
vector text_encoding
|
||||
vector tuple
|
||||
vector type_traits
|
||||
vector typeinfo
|
||||
|
|
|
|||
|
|
|
@ -69,6 +69,7 @@ any streambuf
|
|||
any string
|
||||
any string_view
|
||||
any system_error
|
||||
any text_encoding
|
||||
any tuple
|
||||
any type_traits
|
||||
any typeinfo
|
||||
|
|
@ -122,15 +123,19 @@ atomic ratio
|
|||
atomic type_traits
|
||||
atomic version
|
||||
barrier atomic
|
||||
barrier cctype
|
||||
barrier climits
|
||||
barrier cmath
|
||||
barrier compare
|
||||
barrier concepts
|
||||
barrier cstddef
|
||||
barrier cstdint
|
||||
barrier cstdio
|
||||
barrier cstdlib
|
||||
barrier cstring
|
||||
barrier ctime
|
||||
barrier cwchar
|
||||
barrier cwctype
|
||||
barrier exception
|
||||
barrier initializer_list
|
||||
barrier iosfwd
|
||||
|
|
@ -234,6 +239,7 @@ ccomplex streambuf
|
|||
ccomplex string
|
||||
ccomplex string_view
|
||||
ccomplex system_error
|
||||
ccomplex text_encoding
|
||||
ccomplex tuple
|
||||
ccomplex type_traits
|
||||
ccomplex typeinfo
|
||||
|
|
@ -292,6 +298,7 @@ chrono streambuf
|
|||
chrono string
|
||||
chrono string_view
|
||||
chrono system_error
|
||||
chrono text_encoding
|
||||
chrono tuple
|
||||
chrono type_traits
|
||||
chrono typeinfo
|
||||
|
|
@ -337,6 +344,7 @@ codecvt stdexcept
|
|||
codecvt string
|
||||
codecvt string_view
|
||||
codecvt system_error
|
||||
codecvt text_encoding
|
||||
codecvt tuple
|
||||
codecvt type_traits
|
||||
codecvt typeinfo
|
||||
|
|
@ -396,6 +404,7 @@ complex streambuf
|
|||
complex string
|
||||
complex string_view
|
||||
complex system_error
|
||||
complex text_encoding
|
||||
complex tuple
|
||||
complex type_traits
|
||||
complex typeinfo
|
||||
|
|
@ -501,6 +510,7 @@ ctgmath streambuf
|
|||
ctgmath string
|
||||
ctgmath string_view
|
||||
ctgmath system_error
|
||||
ctgmath text_encoding
|
||||
ctgmath tuple
|
||||
ctgmath type_traits
|
||||
ctgmath typeinfo
|
||||
|
|
@ -552,6 +562,7 @@ deque streambuf
|
|||
deque string
|
||||
deque string_view
|
||||
deque system_error
|
||||
deque text_encoding
|
||||
deque tuple
|
||||
deque type_traits
|
||||
deque typeinfo
|
||||
|
|
@ -607,6 +618,7 @@ experimental/iterator streambuf
|
|||
experimental/iterator string
|
||||
experimental/iterator string_view
|
||||
experimental/iterator system_error
|
||||
experimental/iterator text_encoding
|
||||
experimental/iterator tuple
|
||||
experimental/iterator type_traits
|
||||
experimental/iterator typeinfo
|
||||
|
|
@ -732,6 +744,7 @@ format streambuf
|
|||
format string
|
||||
format string_view
|
||||
format system_error
|
||||
format text_encoding
|
||||
format tuple
|
||||
format type_traits
|
||||
format typeinfo
|
||||
|
|
@ -778,6 +791,7 @@ forward_list streambuf
|
|||
forward_list string
|
||||
forward_list string_view
|
||||
forward_list system_error
|
||||
forward_list text_encoding
|
||||
forward_list tuple
|
||||
forward_list type_traits
|
||||
forward_list typeinfo
|
||||
|
|
@ -834,6 +848,7 @@ fstream streambuf
|
|||
fstream string
|
||||
fstream string_view
|
||||
fstream system_error
|
||||
fstream text_encoding
|
||||
fstream tuple
|
||||
fstream type_traits
|
||||
fstream typeinfo
|
||||
|
|
@ -879,6 +894,7 @@ functional streambuf
|
|||
functional string
|
||||
functional string_view
|
||||
functional system_error
|
||||
functional text_encoding
|
||||
functional tuple
|
||||
functional type_traits
|
||||
functional typeinfo
|
||||
|
|
@ -936,6 +952,7 @@ future streambuf
|
|||
future string
|
||||
future string_view
|
||||
future system_error
|
||||
future text_encoding
|
||||
future thread
|
||||
future tuple
|
||||
future type_traits
|
||||
|
|
@ -993,6 +1010,7 @@ iomanip streambuf
|
|||
iomanip string
|
||||
iomanip string_view
|
||||
iomanip system_error
|
||||
iomanip text_encoding
|
||||
iomanip tuple
|
||||
iomanip type_traits
|
||||
iomanip typeinfo
|
||||
|
|
@ -1033,6 +1051,7 @@ ios stdexcept
|
|||
ios string
|
||||
ios string_view
|
||||
ios system_error
|
||||
ios text_encoding
|
||||
ios tuple
|
||||
ios type_traits
|
||||
ios typeinfo
|
||||
|
|
@ -1086,6 +1105,7 @@ iostream streambuf
|
|||
iostream string
|
||||
iostream string_view
|
||||
iostream system_error
|
||||
iostream text_encoding
|
||||
iostream tuple
|
||||
iostream type_traits
|
||||
iostream typeinfo
|
||||
|
|
@ -1139,6 +1159,7 @@ istream streambuf
|
|||
istream string
|
||||
istream string_view
|
||||
istream system_error
|
||||
istream text_encoding
|
||||
istream tuple
|
||||
istream type_traits
|
||||
istream typeinfo
|
||||
|
|
@ -1223,6 +1244,7 @@ list streambuf
|
|||
list string
|
||||
list string_view
|
||||
list system_error
|
||||
list text_encoding
|
||||
list tuple
|
||||
list type_traits
|
||||
list typeinfo
|
||||
|
|
@ -1266,6 +1288,7 @@ locale streambuf
|
|||
locale string
|
||||
locale string_view
|
||||
locale system_error
|
||||
locale text_encoding
|
||||
locale tuple
|
||||
locale type_traits
|
||||
locale typeinfo
|
||||
|
|
@ -1310,6 +1333,7 @@ map streambuf
|
|||
map string
|
||||
map string_view
|
||||
map system_error
|
||||
map text_encoding
|
||||
map tuple
|
||||
map type_traits
|
||||
map typeinfo
|
||||
|
|
@ -1442,6 +1466,7 @@ numeric streambuf
|
|||
numeric string
|
||||
numeric string_view
|
||||
numeric system_error
|
||||
numeric text_encoding
|
||||
numeric tuple
|
||||
numeric type_traits
|
||||
numeric typeinfo
|
||||
|
|
@ -1523,6 +1548,7 @@ ostream streambuf
|
|||
ostream string
|
||||
ostream string_view
|
||||
ostream system_error
|
||||
ostream text_encoding
|
||||
ostream tuple
|
||||
ostream type_traits
|
||||
ostream typeinfo
|
||||
|
|
@ -1573,6 +1599,7 @@ print streambuf
|
|||
print string
|
||||
print string_view
|
||||
print system_error
|
||||
print text_encoding
|
||||
print tuple
|
||||
print type_traits
|
||||
print typeinfo
|
||||
|
|
@ -1620,6 +1647,7 @@ queue streambuf
|
|||
queue string
|
||||
queue string_view
|
||||
queue system_error
|
||||
queue text_encoding
|
||||
queue tuple
|
||||
queue type_traits
|
||||
queue typeinfo
|
||||
|
|
@ -1668,6 +1696,7 @@ random streambuf
|
|||
random string
|
||||
random string_view
|
||||
random system_error
|
||||
random text_encoding
|
||||
random tuple
|
||||
random type_traits
|
||||
random typeinfo
|
||||
|
|
@ -1742,6 +1771,7 @@ regex streambuf
|
|||
regex string
|
||||
regex string_view
|
||||
regex system_error
|
||||
regex text_encoding
|
||||
regex tuple
|
||||
regex type_traits
|
||||
regex typeinfo
|
||||
|
|
@ -1830,6 +1860,7 @@ set streambuf
|
|||
set string
|
||||
set string_view
|
||||
set system_error
|
||||
set text_encoding
|
||||
set tuple
|
||||
set type_traits
|
||||
set typeinfo
|
||||
|
|
@ -1914,6 +1945,7 @@ span streambuf
|
|||
span string
|
||||
span string_view
|
||||
span system_error
|
||||
span text_encoding
|
||||
span tuple
|
||||
span type_traits
|
||||
span typeinfo
|
||||
|
|
@ -1968,6 +2000,7 @@ sstream streambuf
|
|||
sstream string
|
||||
sstream string_view
|
||||
sstream system_error
|
||||
sstream text_encoding
|
||||
sstream tuple
|
||||
sstream type_traits
|
||||
sstream typeinfo
|
||||
|
|
@ -2015,6 +2048,7 @@ stack streambuf
|
|||
stack string
|
||||
stack string_view
|
||||
stack system_error
|
||||
stack text_encoding
|
||||
stack tuple
|
||||
stack type_traits
|
||||
stack typeinfo
|
||||
|
|
@ -2032,6 +2066,7 @@ stdexcept new
|
|||
stdexcept type_traits
|
||||
stdexcept typeinfo
|
||||
stdexcept version
|
||||
stop_token cstddef
|
||||
stop_token iosfwd
|
||||
stop_token version
|
||||
streambuf algorithm
|
||||
|
|
@ -2067,6 +2102,7 @@ streambuf stdexcept
|
|||
streambuf string
|
||||
streambuf string_view
|
||||
streambuf system_error
|
||||
streambuf text_encoding
|
||||
streambuf tuple
|
||||
streambuf type_traits
|
||||
streambuf typeinfo
|
||||
|
|
@ -2184,6 +2220,7 @@ strstream streambuf
|
|||
strstream string
|
||||
strstream string_view
|
||||
strstream system_error
|
||||
strstream text_encoding
|
||||
strstream tuple
|
||||
strstream type_traits
|
||||
strstream typeinfo
|
||||
|
|
@ -2239,6 +2276,7 @@ syncstream streambuf
|
|||
syncstream string
|
||||
syncstream string_view
|
||||
syncstream system_error
|
||||
syncstream text_encoding
|
||||
syncstream tuple
|
||||
syncstream type_traits
|
||||
syncstream typeinfo
|
||||
|
|
@ -2331,6 +2369,7 @@ thread streambuf
|
|||
thread string
|
||||
thread string_view
|
||||
thread system_error
|
||||
thread text_encoding
|
||||
thread tuple
|
||||
thread type_traits
|
||||
thread typeinfo
|
||||
|
|
@ -2443,6 +2482,7 @@ unordered_set streambuf
|
|||
unordered_set string
|
||||
unordered_set string_view
|
||||
unordered_set system_error
|
||||
unordered_set text_encoding
|
||||
unordered_set tuple
|
||||
unordered_set type_traits
|
||||
unordered_set typeinfo
|
||||
|
|
@ -2499,6 +2539,7 @@ valarray streambuf
|
|||
valarray string
|
||||
valarray string_view
|
||||
valarray system_error
|
||||
valarray text_encoding
|
||||
valarray tuple
|
||||
valarray type_traits
|
||||
valarray typeinfo
|
||||
|
|
@ -2560,6 +2601,7 @@ vector streambuf
|
|||
vector string
|
||||
vector string_view
|
||||
vector system_error
|
||||
vector text_encoding
|
||||
vector tuple
|
||||
vector type_traits
|
||||
vector typeinfo
|
||||
|
|
|
|||
|
|
|
@ -71,6 +71,7 @@ any streambuf
|
|||
any string
|
||||
any string_view
|
||||
any system_error
|
||||
any text_encoding
|
||||
any tuple
|
||||
any type_traits
|
||||
any typeinfo
|
||||
|
|
@ -125,15 +126,19 @@ atomic ratio
|
|||
atomic type_traits
|
||||
atomic version
|
||||
barrier atomic
|
||||
barrier cctype
|
||||
barrier climits
|
||||
barrier cmath
|
||||
barrier compare
|
||||
barrier concepts
|
||||
barrier cstddef
|
||||
barrier cstdint
|
||||
barrier cstdio
|
||||
barrier cstdlib
|
||||
barrier cstring
|
||||
barrier ctime
|
||||
barrier cwchar
|
||||
barrier cwctype
|
||||
barrier exception
|
||||
barrier initializer_list
|
||||
barrier iosfwd
|
||||
|
|
@ -239,6 +244,7 @@ ccomplex streambuf
|
|||
ccomplex string
|
||||
ccomplex string_view
|
||||
ccomplex system_error
|
||||
ccomplex text_encoding
|
||||
ccomplex tuple
|
||||
ccomplex type_traits
|
||||
ccomplex typeinfo
|
||||
|
|
@ -298,6 +304,7 @@ chrono streambuf
|
|||
chrono string
|
||||
chrono string_view
|
||||
chrono system_error
|
||||
chrono text_encoding
|
||||
chrono tuple
|
||||
chrono type_traits
|
||||
chrono typeinfo
|
||||
|
|
@ -344,6 +351,7 @@ codecvt stdexcept
|
|||
codecvt string
|
||||
codecvt string_view
|
||||
codecvt system_error
|
||||
codecvt text_encoding
|
||||
codecvt tuple
|
||||
codecvt type_traits
|
||||
codecvt typeinfo
|
||||
|
|
@ -404,6 +412,7 @@ complex streambuf
|
|||
complex string
|
||||
complex string_view
|
||||
complex system_error
|
||||
complex text_encoding
|
||||
complex tuple
|
||||
complex type_traits
|
||||
complex typeinfo
|
||||
|
|
@ -511,6 +520,7 @@ ctgmath streambuf
|
|||
ctgmath string
|
||||
ctgmath string_view
|
||||
ctgmath system_error
|
||||
ctgmath text_encoding
|
||||
ctgmath tuple
|
||||
ctgmath type_traits
|
||||
ctgmath typeinfo
|
||||
|
|
@ -563,6 +573,7 @@ deque streambuf
|
|||
deque string
|
||||
deque string_view
|
||||
deque system_error
|
||||
deque text_encoding
|
||||
deque tuple
|
||||
deque type_traits
|
||||
deque typeinfo
|
||||
|
|
@ -619,6 +630,7 @@ experimental/iterator streambuf
|
|||
experimental/iterator string
|
||||
experimental/iterator string_view
|
||||
experimental/iterator system_error
|
||||
experimental/iterator text_encoding
|
||||
experimental/iterator tuple
|
||||
experimental/iterator type_traits
|
||||
experimental/iterator typeinfo
|
||||
|
|
@ -751,6 +763,7 @@ format streambuf
|
|||
format string
|
||||
format string_view
|
||||
format system_error
|
||||
format text_encoding
|
||||
format tuple
|
||||
format type_traits
|
||||
format typeinfo
|
||||
|
|
@ -798,6 +811,7 @@ forward_list streambuf
|
|||
forward_list string
|
||||
forward_list string_view
|
||||
forward_list system_error
|
||||
forward_list text_encoding
|
||||
forward_list tuple
|
||||
forward_list type_traits
|
||||
forward_list typeinfo
|
||||
|
|
@ -855,6 +869,7 @@ fstream streambuf
|
|||
fstream string
|
||||
fstream string_view
|
||||
fstream system_error
|
||||
fstream text_encoding
|
||||
fstream tuple
|
||||
fstream type_traits
|
||||
fstream typeinfo
|
||||
|
|
@ -901,6 +916,7 @@ functional streambuf
|
|||
functional string
|
||||
functional string_view
|
||||
functional system_error
|
||||
functional text_encoding
|
||||
functional tuple
|
||||
functional type_traits
|
||||
functional typeinfo
|
||||
|
|
@ -959,6 +975,7 @@ future streambuf
|
|||
future string
|
||||
future string_view
|
||||
future system_error
|
||||
future text_encoding
|
||||
future thread
|
||||
future tuple
|
||||
future type_traits
|
||||
|
|
@ -1017,6 +1034,7 @@ iomanip streambuf
|
|||
iomanip string
|
||||
iomanip string_view
|
||||
iomanip system_error
|
||||
iomanip text_encoding
|
||||
iomanip tuple
|
||||
iomanip type_traits
|
||||
iomanip typeinfo
|
||||
|
|
@ -1058,6 +1076,7 @@ ios stdexcept
|
|||
ios string
|
||||
ios string_view
|
||||
ios system_error
|
||||
ios text_encoding
|
||||
ios tuple
|
||||
ios type_traits
|
||||
ios typeinfo
|
||||
|
|
@ -1112,6 +1131,7 @@ iostream streambuf
|
|||
iostream string
|
||||
iostream string_view
|
||||
iostream system_error
|
||||
iostream text_encoding
|
||||
iostream tuple
|
||||
iostream type_traits
|
||||
iostream typeinfo
|
||||
|
|
@ -1166,6 +1186,7 @@ istream streambuf
|
|||
istream string
|
||||
istream string_view
|
||||
istream system_error
|
||||
istream text_encoding
|
||||
istream tuple
|
||||
istream type_traits
|
||||
istream typeinfo
|
||||
|
|
@ -1251,6 +1272,7 @@ list streambuf
|
|||
list string
|
||||
list string_view
|
||||
list system_error
|
||||
list text_encoding
|
||||
list tuple
|
||||
list type_traits
|
||||
list typeinfo
|
||||
|
|
@ -1295,6 +1317,7 @@ locale streambuf
|
|||
locale string
|
||||
locale string_view
|
||||
locale system_error
|
||||
locale text_encoding
|
||||
locale tuple
|
||||
locale type_traits
|
||||
locale typeinfo
|
||||
|
|
@ -1340,6 +1363,7 @@ map streambuf
|
|||
map string
|
||||
map string_view
|
||||
map system_error
|
||||
map text_encoding
|
||||
map tuple
|
||||
map type_traits
|
||||
map typeinfo
|
||||
|
|
@ -1473,6 +1497,7 @@ numeric streambuf
|
|||
numeric string
|
||||
numeric string_view
|
||||
numeric system_error
|
||||
numeric text_encoding
|
||||
numeric tuple
|
||||
numeric type_traits
|
||||
numeric typeinfo
|
||||
|
|
@ -1555,6 +1580,7 @@ ostream streambuf
|
|||
ostream string
|
||||
ostream string_view
|
||||
ostream system_error
|
||||
ostream text_encoding
|
||||
ostream tuple
|
||||
ostream type_traits
|
||||
ostream typeinfo
|
||||
|
|
@ -1606,6 +1632,7 @@ print streambuf
|
|||
print string
|
||||
print string_view
|
||||
print system_error
|
||||
print text_encoding
|
||||
print tuple
|
||||
print type_traits
|
||||
print typeinfo
|
||||
|
|
@ -1654,6 +1681,7 @@ queue streambuf
|
|||
queue string
|
||||
queue string_view
|
||||
queue system_error
|
||||
queue text_encoding
|
||||
queue tuple
|
||||
queue type_traits
|
||||
queue typeinfo
|
||||
|
|
@ -1702,6 +1730,7 @@ random streambuf
|
|||
random string
|
||||
random string_view
|
||||
random system_error
|
||||
random text_encoding
|
||||
random tuple
|
||||
random type_traits
|
||||
random typeinfo
|
||||
|
|
@ -1777,6 +1806,7 @@ regex streambuf
|
|||
regex string
|
||||
regex string_view
|
||||
regex system_error
|
||||
regex text_encoding
|
||||
regex tuple
|
||||
regex type_traits
|
||||
regex typeinfo
|
||||
|
|
@ -1866,6 +1896,7 @@ set streambuf
|
|||
set string
|
||||
set string_view
|
||||
set system_error
|
||||
set text_encoding
|
||||
set tuple
|
||||
set type_traits
|
||||
set typeinfo
|
||||
|
|
@ -1952,6 +1983,7 @@ span streambuf
|
|||
span string
|
||||
span string_view
|
||||
span system_error
|
||||
span text_encoding
|
||||
span tuple
|
||||
span type_traits
|
||||
span typeinfo
|
||||
|
|
@ -2007,6 +2039,7 @@ sstream streambuf
|
|||
sstream string
|
||||
sstream string_view
|
||||
sstream system_error
|
||||
sstream text_encoding
|
||||
sstream tuple
|
||||
sstream type_traits
|
||||
sstream typeinfo
|
||||
|
|
@ -2055,6 +2088,7 @@ stack streambuf
|
|||
stack string
|
||||
stack string_view
|
||||
stack system_error
|
||||
stack text_encoding
|
||||
stack tuple
|
||||
stack type_traits
|
||||
stack typeinfo
|
||||
|
|
@ -2072,6 +2106,7 @@ stdexcept new
|
|||
stdexcept type_traits
|
||||
stdexcept typeinfo
|
||||
stdexcept version
|
||||
stop_token cstddef
|
||||
stop_token iosfwd
|
||||
stop_token version
|
||||
streambuf algorithm
|
||||
|
|
@ -2108,6 +2143,7 @@ streambuf stdexcept
|
|||
streambuf string
|
||||
streambuf string_view
|
||||
streambuf system_error
|
||||
streambuf text_encoding
|
||||
streambuf tuple
|
||||
streambuf type_traits
|
||||
streambuf typeinfo
|
||||
|
|
@ -2228,6 +2264,7 @@ strstream streambuf
|
|||
strstream string
|
||||
strstream string_view
|
||||
strstream system_error
|
||||
strstream text_encoding
|
||||
strstream tuple
|
||||
strstream type_traits
|
||||
strstream typeinfo
|
||||
|
|
@ -2284,6 +2321,7 @@ syncstream streambuf
|
|||
syncstream string
|
||||
syncstream string_view
|
||||
syncstream system_error
|
||||
syncstream text_encoding
|
||||
syncstream tuple
|
||||
syncstream type_traits
|
||||
syncstream typeinfo
|
||||
|
|
@ -2378,6 +2416,7 @@ thread streambuf
|
|||
thread string
|
||||
thread string_view
|
||||
thread system_error
|
||||
thread text_encoding
|
||||
thread tuple
|
||||
thread type_traits
|
||||
thread typeinfo
|
||||
|
|
@ -2492,6 +2531,7 @@ unordered_set streambuf
|
|||
unordered_set string
|
||||
unordered_set string_view
|
||||
unordered_set system_error
|
||||
unordered_set text_encoding
|
||||
unordered_set tuple
|
||||
unordered_set type_traits
|
||||
unordered_set typeinfo
|
||||
|
|
@ -2549,6 +2589,7 @@ valarray streambuf
|
|||
valarray string
|
||||
valarray string_view
|
||||
valarray system_error
|
||||
valarray text_encoding
|
||||
valarray tuple
|
||||
valarray type_traits
|
||||
valarray typeinfo
|
||||
|
|
@ -2611,6 +2652,7 @@ vector streambuf
|
|||
vector string
|
||||
vector string_view
|
||||
vector system_error
|
||||
vector text_encoding
|
||||
vector tuple
|
||||
vector type_traits
|
||||
vector typeinfo
|
||||
|
|
|
|||
|
|
|
@ -69,6 +69,7 @@ any streambuf
|
|||
any string
|
||||
any string_view
|
||||
any system_error
|
||||
any text_encoding
|
||||
any tuple
|
||||
any type_traits
|
||||
any typeinfo
|
||||
|
|
@ -122,15 +123,19 @@ atomic ratio
|
|||
atomic type_traits
|
||||
atomic version
|
||||
barrier atomic
|
||||
barrier cctype
|
||||
barrier climits
|
||||
barrier cmath
|
||||
barrier compare
|
||||
barrier concepts
|
||||
barrier cstddef
|
||||
barrier cstdint
|
||||
barrier cstdio
|
||||
barrier cstdlib
|
||||
barrier cstring
|
||||
barrier ctime
|
||||
barrier cwchar
|
||||
barrier cwctype
|
||||
barrier exception
|
||||
barrier initializer_list
|
||||
barrier iosfwd
|
||||
|
|
@ -234,6 +239,7 @@ ccomplex streambuf
|
|||
ccomplex string
|
||||
ccomplex string_view
|
||||
ccomplex system_error
|
||||
ccomplex text_encoding
|
||||
ccomplex tuple
|
||||
ccomplex type_traits
|
||||
ccomplex typeinfo
|
||||
|
|
@ -294,6 +300,7 @@ chrono streambuf
|
|||
chrono string
|
||||
chrono string_view
|
||||
chrono system_error
|
||||
chrono text_encoding
|
||||
chrono tuple
|
||||
chrono type_traits
|
||||
chrono typeinfo
|
||||
|
|
@ -339,6 +346,7 @@ codecvt stdexcept
|
|||
codecvt string
|
||||
codecvt string_view
|
||||
codecvt system_error
|
||||
codecvt text_encoding
|
||||
codecvt tuple
|
||||
codecvt type_traits
|
||||
codecvt typeinfo
|
||||
|
|
@ -398,6 +406,7 @@ complex streambuf
|
|||
complex string
|
||||
complex string_view
|
||||
complex system_error
|
||||
complex text_encoding
|
||||
complex tuple
|
||||
complex type_traits
|
||||
complex typeinfo
|
||||
|
|
@ -503,6 +512,7 @@ ctgmath streambuf
|
|||
ctgmath string
|
||||
ctgmath string_view
|
||||
ctgmath system_error
|
||||
ctgmath text_encoding
|
||||
ctgmath tuple
|
||||
ctgmath type_traits
|
||||
ctgmath typeinfo
|
||||
|
|
@ -554,6 +564,7 @@ deque streambuf
|
|||
deque string
|
||||
deque string_view
|
||||
deque system_error
|
||||
deque text_encoding
|
||||
deque tuple
|
||||
deque type_traits
|
||||
deque typeinfo
|
||||
|
|
@ -609,6 +620,7 @@ experimental/iterator streambuf
|
|||
experimental/iterator string
|
||||
experimental/iterator string_view
|
||||
experimental/iterator system_error
|
||||
experimental/iterator text_encoding
|
||||
experimental/iterator tuple
|
||||
experimental/iterator type_traits
|
||||
experimental/iterator typeinfo
|
||||
|
|
@ -693,6 +705,7 @@ filesystem streambuf
|
|||
filesystem string
|
||||
filesystem string_view
|
||||
filesystem system_error
|
||||
filesystem text_encoding
|
||||
filesystem tuple
|
||||
filesystem type_traits
|
||||
filesystem typeinfo
|
||||
|
|
@ -758,6 +771,7 @@ format streambuf
|
|||
format string
|
||||
format string_view
|
||||
format system_error
|
||||
format text_encoding
|
||||
format tuple
|
||||
format type_traits
|
||||
format typeinfo
|
||||
|
|
@ -804,6 +818,7 @@ forward_list streambuf
|
|||
forward_list string
|
||||
forward_list string_view
|
||||
forward_list system_error
|
||||
forward_list text_encoding
|
||||
forward_list tuple
|
||||
forward_list type_traits
|
||||
forward_list typeinfo
|
||||
|
|
@ -860,6 +875,7 @@ fstream streambuf
|
|||
fstream string
|
||||
fstream string_view
|
||||
fstream system_error
|
||||
fstream text_encoding
|
||||
fstream tuple
|
||||
fstream type_traits
|
||||
fstream typeinfo
|
||||
|
|
@ -905,6 +921,7 @@ functional streambuf
|
|||
functional string
|
||||
functional string_view
|
||||
functional system_error
|
||||
functional text_encoding
|
||||
functional tuple
|
||||
functional type_traits
|
||||
functional typeinfo
|
||||
|
|
@ -962,6 +979,7 @@ future streambuf
|
|||
future string
|
||||
future string_view
|
||||
future system_error
|
||||
future text_encoding
|
||||
future thread
|
||||
future tuple
|
||||
future type_traits
|
||||
|
|
@ -1019,6 +1037,7 @@ iomanip streambuf
|
|||
iomanip string
|
||||
iomanip string_view
|
||||
iomanip system_error
|
||||
iomanip text_encoding
|
||||
iomanip tuple
|
||||
iomanip type_traits
|
||||
iomanip typeinfo
|
||||
|
|
@ -1059,6 +1078,7 @@ ios stdexcept
|
|||
ios string
|
||||
ios string_view
|
||||
ios system_error
|
||||
ios text_encoding
|
||||
ios tuple
|
||||
ios type_traits
|
||||
ios typeinfo
|
||||
|
|
@ -1112,6 +1132,7 @@ iostream streambuf
|
|||
iostream string
|
||||
iostream string_view
|
||||
iostream system_error
|
||||
iostream text_encoding
|
||||
iostream tuple
|
||||
iostream type_traits
|
||||
iostream typeinfo
|
||||
|
|
@ -1165,6 +1186,7 @@ istream streambuf
|
|||
istream string
|
||||
istream string_view
|
||||
istream system_error
|
||||
istream text_encoding
|
||||
istream tuple
|
||||
istream type_traits
|
||||
istream typeinfo
|
||||
|
|
@ -1249,6 +1271,7 @@ list streambuf
|
|||
list string
|
||||
list string_view
|
||||
list system_error
|
||||
list text_encoding
|
||||
list tuple
|
||||
list type_traits
|
||||
list typeinfo
|
||||
|
|
@ -1292,6 +1315,7 @@ locale streambuf
|
|||
locale string
|
||||
locale string_view
|
||||
locale system_error
|
||||
locale text_encoding
|
||||
locale tuple
|
||||
locale type_traits
|
||||
locale typeinfo
|
||||
|
|
@ -1336,6 +1360,7 @@ map streambuf
|
|||
map string
|
||||
map string_view
|
||||
map system_error
|
||||
map text_encoding
|
||||
map tuple
|
||||
map type_traits
|
||||
map typeinfo
|
||||
|
|
@ -1495,6 +1520,7 @@ numeric streambuf
|
|||
numeric string
|
||||
numeric string_view
|
||||
numeric system_error
|
||||
numeric text_encoding
|
||||
numeric tuple
|
||||
numeric type_traits
|
||||
numeric typeinfo
|
||||
|
|
@ -1576,6 +1602,7 @@ ostream streambuf
|
|||
ostream string
|
||||
ostream string_view
|
||||
ostream system_error
|
||||
ostream text_encoding
|
||||
ostream tuple
|
||||
ostream type_traits
|
||||
ostream typeinfo
|
||||
|
|
@ -1626,6 +1653,7 @@ print streambuf
|
|||
print string
|
||||
print string_view
|
||||
print system_error
|
||||
print text_encoding
|
||||
print tuple
|
||||
print type_traits
|
||||
print typeinfo
|
||||
|
|
@ -1673,6 +1701,7 @@ queue streambuf
|
|||
queue string
|
||||
queue string_view
|
||||
queue system_error
|
||||
queue text_encoding
|
||||
queue tuple
|
||||
queue type_traits
|
||||
queue typeinfo
|
||||
|
|
@ -1721,6 +1750,7 @@ random streambuf
|
|||
random string
|
||||
random string_view
|
||||
random system_error
|
||||
random text_encoding
|
||||
random tuple
|
||||
random type_traits
|
||||
random typeinfo
|
||||
|
|
@ -1795,6 +1825,7 @@ regex streambuf
|
|||
regex string
|
||||
regex string_view
|
||||
regex system_error
|
||||
regex text_encoding
|
||||
regex tuple
|
||||
regex type_traits
|
||||
regex typeinfo
|
||||
|
|
@ -1883,6 +1914,7 @@ set streambuf
|
|||
set string
|
||||
set string_view
|
||||
set system_error
|
||||
set text_encoding
|
||||
set tuple
|
||||
set type_traits
|
||||
set typeinfo
|
||||
|
|
@ -1967,6 +1999,7 @@ span streambuf
|
|||
span string
|
||||
span string_view
|
||||
span system_error
|
||||
span text_encoding
|
||||
span tuple
|
||||
span type_traits
|
||||
span typeinfo
|
||||
|
|
@ -2021,6 +2054,7 @@ sstream streambuf
|
|||
sstream string
|
||||
sstream string_view
|
||||
sstream system_error
|
||||
sstream text_encoding
|
||||
sstream tuple
|
||||
sstream type_traits
|
||||
sstream typeinfo
|
||||
|
|
@ -2068,6 +2102,7 @@ stack streambuf
|
|||
stack string
|
||||
stack string_view
|
||||
stack system_error
|
||||
stack text_encoding
|
||||
stack tuple
|
||||
stack type_traits
|
||||
stack typeinfo
|
||||
|
|
@ -2085,6 +2120,7 @@ stdexcept new
|
|||
stdexcept type_traits
|
||||
stdexcept typeinfo
|
||||
stdexcept version
|
||||
stop_token cstddef
|
||||
stop_token iosfwd
|
||||
stop_token version
|
||||
streambuf algorithm
|
||||
|
|
@ -2120,6 +2156,7 @@ streambuf stdexcept
|
|||
streambuf string
|
||||
streambuf string_view
|
||||
streambuf system_error
|
||||
streambuf text_encoding
|
||||
streambuf tuple
|
||||
streambuf type_traits
|
||||
streambuf typeinfo
|
||||
|
|
@ -2237,6 +2274,7 @@ strstream streambuf
|
|||
strstream string
|
||||
strstream string_view
|
||||
strstream system_error
|
||||
strstream text_encoding
|
||||
strstream tuple
|
||||
strstream type_traits
|
||||
strstream typeinfo
|
||||
|
|
@ -2292,6 +2330,7 @@ syncstream streambuf
|
|||
syncstream string
|
||||
syncstream string_view
|
||||
syncstream system_error
|
||||
syncstream text_encoding
|
||||
syncstream tuple
|
||||
syncstream type_traits
|
||||
syncstream typeinfo
|
||||
|
|
@ -2384,6 +2423,7 @@ thread streambuf
|
|||
thread string
|
||||
thread string_view
|
||||
thread system_error
|
||||
thread text_encoding
|
||||
thread tuple
|
||||
thread type_traits
|
||||
thread typeinfo
|
||||
|
|
@ -2496,6 +2536,7 @@ unordered_set streambuf
|
|||
unordered_set string
|
||||
unordered_set string_view
|
||||
unordered_set system_error
|
||||
unordered_set text_encoding
|
||||
unordered_set tuple
|
||||
unordered_set type_traits
|
||||
unordered_set typeinfo
|
||||
|
|
@ -2552,6 +2593,7 @@ valarray streambuf
|
|||
valarray string
|
||||
valarray string_view
|
||||
valarray system_error
|
||||
valarray text_encoding
|
||||
valarray tuple
|
||||
valarray type_traits
|
||||
valarray typeinfo
|
||||
|
|
@ -2613,6 +2655,7 @@ vector streambuf
|
|||
vector string
|
||||
vector string_view
|
||||
vector system_error
|
||||
vector text_encoding
|
||||
vector tuple
|
||||
vector type_traits
|
||||
vector typeinfo
|
||||
|
|
|
|||
|
|
|
@ -219,6 +219,7 @@ ccomplex streambuf
|
|||
ccomplex string
|
||||
ccomplex string_view
|
||||
ccomplex system_error
|
||||
ccomplex text_encoding
|
||||
ccomplex tuple
|
||||
ccomplex type_traits
|
||||
ccomplex typeinfo
|
||||
|
|
@ -289,6 +290,7 @@ chrono streambuf
|
|||
chrono string
|
||||
chrono string_view
|
||||
chrono system_error
|
||||
chrono text_encoding
|
||||
chrono tuple
|
||||
chrono type_traits
|
||||
chrono typeinfo
|
||||
|
|
@ -334,6 +336,7 @@ codecvt stdexcept
|
|||
codecvt string
|
||||
codecvt string_view
|
||||
codecvt system_error
|
||||
codecvt text_encoding
|
||||
codecvt tuple
|
||||
codecvt type_traits
|
||||
codecvt typeinfo
|
||||
|
|
@ -393,6 +396,7 @@ complex streambuf
|
|||
complex string
|
||||
complex string_view
|
||||
complex system_error
|
||||
complex text_encoding
|
||||
complex tuple
|
||||
complex type_traits
|
||||
complex typeinfo
|
||||
|
|
@ -499,6 +503,7 @@ ctgmath streambuf
|
|||
ctgmath string
|
||||
ctgmath string_view
|
||||
ctgmath system_error
|
||||
ctgmath text_encoding
|
||||
ctgmath tuple
|
||||
ctgmath type_traits
|
||||
ctgmath typeinfo
|
||||
|
|
@ -550,6 +555,7 @@ deque streambuf
|
|||
deque string
|
||||
deque string_view
|
||||
deque system_error
|
||||
deque text_encoding
|
||||
deque tuple
|
||||
deque type_traits
|
||||
deque typeinfo
|
||||
|
|
@ -605,6 +611,7 @@ experimental/iterator streambuf
|
|||
experimental/iterator string
|
||||
experimental/iterator string_view
|
||||
experimental/iterator system_error
|
||||
experimental/iterator text_encoding
|
||||
experimental/iterator tuple
|
||||
experimental/iterator type_traits
|
||||
experimental/iterator typeinfo
|
||||
|
|
@ -689,6 +696,7 @@ filesystem streambuf
|
|||
filesystem string
|
||||
filesystem string_view
|
||||
filesystem system_error
|
||||
filesystem text_encoding
|
||||
filesystem tuple
|
||||
filesystem type_traits
|
||||
filesystem typeinfo
|
||||
|
|
@ -754,6 +762,7 @@ format streambuf
|
|||
format string
|
||||
format string_view
|
||||
format system_error
|
||||
format text_encoding
|
||||
format tuple
|
||||
format type_traits
|
||||
format typeinfo
|
||||
|
|
@ -800,6 +809,7 @@ forward_list streambuf
|
|||
forward_list string
|
||||
forward_list string_view
|
||||
forward_list system_error
|
||||
forward_list text_encoding
|
||||
forward_list tuple
|
||||
forward_list type_traits
|
||||
forward_list typeinfo
|
||||
|
|
@ -856,6 +866,7 @@ fstream streambuf
|
|||
fstream string
|
||||
fstream string_view
|
||||
fstream system_error
|
||||
fstream text_encoding
|
||||
fstream tuple
|
||||
fstream type_traits
|
||||
fstream typeinfo
|
||||
|
|
@ -901,6 +912,7 @@ functional streambuf
|
|||
functional string
|
||||
functional string_view
|
||||
functional system_error
|
||||
functional text_encoding
|
||||
functional tuple
|
||||
functional type_traits
|
||||
functional typeinfo
|
||||
|
|
@ -956,6 +968,7 @@ future streambuf
|
|||
future string
|
||||
future string_view
|
||||
future system_error
|
||||
future text_encoding
|
||||
future thread
|
||||
future tuple
|
||||
future type_traits
|
||||
|
|
@ -1013,6 +1026,7 @@ iomanip streambuf
|
|||
iomanip string
|
||||
iomanip string_view
|
||||
iomanip system_error
|
||||
iomanip text_encoding
|
||||
iomanip tuple
|
||||
iomanip type_traits
|
||||
iomanip typeinfo
|
||||
|
|
@ -1053,6 +1067,7 @@ ios stdexcept
|
|||
ios string
|
||||
ios string_view
|
||||
ios system_error
|
||||
ios text_encoding
|
||||
ios tuple
|
||||
ios type_traits
|
||||
ios typeinfo
|
||||
|
|
@ -1106,6 +1121,7 @@ iostream streambuf
|
|||
iostream string
|
||||
iostream string_view
|
||||
iostream system_error
|
||||
iostream text_encoding
|
||||
iostream tuple
|
||||
iostream type_traits
|
||||
iostream typeinfo
|
||||
|
|
@ -1159,6 +1175,7 @@ istream streambuf
|
|||
istream string
|
||||
istream string_view
|
||||
istream system_error
|
||||
istream text_encoding
|
||||
istream tuple
|
||||
istream type_traits
|
||||
istream typeinfo
|
||||
|
|
@ -1243,6 +1260,7 @@ list streambuf
|
|||
list string
|
||||
list string_view
|
||||
list system_error
|
||||
list text_encoding
|
||||
list tuple
|
||||
list type_traits
|
||||
list typeinfo
|
||||
|
|
@ -1286,6 +1304,7 @@ locale streambuf
|
|||
locale string
|
||||
locale string_view
|
||||
locale system_error
|
||||
locale text_encoding
|
||||
locale tuple
|
||||
locale type_traits
|
||||
locale typeinfo
|
||||
|
|
@ -1330,6 +1349,7 @@ map streambuf
|
|||
map string
|
||||
map string_view
|
||||
map system_error
|
||||
map text_encoding
|
||||
map tuple
|
||||
map type_traits
|
||||
map typeinfo
|
||||
|
|
@ -1489,6 +1509,7 @@ numeric streambuf
|
|||
numeric string
|
||||
numeric string_view
|
||||
numeric system_error
|
||||
numeric text_encoding
|
||||
numeric tuple
|
||||
numeric type_traits
|
||||
numeric typeinfo
|
||||
|
|
@ -1570,6 +1591,7 @@ ostream streambuf
|
|||
ostream string
|
||||
ostream string_view
|
||||
ostream system_error
|
||||
ostream text_encoding
|
||||
ostream tuple
|
||||
ostream type_traits
|
||||
ostream typeinfo
|
||||
|
|
@ -1620,6 +1642,7 @@ print streambuf
|
|||
print string
|
||||
print string_view
|
||||
print system_error
|
||||
print text_encoding
|
||||
print tuple
|
||||
print type_traits
|
||||
print typeinfo
|
||||
|
|
@ -1667,6 +1690,7 @@ queue streambuf
|
|||
queue string
|
||||
queue string_view
|
||||
queue system_error
|
||||
queue text_encoding
|
||||
queue tuple
|
||||
queue type_traits
|
||||
queue typeinfo
|
||||
|
|
@ -1715,6 +1739,7 @@ random streambuf
|
|||
random string
|
||||
random string_view
|
||||
random system_error
|
||||
random text_encoding
|
||||
random tuple
|
||||
random type_traits
|
||||
random typeinfo
|
||||
|
|
@ -1762,6 +1787,7 @@ ranges streambuf
|
|||
ranges string
|
||||
ranges string_view
|
||||
ranges system_error
|
||||
ranges text_encoding
|
||||
ranges tuple
|
||||
ranges type_traits
|
||||
ranges typeinfo
|
||||
|
|
@ -1813,6 +1839,7 @@ regex streambuf
|
|||
regex string
|
||||
regex string_view
|
||||
regex system_error
|
||||
regex text_encoding
|
||||
regex tuple
|
||||
regex type_traits
|
||||
regex typeinfo
|
||||
|
|
@ -1901,6 +1928,7 @@ set streambuf
|
|||
set string
|
||||
set string_view
|
||||
set system_error
|
||||
set text_encoding
|
||||
set tuple
|
||||
set type_traits
|
||||
set typeinfo
|
||||
|
|
@ -1985,6 +2013,7 @@ span streambuf
|
|||
span string
|
||||
span string_view
|
||||
span system_error
|
||||
span text_encoding
|
||||
span tuple
|
||||
span type_traits
|
||||
span typeinfo
|
||||
|
|
@ -2039,6 +2068,7 @@ sstream streambuf
|
|||
sstream string
|
||||
sstream string_view
|
||||
sstream system_error
|
||||
sstream text_encoding
|
||||
sstream tuple
|
||||
sstream type_traits
|
||||
sstream typeinfo
|
||||
|
|
@ -2086,6 +2116,7 @@ stack streambuf
|
|||
stack string
|
||||
stack string_view
|
||||
stack system_error
|
||||
stack text_encoding
|
||||
stack tuple
|
||||
stack type_traits
|
||||
stack typeinfo
|
||||
|
|
@ -2150,6 +2181,7 @@ streambuf stdexcept
|
|||
streambuf string
|
||||
streambuf string_view
|
||||
streambuf system_error
|
||||
streambuf text_encoding
|
||||
streambuf tuple
|
||||
streambuf type_traits
|
||||
streambuf typeinfo
|
||||
|
|
@ -2267,6 +2299,7 @@ strstream streambuf
|
|||
strstream string
|
||||
strstream string_view
|
||||
strstream system_error
|
||||
strstream text_encoding
|
||||
strstream tuple
|
||||
strstream type_traits
|
||||
strstream typeinfo
|
||||
|
|
@ -2322,6 +2355,7 @@ syncstream streambuf
|
|||
syncstream string
|
||||
syncstream string_view
|
||||
syncstream system_error
|
||||
syncstream text_encoding
|
||||
syncstream tuple
|
||||
syncstream type_traits
|
||||
syncstream typeinfo
|
||||
|
|
@ -2412,6 +2446,7 @@ thread streambuf
|
|||
thread string
|
||||
thread string_view
|
||||
thread system_error
|
||||
thread text_encoding
|
||||
thread tuple
|
||||
thread type_traits
|
||||
thread typeinfo
|
||||
|
|
@ -2524,6 +2559,7 @@ unordered_set streambuf
|
|||
unordered_set string
|
||||
unordered_set string_view
|
||||
unordered_set system_error
|
||||
unordered_set text_encoding
|
||||
unordered_set tuple
|
||||
unordered_set type_traits
|
||||
unordered_set typeinfo
|
||||
|
|
@ -2580,6 +2616,7 @@ valarray streambuf
|
|||
valarray string
|
||||
valarray string_view
|
||||
valarray system_error
|
||||
valarray text_encoding
|
||||
valarray tuple
|
||||
valarray type_traits
|
||||
valarray typeinfo
|
||||
|
|
@ -2641,6 +2678,7 @@ vector streambuf
|
|||
vector string
|
||||
vector string_view
|
||||
vector system_error
|
||||
vector text_encoding
|
||||
vector tuple
|
||||
vector type_traits
|
||||
vector typeinfo
|
||||
|
|
|
|||
|
|
|
@ -90,6 +90,7 @@ ccomplex stdexcept
|
|||
ccomplex streambuf
|
||||
ccomplex string
|
||||
ccomplex string_view
|
||||
ccomplex text_encoding
|
||||
ccomplex tuple
|
||||
ccomplex typeinfo
|
||||
ccomplex version
|
||||
|
|
@ -129,6 +130,7 @@ chrono stdexcept
|
|||
chrono streambuf
|
||||
chrono string
|
||||
chrono string_view
|
||||
chrono text_encoding
|
||||
chrono tuple
|
||||
chrono typeinfo
|
||||
chrono version
|
||||
|
|
@ -152,6 +154,7 @@ codecvt limits
|
|||
codecvt stdexcept
|
||||
codecvt string
|
||||
codecvt string_view
|
||||
codecvt text_encoding
|
||||
codecvt tuple
|
||||
codecvt typeinfo
|
||||
codecvt version
|
||||
|
|
@ -185,6 +188,7 @@ complex stdexcept
|
|||
complex streambuf
|
||||
complex string
|
||||
complex string_view
|
||||
complex text_encoding
|
||||
complex tuple
|
||||
complex typeinfo
|
||||
complex version
|
||||
|
|
@ -234,6 +238,7 @@ ctgmath stdexcept
|
|||
ctgmath streambuf
|
||||
ctgmath string
|
||||
ctgmath string_view
|
||||
ctgmath text_encoding
|
||||
ctgmath tuple
|
||||
ctgmath typeinfo
|
||||
ctgmath version
|
||||
|
|
@ -285,6 +290,7 @@ experimental/iterator stdexcept
|
|||
experimental/iterator streambuf
|
||||
experimental/iterator string
|
||||
experimental/iterator string_view
|
||||
experimental/iterator text_encoding
|
||||
experimental/iterator tuple
|
||||
experimental/iterator typeinfo
|
||||
experimental/iterator variant
|
||||
|
|
@ -330,6 +336,7 @@ filesystem stdexcept
|
|||
filesystem streambuf
|
||||
filesystem string
|
||||
filesystem string_view
|
||||
filesystem text_encoding
|
||||
filesystem tuple
|
||||
filesystem typeinfo
|
||||
filesystem version
|
||||
|
|
@ -380,6 +387,7 @@ format optional
|
|||
format stdexcept
|
||||
format string
|
||||
format string_view
|
||||
format text_encoding
|
||||
format tuple
|
||||
format typeinfo
|
||||
format version
|
||||
|
|
@ -419,6 +427,7 @@ fstream stdexcept
|
|||
fstream streambuf
|
||||
fstream string
|
||||
fstream string_view
|
||||
fstream text_encoding
|
||||
fstream tuple
|
||||
fstream typeinfo
|
||||
fstream version
|
||||
|
|
@ -463,6 +472,7 @@ future stdexcept
|
|||
future streambuf
|
||||
future string
|
||||
future string_view
|
||||
future text_encoding
|
||||
future tuple
|
||||
future typeinfo
|
||||
future version
|
||||
|
|
@ -490,6 +500,7 @@ iomanip stdexcept
|
|||
iomanip streambuf
|
||||
iomanip string
|
||||
iomanip string_view
|
||||
iomanip text_encoding
|
||||
iomanip tuple
|
||||
iomanip typeinfo
|
||||
iomanip version
|
||||
|
|
@ -513,6 +524,7 @@ ios ratio
|
|||
ios stdexcept
|
||||
ios string
|
||||
ios string_view
|
||||
ios text_encoding
|
||||
ios tuple
|
||||
ios typeinfo
|
||||
ios version
|
||||
|
|
@ -548,6 +560,7 @@ iostream stdexcept
|
|||
iostream streambuf
|
||||
iostream string
|
||||
iostream string_view
|
||||
iostream text_encoding
|
||||
iostream tuple
|
||||
iostream typeinfo
|
||||
iostream version
|
||||
|
|
@ -575,6 +588,7 @@ istream stdexcept
|
|||
istream streambuf
|
||||
istream string
|
||||
istream string_view
|
||||
istream text_encoding
|
||||
istream tuple
|
||||
istream typeinfo
|
||||
istream version
|
||||
|
|
@ -631,6 +645,7 @@ locale stdexcept
|
|||
locale streambuf
|
||||
locale string
|
||||
locale string_view
|
||||
locale text_encoding
|
||||
locale tuple
|
||||
locale typeinfo
|
||||
locale version
|
||||
|
|
@ -735,6 +750,7 @@ ostream stdexcept
|
|||
ostream streambuf
|
||||
ostream string
|
||||
ostream string_view
|
||||
ostream text_encoding
|
||||
ostream tuple
|
||||
ostream typeinfo
|
||||
ostream version
|
||||
|
|
@ -760,6 +776,7 @@ print optional
|
|||
print stdexcept
|
||||
print string
|
||||
print string_view
|
||||
print text_encoding
|
||||
print tuple
|
||||
print typeinfo
|
||||
print version
|
||||
|
|
@ -850,6 +867,7 @@ regex limits
|
|||
regex stdexcept
|
||||
regex string
|
||||
regex string_view
|
||||
regex text_encoding
|
||||
regex tuple
|
||||
regex typeinfo
|
||||
regex vector
|
||||
|
|
@ -916,6 +934,7 @@ sstream stdexcept
|
|||
sstream streambuf
|
||||
sstream string
|
||||
sstream string_view
|
||||
sstream text_encoding
|
||||
sstream tuple
|
||||
sstream typeinfo
|
||||
sstream version
|
||||
|
|
@ -960,6 +979,7 @@ streambuf ratio
|
|||
streambuf stdexcept
|
||||
streambuf string
|
||||
streambuf string_view
|
||||
streambuf text_encoding
|
||||
streambuf tuple
|
||||
streambuf typeinfo
|
||||
streambuf version
|
||||
|
|
@ -1015,6 +1035,7 @@ strstream stdexcept
|
|||
strstream streambuf
|
||||
strstream string
|
||||
strstream string_view
|
||||
strstream text_encoding
|
||||
strstream tuple
|
||||
strstream typeinfo
|
||||
strstream version
|
||||
|
|
@ -1050,6 +1071,7 @@ syncstream stdexcept
|
|||
syncstream streambuf
|
||||
syncstream string
|
||||
syncstream string_view
|
||||
syncstream text_encoding
|
||||
syncstream tuple
|
||||
syncstream typeinfo
|
||||
syncstream version
|
||||
|
|
@ -1098,6 +1120,7 @@ thread stdexcept
|
|||
thread streambuf
|
||||
thread string
|
||||
thread string_view
|
||||
thread text_encoding
|
||||
thread tuple
|
||||
thread typeinfo
|
||||
thread version
|
||||
|
|
|
|||
|
|
|
@ -85,6 +85,7 @@ ccomplex stdexcept
|
|||
ccomplex streambuf
|
||||
ccomplex string
|
||||
ccomplex string_view
|
||||
ccomplex text_encoding
|
||||
ccomplex tuple
|
||||
ccomplex typeinfo
|
||||
ccomplex version
|
||||
|
|
@ -123,6 +124,7 @@ chrono stdexcept
|
|||
chrono streambuf
|
||||
chrono string
|
||||
chrono string_view
|
||||
chrono text_encoding
|
||||
chrono tuple
|
||||
chrono typeinfo
|
||||
chrono version
|
||||
|
|
@ -146,6 +148,7 @@ codecvt limits
|
|||
codecvt stdexcept
|
||||
codecvt string
|
||||
codecvt string_view
|
||||
codecvt text_encoding
|
||||
codecvt tuple
|
||||
codecvt typeinfo
|
||||
codecvt version
|
||||
|
|
@ -176,6 +179,7 @@ complex stdexcept
|
|||
complex streambuf
|
||||
complex string
|
||||
complex string_view
|
||||
complex text_encoding
|
||||
complex tuple
|
||||
complex typeinfo
|
||||
complex version
|
||||
|
|
@ -221,6 +225,7 @@ ctgmath stdexcept
|
|||
ctgmath streambuf
|
||||
ctgmath string
|
||||
ctgmath string_view
|
||||
ctgmath text_encoding
|
||||
ctgmath tuple
|
||||
ctgmath typeinfo
|
||||
ctgmath version
|
||||
|
|
@ -268,6 +273,7 @@ experimental/iterator stdexcept
|
|||
experimental/iterator streambuf
|
||||
experimental/iterator string
|
||||
experimental/iterator string_view
|
||||
experimental/iterator text_encoding
|
||||
experimental/iterator tuple
|
||||
experimental/iterator typeinfo
|
||||
experimental/iterator variant
|
||||
|
|
@ -312,6 +318,7 @@ filesystem ratio
|
|||
filesystem stdexcept
|
||||
filesystem string
|
||||
filesystem string_view
|
||||
filesystem text_encoding
|
||||
filesystem tuple
|
||||
filesystem typeinfo
|
||||
filesystem version
|
||||
|
|
@ -361,6 +368,7 @@ format optional
|
|||
format stdexcept
|
||||
format string
|
||||
format string_view
|
||||
format text_encoding
|
||||
format tuple
|
||||
format typeinfo
|
||||
format version
|
||||
|
|
@ -396,6 +404,7 @@ fstream stdexcept
|
|||
fstream streambuf
|
||||
fstream string
|
||||
fstream string_view
|
||||
fstream text_encoding
|
||||
fstream tuple
|
||||
fstream typeinfo
|
||||
fstream version
|
||||
|
|
@ -439,6 +448,7 @@ future stdexcept
|
|||
future streambuf
|
||||
future string
|
||||
future string_view
|
||||
future text_encoding
|
||||
future tuple
|
||||
future typeinfo
|
||||
future version
|
||||
|
|
@ -462,6 +472,7 @@ iomanip limits
|
|||
iomanip stdexcept
|
||||
iomanip string
|
||||
iomanip string_view
|
||||
iomanip text_encoding
|
||||
iomanip tuple
|
||||
iomanip typeinfo
|
||||
iomanip version
|
||||
|
|
@ -483,6 +494,7 @@ ios limits
|
|||
ios stdexcept
|
||||
ios string
|
||||
ios string_view
|
||||
ios text_encoding
|
||||
ios tuple
|
||||
ios typeinfo
|
||||
ios version
|
||||
|
|
@ -514,6 +526,7 @@ iostream stdexcept
|
|||
iostream streambuf
|
||||
iostream string
|
||||
iostream string_view
|
||||
iostream text_encoding
|
||||
iostream tuple
|
||||
iostream typeinfo
|
||||
iostream version
|
||||
|
|
@ -538,6 +551,7 @@ istream stdexcept
|
|||
istream streambuf
|
||||
istream string
|
||||
istream string_view
|
||||
istream text_encoding
|
||||
istream tuple
|
||||
istream typeinfo
|
||||
istream version
|
||||
|
|
@ -592,6 +606,7 @@ locale stdexcept
|
|||
locale streambuf
|
||||
locale string
|
||||
locale string_view
|
||||
locale text_encoding
|
||||
locale tuple
|
||||
locale typeinfo
|
||||
locale version
|
||||
|
|
@ -691,6 +706,7 @@ ostream stdexcept
|
|||
ostream streambuf
|
||||
ostream string
|
||||
ostream string_view
|
||||
ostream text_encoding
|
||||
ostream tuple
|
||||
ostream typeinfo
|
||||
ostream version
|
||||
|
|
@ -715,6 +731,7 @@ print optional
|
|||
print stdexcept
|
||||
print string
|
||||
print string_view
|
||||
print text_encoding
|
||||
print tuple
|
||||
print typeinfo
|
||||
print version
|
||||
|
|
@ -797,6 +814,7 @@ regex limits
|
|||
regex stdexcept
|
||||
regex string
|
||||
regex string_view
|
||||
regex text_encoding
|
||||
regex tuple
|
||||
regex typeinfo
|
||||
regex vector
|
||||
|
|
@ -860,6 +878,7 @@ sstream stdexcept
|
|||
sstream streambuf
|
||||
sstream string
|
||||
sstream string_view
|
||||
sstream text_encoding
|
||||
sstream tuple
|
||||
sstream typeinfo
|
||||
sstream version
|
||||
|
|
@ -901,6 +920,7 @@ streambuf limits
|
|||
streambuf stdexcept
|
||||
streambuf string
|
||||
streambuf string_view
|
||||
streambuf text_encoding
|
||||
streambuf tuple
|
||||
streambuf typeinfo
|
||||
streambuf version
|
||||
|
|
@ -953,6 +973,7 @@ strstream stdexcept
|
|||
strstream streambuf
|
||||
strstream string
|
||||
strstream string_view
|
||||
strstream text_encoding
|
||||
strstream tuple
|
||||
strstream typeinfo
|
||||
strstream version
|
||||
|
|
@ -986,6 +1007,7 @@ syncstream stdexcept
|
|||
syncstream streambuf
|
||||
syncstream string
|
||||
syncstream string_view
|
||||
syncstream text_encoding
|
||||
syncstream tuple
|
||||
syncstream typeinfo
|
||||
syncstream version
|
||||
|
|
@ -1006,6 +1028,20 @@ system_error string
|
|||
system_error string_view
|
||||
system_error tuple
|
||||
system_error version
|
||||
text_encoding cctype
|
||||
text_encoding climits
|
||||
text_encoding compare
|
||||
text_encoding cstdint
|
||||
text_encoding cstdio
|
||||
text_encoding cstring
|
||||
text_encoding cwchar
|
||||
text_encoding cwctype
|
||||
text_encoding initializer_list
|
||||
text_encoding iosfwd
|
||||
text_encoding limits
|
||||
text_encoding stdexcept
|
||||
text_encoding string_view
|
||||
text_encoding version
|
||||
thread array
|
||||
thread bitset
|
||||
thread cctype
|
||||
|
|
@ -1032,6 +1068,7 @@ thread stdexcept
|
|||
thread streambuf
|
||||
thread string
|
||||
thread string_view
|
||||
thread text_encoding
|
||||
thread tuple
|
||||
thread typeinfo
|
||||
thread version
|
||||
|
|
|
|||
|
|
|
@ -0,0 +1,62 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// WARNING: This test was generated by generate_feature_test_macro_components.py
|
||||
// and should not be edited manually.
|
||||
|
||||
// <text_encoding>
|
||||
|
||||
// Test the feature test macros defined by <text_encoding>
|
||||
|
||||
// clang-format off
|
||||
|
||||
#include <text_encoding>
|
||||
#include "test_macros.h"
|
||||
|
||||
#if TEST_STD_VER < 14
|
||||
|
||||
# ifdef __cpp_lib_text_encoding
|
||||
# error "__cpp_lib_text_encoding should not be defined before c++26"
|
||||
# endif
|
||||
|
||||
#elif TEST_STD_VER == 14
|
||||
|
||||
# ifdef __cpp_lib_text_encoding
|
||||
# error "__cpp_lib_text_encoding should not be defined before c++26"
|
||||
# endif
|
||||
|
||||
#elif TEST_STD_VER == 17
|
||||
|
||||
# ifdef __cpp_lib_text_encoding
|
||||
# error "__cpp_lib_text_encoding should not be defined before c++26"
|
||||
# endif
|
||||
|
||||
#elif TEST_STD_VER == 20
|
||||
|
||||
# ifdef __cpp_lib_text_encoding
|
||||
# error "__cpp_lib_text_encoding should not be defined before c++26"
|
||||
# endif
|
||||
|
||||
#elif TEST_STD_VER == 23
|
||||
|
||||
# ifdef __cpp_lib_text_encoding
|
||||
# error "__cpp_lib_text_encoding should not be defined before c++26"
|
||||
# endif
|
||||
|
||||
#elif TEST_STD_VER > 23
|
||||
|
||||
# ifndef __cpp_lib_text_encoding
|
||||
# error "__cpp_lib_text_encoding should be defined in c++26"
|
||||
# endif
|
||||
# if __cpp_lib_text_encoding != 202306L
|
||||
# error "__cpp_lib_text_encoding should have the value 202306L in c++26"
|
||||
# endif
|
||||
|
||||
#endif // TEST_STD_VER > 23
|
||||
|
||||
// clang-format on
|
||||
|
|
@ -8146,17 +8146,11 @@
|
|||
# endif
|
||||
# endif
|
||||
|
||||
# if !defined(_LIBCPP_VERSION)
|
||||
# ifndef __cpp_lib_text_encoding
|
||||
# error "__cpp_lib_text_encoding should be defined in c++26"
|
||||
# endif
|
||||
# if __cpp_lib_text_encoding != 202306L
|
||||
# error "__cpp_lib_text_encoding should have the value 202306L in c++26"
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_text_encoding
|
||||
# error "__cpp_lib_text_encoding should not be defined because it is unimplemented in libc++!"
|
||||
# endif
|
||||
# ifndef __cpp_lib_text_encoding
|
||||
# error "__cpp_lib_text_encoding should be defined in c++26"
|
||||
# endif
|
||||
# if __cpp_lib_text_encoding != 202306L
|
||||
# error "__cpp_lib_text_encoding should have the value 202306L in c++26"
|
||||
# endif
|
||||
|
||||
# ifndef __cpp_lib_three_way_comparison
|
||||
|
|
|
|||
|
|
@ -30,6 +30,11 @@
|
|||
#include "platform_support.h" // locale name macros
|
||||
#include "test_macros.h"
|
||||
|
||||
// glibc <langinfo.h> has a THOUSANDS_SEP macro already defined
|
||||
#ifdef THOUSANDS_SEP
|
||||
# undef THOUSANDS_SEP
|
||||
#endif
|
||||
|
||||
#ifdef _AIX
|
||||
// the AIX libc expects U202F as LC_MONETARY thousands_sep
|
||||
# define THOUSANDS_SEP L"\u202F"
|
||||
|
|
|
|||
|
|
@ -30,6 +30,11 @@
|
|||
#include "platform_support.h" // locale name macros
|
||||
#include "test_macros.h"
|
||||
|
||||
// glibc <langinfo.h> has a THOUSANDS_SEP macro already defined
|
||||
#ifdef THOUSANDS_SEP
|
||||
# undef THOUSANDS_SEP
|
||||
#endif
|
||||
|
||||
#ifdef _AIX
|
||||
// the AIX libc expects U202F as LC_MONETARY thousands_sep
|
||||
# define THOUSANDS_SEP L"\u202F"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,53 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <text_encoding>
|
||||
|
||||
// REQUIRES: std-at-least-c++26
|
||||
// REQUIRES: locale.en_US.UTF-8
|
||||
// UNSUPPORTED: no-localization
|
||||
// UNSUPPORTED: availability-te-environment-missing
|
||||
|
||||
// class locale
|
||||
|
||||
// text_encoding locale::encoding() const
|
||||
|
||||
#include <cassert>
|
||||
#include <concepts>
|
||||
#include <format>
|
||||
#include <iostream>
|
||||
#include <locale>
|
||||
#include <text_encoding>
|
||||
|
||||
#include "platform_support.h"
|
||||
|
||||
int main(int, char**) {
|
||||
{
|
||||
// 1. Locale built with en_US.UTF-8 returns text_encoding representing "UTF-8"
|
||||
const std::locale utf8_locale(LOCALE_en_US_UTF_8);
|
||||
std::same_as<std::text_encoding> decltype(auto) te = utf8_locale.encoding();
|
||||
auto utf8_te = std::text_encoding{std::text_encoding::UTF8};
|
||||
|
||||
if (te != std::text_encoding::UTF8) {
|
||||
std::cerr << std::format("Expected UTF-8, received {{ {}, \"{}\" }}", int(te.mib()), te.name());
|
||||
assert(false);
|
||||
}
|
||||
assert(te == utf8_te);
|
||||
}
|
||||
#if defined(_WIN32)
|
||||
{
|
||||
// BCP-47 locale name
|
||||
const std::locale loc("en-US");
|
||||
std::same_as<std::text_encoding> decltype(auto) te = loc.encoding();
|
||||
auto w1252 = std::text_encoding{std::text_encoding::windows1252};
|
||||
assert(te == std::text_encoding::windows1252);
|
||||
assert(te == w1252);
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
1171
libcxx/test/std/text/text_encoding/test_text_encoding.h
Normal file
1171
libcxx/test/std/text/text_encoding/test_text_encoding.h
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -0,0 +1,37 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// REQUIRES: std-at-least-c++26
|
||||
|
||||
// <text_encoding>
|
||||
|
||||
// text_encoding::text_encoding() noexcept
|
||||
|
||||
#include <cassert>
|
||||
#include <concepts>
|
||||
#include <text_encoding>
|
||||
#include <type_traits>
|
||||
|
||||
constexpr bool test() {
|
||||
std::text_encoding te{};
|
||||
assert(te.mib() == std::text_encoding::unknown);
|
||||
assert(std::string_view("") == te.name());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int main(int, char**) {
|
||||
// 1. Default constructor must be nothrow
|
||||
static_assert(std::is_nothrow_default_constructible_v<std::text_encoding>, "Must be nothrow default constructible");
|
||||
|
||||
// 2. Default constructing a text_encoding object makes it so that mib() == id::unknown, and its name is empty
|
||||
test();
|
||||
static_assert(test());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// REQUIRES: std-at-least-c++26
|
||||
|
||||
// <text_encoding>
|
||||
|
||||
// text_encoding::text_encoding(std::text_encoding::id) noexcept
|
||||
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
#include <concepts>
|
||||
#include <ranges>
|
||||
#include <text_encoding>
|
||||
#include <type_traits>
|
||||
|
||||
#include "../test_text_encoding.h"
|
||||
|
||||
using id = std::text_encoding::id;
|
||||
|
||||
constexpr bool test() {
|
||||
{
|
||||
// 2. Constructing an object with a valid id must set mib() and the name to the corresponding value.
|
||||
for (auto pair : unique_encoding_data) {
|
||||
std::text_encoding te{id(pair.mib)};
|
||||
|
||||
assert(te.mib() == id(pair.mib));
|
||||
assert(pair.name == te.name());
|
||||
assert(std::ranges::contains(te.aliases(), pair.name));
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
// 3. Constructing an object using id::unknown or id::other must set mib() to id::unknown or id::other, respectively, and the name to an empty string.
|
||||
{
|
||||
std::text_encoding te{id::other};
|
||||
|
||||
assert(te.mib() == id::other);
|
||||
assert(std::string_view("") == te.name());
|
||||
assert(std::ranges::empty(te.aliases()));
|
||||
}
|
||||
|
||||
{
|
||||
std::text_encoding te{id::unknown};
|
||||
|
||||
assert(te.mib() == id::unknown);
|
||||
assert(std::string_view("") == te.name());
|
||||
assert(std::ranges::empty(te.aliases()));
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int main(int, char**) {
|
||||
// 1. text_encoding(id) must be nothrow
|
||||
static_assert(std::is_nothrow_constructible_v<std::text_encoding, std::text_encoding::id>,
|
||||
"Must be nothrow constructible with id");
|
||||
|
||||
test();
|
||||
static_assert(test());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// REQUIRES: std-at-least-c++26
|
||||
// ADDITIONAL_COMPILE_FLAGS(has-fconstexpr-steps): -fconstexpr-steps=40000000
|
||||
// ADDITIONAL_COMPILE_FLAGS(has-fconstexpr-ops-limit): -fconstexpr-ops-limit=1000000000
|
||||
|
||||
// <text_encoding>
|
||||
|
||||
// text_encoding::text_encoding(string_view) noexcept
|
||||
|
||||
#include <cassert>
|
||||
#include <string_view>
|
||||
#include <text_encoding>
|
||||
#include <type_traits>
|
||||
|
||||
#include "../test_text_encoding.h"
|
||||
|
||||
using id = std::text_encoding::id;
|
||||
|
||||
constexpr void test_ctor(std::string_view str, id expect_id) {
|
||||
std::text_encoding te{str};
|
||||
|
||||
assert(te.mib() == expect_id);
|
||||
assert(te.name() == str);
|
||||
}
|
||||
|
||||
constexpr bool test() {
|
||||
// The first encoding name for each mib in the data table.
|
||||
for (auto& data : unique_encoding_data) {
|
||||
std::text_encoding te{data.name};
|
||||
|
||||
assert(te.mib() == id(data.mib));
|
||||
assert(te.name() == data.name);
|
||||
}
|
||||
|
||||
// Names that should all result in an "other" text encoding
|
||||
for (auto& name : other_names) {
|
||||
std::text_encoding te{name};
|
||||
|
||||
assert(te.mib() == std::text_encoding::other);
|
||||
assert(te.name() == name);
|
||||
}
|
||||
|
||||
test_ctor("U_T_F-8", id::UTF8);
|
||||
test_ctor("utf8", id::UTF8);
|
||||
test_ctor("u.t.f-008", id::UTF8);
|
||||
test_ctor("utf-80", id::other);
|
||||
test_ctor("iso885931988", id::ISOLatin3);
|
||||
test_ctor("iso00885931988", id::ISOLatin3);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int main(int, char**) {
|
||||
static_assert(std::is_nothrow_constructible_v<std::text_encoding, std::string_view>,
|
||||
"Must be nothrow constructible with string_view");
|
||||
|
||||
test();
|
||||
static_assert(test());
|
||||
|
||||
// Check every possible alias, intentionally runtime only as it would take unreasonably long to test in constexpr.
|
||||
for (auto& enc : all_encoding_data) {
|
||||
test_ctor(enc.name, id(enc.mib));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// REQUIRES: std-at-least-c++26
|
||||
|
||||
// <text_encoding>
|
||||
|
||||
// bool text_encoding::operator==(const text_encoding&, id) noexcept
|
||||
|
||||
#include <cassert>
|
||||
#include <text_encoding>
|
||||
|
||||
#include "test_macros.h"
|
||||
#include "../test_text_encoding.h"
|
||||
|
||||
using id = std::text_encoding::id;
|
||||
|
||||
constexpr void test_primary_encodings() {
|
||||
for (auto& data : unique_encoding_data) {
|
||||
std::text_encoding te{id(data.mib)};
|
||||
assert(te == id(data.mib));
|
||||
}
|
||||
}
|
||||
|
||||
constexpr bool test() {
|
||||
// operator==(const text_encoding&, id) must be noexcept and returns bool
|
||||
{
|
||||
std::text_encoding te{};
|
||||
ASSERT_SAME_TYPE(decltype(te == id::UTF8), bool);
|
||||
ASSERT_NOEXCEPT(te == id::UTF8);
|
||||
}
|
||||
|
||||
// operator==(const text_encoding&, id) returns true if mib() is equal to the id
|
||||
{
|
||||
test_primary_encodings();
|
||||
|
||||
// unknown, other cases
|
||||
assert(std::text_encoding() == id::unknown);
|
||||
assert(std::text_encoding(id::unknown) == id::unknown);
|
||||
assert(std::text_encoding(id::other) == id::other);
|
||||
}
|
||||
|
||||
// operator==(const text_encoding&, id) returns false if mib() is not equal to the id
|
||||
{
|
||||
assert(!(std::text_encoding(id::UTF8) == id::UTF16));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int main(int, char**) {
|
||||
test();
|
||||
static_assert(test());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// REQUIRES: std-at-least-c++26
|
||||
|
||||
// <text_encoding>
|
||||
|
||||
// bool text_encoding::operator==(const text_encoding&, const text_encoding&) noexcept
|
||||
|
||||
#include <cassert>
|
||||
#include <text_encoding>
|
||||
|
||||
#include "test_macros.h"
|
||||
|
||||
using id = std::text_encoding::id;
|
||||
|
||||
constexpr bool test() {
|
||||
// 1. operator==(const text_encoding&, const text_encoding&) must be noexcept and returns bool
|
||||
{
|
||||
ASSERT_NOEXCEPT(std::text_encoding() == std::text_encoding());
|
||||
ASSERT_SAME_TYPE(bool, decltype(std::text_encoding() == std::text_encoding()));
|
||||
}
|
||||
|
||||
// 2. operator==(const text_encoding&, const text_encoding&) returns true if both text_encoding ids are equal
|
||||
{
|
||||
std::text_encoding te1{id::UTF8};
|
||||
std::text_encoding te2{id::UTF8};
|
||||
assert(te1 == te2);
|
||||
assert((te1 == te2) == !(te1 != te2));
|
||||
|
||||
const std::text_encoding& te11 = te1;
|
||||
const std::text_encoding& te22 = te2;
|
||||
assert(te11 == te22);
|
||||
assert((te11 == te22) == !(te11 != te22));
|
||||
}
|
||||
|
||||
// 3. operator==(const text_encoding&, const text_encoding&) for text_encodings with ids of "other" return true if the names are equal
|
||||
{
|
||||
std::text_encoding other_te1{"foo"};
|
||||
std::text_encoding other_te2{"foo"};
|
||||
assert(other_te1 == other_te2);
|
||||
}
|
||||
|
||||
// 4. operator==(const text_encoding&, const text_encoding&) returns false when comparing text_encodings with different ids
|
||||
{
|
||||
std::text_encoding te1{id::UTF8};
|
||||
std::text_encoding te2{id::UTF16};
|
||||
assert(!(te1 == te2));
|
||||
}
|
||||
|
||||
// 5. operator==(const text_encoding&, const text_encoding&) for text_encodings with ids of "other" returns false if the names are not equal
|
||||
{
|
||||
std::text_encoding other_te1("foo");
|
||||
std::text_encoding other_te2("bar");
|
||||
assert(!(other_te1 == other_te2));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int main(int, char**) {
|
||||
test();
|
||||
static_assert(test());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// REQUIRES: std-at-least-c++26
|
||||
|
||||
// <text_encoding>
|
||||
|
||||
// template <> struct hash<text_encoding>
|
||||
|
||||
#include <text_encoding>
|
||||
|
||||
#include "poisoned_hash_helper.h"
|
||||
|
||||
int main(int, char**) {
|
||||
test_library_hash_specializations_available();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// REQUIRES: std-at-least-c++26
|
||||
|
||||
// <text_encoding>
|
||||
|
||||
// template <> struct hash<text_encoding>
|
||||
|
||||
#include "poisoned_hash_helper.h"
|
||||
#include <cassert>
|
||||
#include <cstdint>
|
||||
#include <text_encoding>
|
||||
#include <type_traits>
|
||||
|
||||
void test_te_hash() {
|
||||
using T = std::text_encoding;
|
||||
using H = std::hash<T>;
|
||||
|
||||
{
|
||||
const T te(T::ASCII);
|
||||
const H h{};
|
||||
assert(h(te) == h(te));
|
||||
static_assert(std::is_same_v<decltype(h(te)), std::size_t>);
|
||||
}
|
||||
|
||||
{
|
||||
const T te1(T::ASCII);
|
||||
const T te2(T::UTF8);
|
||||
const H h{};
|
||||
|
||||
assert(h(te1) != h(te2));
|
||||
}
|
||||
|
||||
{
|
||||
const T te1(T::unknown);
|
||||
const T te2(T::unknown);
|
||||
const H h{};
|
||||
assert(h(te1) == h(te2));
|
||||
}
|
||||
|
||||
{
|
||||
const T te1(T::other);
|
||||
const T te2(T::other);
|
||||
const H h{};
|
||||
assert(h(te1) == h(te2));
|
||||
}
|
||||
}
|
||||
|
||||
int main(int, char**) {
|
||||
test_te_hash();
|
||||
test_hash_enabled<std::text_encoding>();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// REQUIRES: std-at-least-c++26
|
||||
|
||||
// <text_encoding>
|
||||
|
||||
// constexpr text_encoding::aliases()
|
||||
|
||||
#include <cassert>
|
||||
#include <string_view>
|
||||
#include <text_encoding>
|
||||
|
||||
#include "test_macros.h"
|
||||
|
||||
constexpr bool test() {
|
||||
static_assert(noexcept(std::text_encoding().aliases()));
|
||||
ASSERT_SAME_TYPE(decltype(std::text_encoding().aliases()), std::text_encoding::aliases_view);
|
||||
|
||||
// 2 aliases
|
||||
std::text_encoding utf8{std::text_encoding::UTF8};
|
||||
|
||||
auto aliases = utf8.aliases();
|
||||
|
||||
assert(aliases.size() == 2);
|
||||
assert(std::string_view(aliases[0]) == "UTF-8");
|
||||
assert(std::string_view(aliases[1]) == "csUTF8");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int main(int, char**) {
|
||||
test();
|
||||
static_assert(test());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// REQUIRES: std-at-least-c++26
|
||||
|
||||
// <text_encoding>
|
||||
|
||||
// text_encoding::aliases_view;
|
||||
|
||||
#include <concepts>
|
||||
#include <text_encoding>
|
||||
|
||||
static_assert(std::copyable<std::text_encoding::aliases_view>);
|
||||
static_assert(std::ranges::view<std::text_encoding::aliases_view>);
|
||||
static_assert(std::ranges::random_access_range<std::text_encoding::aliases_view>);
|
||||
static_assert(std::ranges::borrowed_range<std::text_encoding::aliases_view>);
|
||||
static_assert(std::same_as<std::ranges::range_value_t<std::text_encoding::aliases_view>, const char*>);
|
||||
static_assert(std::same_as<std::ranges::range_reference_t<std::text_encoding::aliases_view>, const char*>);
|
||||
|
|
@ -0,0 +1,79 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// REQUIRES: std-at-least-c++26
|
||||
// REQUIRES: locale.en_US.UTF-8
|
||||
|
||||
// UNSUPPORTED: no-localization
|
||||
// UNSUPPORTED: availability-te-environment-missing
|
||||
|
||||
// <text_encoding>
|
||||
|
||||
// text_encoding text_encoding::environment();
|
||||
|
||||
#include <cassert>
|
||||
#include <clocale>
|
||||
#include <format>
|
||||
#include <iostream>
|
||||
#include <text_encoding>
|
||||
|
||||
#include "platform_support.h"
|
||||
#include "test_macros.h"
|
||||
|
||||
int main(int, char**) {
|
||||
auto check_env = []() {
|
||||
#if defined(__ANDROID__)
|
||||
constexpr std::text_encoding::id expected_id = std::text_encoding::UTF8;
|
||||
#elif defined(__linux__) || defined(__FreeBSD__) || defined(__APPLE__)
|
||||
constexpr std::text_encoding::id expected_id = std::text_encoding::ASCII;
|
||||
#elif defined(_WIN32)
|
||||
constexpr std::text_encoding::id expected_id = std::text_encoding::windows1252;
|
||||
#elif defined(_AIX)
|
||||
constexpr std::text_encoding::id expected_id = std::text_encoding::ISOLatin1;
|
||||
#else
|
||||
constexpr std::text_encoding::id expected_id = std::text_encoding::unknown;
|
||||
#endif
|
||||
|
||||
std::same_as<std::text_encoding> decltype(auto) te = std::text_encoding::environment();
|
||||
|
||||
bool fail = false;
|
||||
if (te != expected_id) {
|
||||
std::cerr << std::format(
|
||||
"Environment mismatch: Expected ID {}, received: {{{},{}}}\n", int(expected_id), int(te.mib()), te.name());
|
||||
fail = true;
|
||||
}
|
||||
std::same_as<bool> decltype(auto) env_is_expected = std::text_encoding::environment_is<expected_id>();
|
||||
if (!env_is_expected) {
|
||||
fail = true;
|
||||
}
|
||||
|
||||
return !fail;
|
||||
};
|
||||
|
||||
{
|
||||
// 1. Depending on the platform's default, verify that environment() returns the corresponding text encoding.
|
||||
assert(check_env());
|
||||
}
|
||||
|
||||
auto te = std::text_encoding::environment();
|
||||
// 2. text_encoding::environment()'s return value isn't altered by changes to locale.
|
||||
{
|
||||
std::setlocale(LC_ALL, LOCALE_en_US_UTF_8);
|
||||
|
||||
auto te2 = std::text_encoding::environment();
|
||||
assert(te == te2);
|
||||
}
|
||||
|
||||
{
|
||||
std::setlocale(LC_CTYPE, LOCALE_en_US_UTF_8);
|
||||
|
||||
auto te2 = std::text_encoding::environment();
|
||||
assert(te == te2);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,281 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// REQUIRES: std-at-least-c++26
|
||||
|
||||
// <text_encoding>
|
||||
|
||||
// std::text_encoding::id;
|
||||
// Test that every member of the id enumeration has the correct value.
|
||||
|
||||
#include <cstdint>
|
||||
#include <text_encoding>
|
||||
#include <type_traits>
|
||||
|
||||
using std::int_least32_t;
|
||||
|
||||
static_assert(std::is_scoped_enum_v<std::text_encoding::id>);
|
||||
static_assert(std::is_same_v<std::underlying_type_t<std::text_encoding::id>, std::int_least32_t>);
|
||||
static_assert(int_least32_t(std::text_encoding::id::other) == 1);
|
||||
static_assert(int_least32_t(std::text_encoding::id::unknown) == 2);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ASCII) == 3);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISOLatin1) == 4);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISOLatin2) == 5);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISOLatin3) == 6);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISOLatin4) == 7);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISOLatinCyrillic) == 8);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISOLatinArabic) == 9);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISOLatinGreek) == 10);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISOLatinHebrew) == 11);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISOLatin5) == 12);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISOLatin6) == 13);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISOTextComm) == 14);
|
||||
static_assert(int_least32_t(std::text_encoding::id::HalfWidthKatakana) == 15);
|
||||
static_assert(int_least32_t(std::text_encoding::id::JISEncoding) == 16);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ShiftJIS) == 17);
|
||||
static_assert(int_least32_t(std::text_encoding::id::EUCPkdFmtJapanese) == 18);
|
||||
static_assert(int_least32_t(std::text_encoding::id::EUCFixWidJapanese) == 19);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO4UnitedKingdom) == 20);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO11SwedishForNames) == 21);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO15Italian) == 22);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO17Spanish) == 23);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO21German) == 24);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO60DanishNorwegian) == 25);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO69French) == 26);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO10646UTF1) == 27);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO646basic1983) == 28);
|
||||
static_assert(int_least32_t(std::text_encoding::id::INVARIANT) == 29);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO2IntlRefVersion) == 30);
|
||||
static_assert(int_least32_t(std::text_encoding::id::NATSSEFI) == 31);
|
||||
static_assert(int_least32_t(std::text_encoding::id::NATSSEFIADD) == 32);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO10Swedish) == 35);
|
||||
static_assert(int_least32_t(std::text_encoding::id::KSC56011987) == 36);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO2022KR) == 37);
|
||||
static_assert(int_least32_t(std::text_encoding::id::EUCKR) == 38);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO2022JP) == 39);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO2022JP2) == 40);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO13JISC6220jp) == 41);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO14JISC6220ro) == 42);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO16Portuguese) == 43);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO18Greek7Old) == 44);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO19LatinGreek) == 45);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO25French) == 46);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO27LatinGreek1) == 47);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO5427Cyrillic) == 48);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO42JISC62261978) == 49);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO47BSViewdata) == 50);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO49INIS) == 51);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO50INIS8) == 52);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO51INISCyrillic) == 53);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO54271981) == 54);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO5428Greek) == 55);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO57GB1988) == 56);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO58GB231280) == 57);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO61Norwegian2) == 58);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO70VideotexSupp1) == 59);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO84Portuguese2) == 60);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO85Spanish2) == 61);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO86Hungarian) == 62);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO87JISX0208) == 63);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO88Greek7) == 64);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO89ASMO449) == 65);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO90) == 66);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO91JISC62291984a) == 67);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO92JISC62991984b) == 68);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO93JIS62291984badd) == 69);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO94JIS62291984hand) == 70);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO95JIS62291984handadd) == 71);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO96JISC62291984kana) == 72);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO2033) == 73);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO99NAPLPS) == 74);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO102T617bit) == 75);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO103T618bit) == 76);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO111ECMACyrillic) == 77);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO121Canadian1) == 78);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO122Canadian2) == 79);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO123CSAZ24341985gr) == 80);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO88596E) == 81);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO88596I) == 82);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO128T101G2) == 83);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO88598E) == 84);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO88598I) == 85);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO139CSN369103) == 86);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO141JUSIB1002) == 87);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO143IECP271) == 88);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO146Serbian) == 89);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO147Macedonian) == 90);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO150) == 91);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO151Cuba) == 92);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO6937Add) == 93);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO153GOST1976874) == 94);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO8859Supp) == 95);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO10367Box) == 96);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO158Lap) == 97);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO159JISX02121990) == 98);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO646Danish) == 99);
|
||||
static_assert(int_least32_t(std::text_encoding::id::USDK) == 100);
|
||||
static_assert(int_least32_t(std::text_encoding::id::DKUS) == 101);
|
||||
static_assert(int_least32_t(std::text_encoding::id::KSC5636) == 102);
|
||||
static_assert(int_least32_t(std::text_encoding::id::Unicode11UTF7) == 103);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO2022CN) == 104);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO2022CNEXT) == 105);
|
||||
static_assert(int_least32_t(std::text_encoding::id::UTF8) == 106);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO885913) == 109);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO885914) == 110);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO885915) == 111);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO885916) == 112);
|
||||
static_assert(int_least32_t(std::text_encoding::id::GBK) == 113);
|
||||
static_assert(int_least32_t(std::text_encoding::id::GB18030) == 114);
|
||||
static_assert(int_least32_t(std::text_encoding::id::OSDEBCDICDF0415) == 115);
|
||||
static_assert(int_least32_t(std::text_encoding::id::OSDEBCDICDF03IRV) == 116);
|
||||
static_assert(int_least32_t(std::text_encoding::id::OSDEBCDICDF041) == 117);
|
||||
static_assert(int_least32_t(std::text_encoding::id::ISO115481) == 118);
|
||||
static_assert(int_least32_t(std::text_encoding::id::KZ1048) == 119);
|
||||
static_assert(int_least32_t(std::text_encoding::id::UCS2) == 1000);
|
||||
static_assert(int_least32_t(std::text_encoding::id::UCS4) == 1001);
|
||||
static_assert(int_least32_t(std::text_encoding::id::UnicodeASCII) == 1002);
|
||||
static_assert(int_least32_t(std::text_encoding::id::UnicodeLatin1) == 1003);
|
||||
static_assert(int_least32_t(std::text_encoding::id::UnicodeJapanese) == 1004);
|
||||
static_assert(int_least32_t(std::text_encoding::id::UnicodeIBM1261) == 1005);
|
||||
static_assert(int_least32_t(std::text_encoding::id::UnicodeIBM1268) == 1006);
|
||||
static_assert(int_least32_t(std::text_encoding::id::UnicodeIBM1276) == 1007);
|
||||
static_assert(int_least32_t(std::text_encoding::id::UnicodeIBM1264) == 1008);
|
||||
static_assert(int_least32_t(std::text_encoding::id::UnicodeIBM1265) == 1009);
|
||||
static_assert(int_least32_t(std::text_encoding::id::Unicode11) == 1010);
|
||||
static_assert(int_least32_t(std::text_encoding::id::SCSU) == 1011);
|
||||
static_assert(int_least32_t(std::text_encoding::id::UTF7) == 1012);
|
||||
static_assert(int_least32_t(std::text_encoding::id::UTF16BE) == 1013);
|
||||
static_assert(int_least32_t(std::text_encoding::id::UTF16LE) == 1014);
|
||||
static_assert(int_least32_t(std::text_encoding::id::UTF16) == 1015);
|
||||
static_assert(int_least32_t(std::text_encoding::id::CESU8) == 1016);
|
||||
static_assert(int_least32_t(std::text_encoding::id::UTF32) == 1017);
|
||||
static_assert(int_least32_t(std::text_encoding::id::UTF32BE) == 1018);
|
||||
static_assert(int_least32_t(std::text_encoding::id::UTF32LE) == 1019);
|
||||
static_assert(int_least32_t(std::text_encoding::id::BOCU1) == 1020);
|
||||
static_assert(int_least32_t(std::text_encoding::id::UTF7IMAP) == 1021);
|
||||
static_assert(int_least32_t(std::text_encoding::id::Windows30Latin1) == 2000);
|
||||
static_assert(int_least32_t(std::text_encoding::id::Windows31Latin1) == 2001);
|
||||
static_assert(int_least32_t(std::text_encoding::id::Windows31Latin2) == 2002);
|
||||
static_assert(int_least32_t(std::text_encoding::id::Windows31Latin5) == 2003);
|
||||
static_assert(int_least32_t(std::text_encoding::id::HPRoman8) == 2004);
|
||||
static_assert(int_least32_t(std::text_encoding::id::AdobeStandardEncoding) == 2005);
|
||||
static_assert(int_least32_t(std::text_encoding::id::VenturaUS) == 2006);
|
||||
static_assert(int_least32_t(std::text_encoding::id::VenturaInternational) == 2007);
|
||||
static_assert(int_least32_t(std::text_encoding::id::DECMCS) == 2008);
|
||||
static_assert(int_least32_t(std::text_encoding::id::PC850Multilingual) == 2009);
|
||||
static_assert(int_least32_t(std::text_encoding::id::PC8DanishNorwegian) == 2012);
|
||||
static_assert(int_least32_t(std::text_encoding::id::PC862LatinHebrew) == 2013);
|
||||
static_assert(int_least32_t(std::text_encoding::id::PC8Turkish) == 2014);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBMSymbols) == 2015);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBMThai) == 2016);
|
||||
static_assert(int_least32_t(std::text_encoding::id::HPLegal) == 2017);
|
||||
static_assert(int_least32_t(std::text_encoding::id::HPPiFont) == 2018);
|
||||
static_assert(int_least32_t(std::text_encoding::id::HPMath8) == 2019);
|
||||
static_assert(int_least32_t(std::text_encoding::id::HPPSMath) == 2020);
|
||||
static_assert(int_least32_t(std::text_encoding::id::HPDesktop) == 2021);
|
||||
static_assert(int_least32_t(std::text_encoding::id::VenturaMath) == 2022);
|
||||
static_assert(int_least32_t(std::text_encoding::id::MicrosoftPublishing) == 2023);
|
||||
static_assert(int_least32_t(std::text_encoding::id::Windows31J) == 2024);
|
||||
static_assert(int_least32_t(std::text_encoding::id::GB2312) == 2025);
|
||||
static_assert(int_least32_t(std::text_encoding::id::Big5) == 2026);
|
||||
static_assert(int_least32_t(std::text_encoding::id::Macintosh) == 2027);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM037) == 2028);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM038) == 2029);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM273) == 2030);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM274) == 2031);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM275) == 2032);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM277) == 2033);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM278) == 2034);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM280) == 2035);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM281) == 2036);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM284) == 2037);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM285) == 2038);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM290) == 2039);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM297) == 2040);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM420) == 2041);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM423) == 2042);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM424) == 2043);
|
||||
static_assert(int_least32_t(std::text_encoding::id::PC8CodePage437) == 2011);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM500) == 2044);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM851) == 2045);
|
||||
static_assert(int_least32_t(std::text_encoding::id::PCp852) == 2010);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM855) == 2046);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM857) == 2047);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM860) == 2048);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM861) == 2049);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM863) == 2050);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM864) == 2051);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM865) == 2052);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM868) == 2053);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM869) == 2054);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM870) == 2055);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM871) == 2056);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM880) == 2057);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM891) == 2058);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM903) == 2059);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM904) == 2060);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM905) == 2061);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM918) == 2062);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM1026) == 2063);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBMEBCDICATDE) == 2064);
|
||||
static_assert(int_least32_t(std::text_encoding::id::EBCDICATDEA) == 2065);
|
||||
static_assert(int_least32_t(std::text_encoding::id::EBCDICCAFR) == 2066);
|
||||
static_assert(int_least32_t(std::text_encoding::id::EBCDICDKNO) == 2067);
|
||||
static_assert(int_least32_t(std::text_encoding::id::EBCDICDKNOA) == 2068);
|
||||
static_assert(int_least32_t(std::text_encoding::id::EBCDICFISE) == 2069);
|
||||
static_assert(int_least32_t(std::text_encoding::id::EBCDICFISEA) == 2070);
|
||||
static_assert(int_least32_t(std::text_encoding::id::EBCDICFR) == 2071);
|
||||
static_assert(int_least32_t(std::text_encoding::id::EBCDICIT) == 2072);
|
||||
static_assert(int_least32_t(std::text_encoding::id::EBCDICPT) == 2073);
|
||||
static_assert(int_least32_t(std::text_encoding::id::EBCDICES) == 2074);
|
||||
static_assert(int_least32_t(std::text_encoding::id::EBCDICESA) == 2075);
|
||||
static_assert(int_least32_t(std::text_encoding::id::EBCDICESS) == 2076);
|
||||
static_assert(int_least32_t(std::text_encoding::id::EBCDICUK) == 2077);
|
||||
static_assert(int_least32_t(std::text_encoding::id::EBCDICUS) == 2078);
|
||||
static_assert(int_least32_t(std::text_encoding::id::Unknown8BiT) == 2079);
|
||||
static_assert(int_least32_t(std::text_encoding::id::Mnemonic) == 2080);
|
||||
static_assert(int_least32_t(std::text_encoding::id::Mnem) == 2081);
|
||||
static_assert(int_least32_t(std::text_encoding::id::VISCII) == 2082);
|
||||
static_assert(int_least32_t(std::text_encoding::id::VIQR) == 2083);
|
||||
static_assert(int_least32_t(std::text_encoding::id::KOI8R) == 2084);
|
||||
static_assert(int_least32_t(std::text_encoding::id::HZGB2312) == 2085);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM866) == 2086);
|
||||
static_assert(int_least32_t(std::text_encoding::id::PC775Baltic) == 2087);
|
||||
static_assert(int_least32_t(std::text_encoding::id::KOI8U) == 2088);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM00858) == 2089);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM00924) == 2090);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM01140) == 2091);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM01141) == 2092);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM01142) == 2093);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM01143) == 2094);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM01144) == 2095);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM01145) == 2096);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM01146) == 2097);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM01147) == 2098);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM01148) == 2099);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM01149) == 2100);
|
||||
static_assert(int_least32_t(std::text_encoding::id::Big5HKSCS) == 2101);
|
||||
static_assert(int_least32_t(std::text_encoding::id::IBM1047) == 2102);
|
||||
static_assert(int_least32_t(std::text_encoding::id::PTCP154) == 2103);
|
||||
static_assert(int_least32_t(std::text_encoding::id::Amiga1251) == 2104);
|
||||
static_assert(int_least32_t(std::text_encoding::id::KOI7switched) == 2105);
|
||||
static_assert(int_least32_t(std::text_encoding::id::BRF) == 2106);
|
||||
static_assert(int_least32_t(std::text_encoding::id::TSCII) == 2107);
|
||||
static_assert(int_least32_t(std::text_encoding::id::CP51932) == 2108);
|
||||
static_assert(int_least32_t(std::text_encoding::id::windows874) == 2109);
|
||||
static_assert(int_least32_t(std::text_encoding::id::windows1250) == 2250);
|
||||
static_assert(int_least32_t(std::text_encoding::id::windows1251) == 2251);
|
||||
static_assert(int_least32_t(std::text_encoding::id::windows1252) == 2252);
|
||||
static_assert(int_least32_t(std::text_encoding::id::windows1253) == 2253);
|
||||
static_assert(int_least32_t(std::text_encoding::id::windows1254) == 2254);
|
||||
static_assert(int_least32_t(std::text_encoding::id::windows1255) == 2255);
|
||||
static_assert(int_least32_t(std::text_encoding::id::windows1256) == 2256);
|
||||
static_assert(int_least32_t(std::text_encoding::id::windows1257) == 2257);
|
||||
static_assert(int_least32_t(std::text_encoding::id::windows1258) == 2258);
|
||||
static_assert(int_least32_t(std::text_encoding::id::TIS620) == 2259);
|
||||
static_assert(int_least32_t(std::text_encoding::id::CP50220) == 2260);
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// REQUIRES: std-at-least-c++26
|
||||
|
||||
// <text_encoding>
|
||||
|
||||
// text_encoding text_encoding::literal() noexcept;
|
||||
|
||||
#include <cassert>
|
||||
#include <concepts>
|
||||
#include <text_encoding>
|
||||
|
||||
constexpr bool test() {
|
||||
std::same_as<std::text_encoding> decltype(auto) te = std::text_encoding::literal();
|
||||
#ifdef __GNUC_EXECUTION_CHARSET_NAME
|
||||
assert(std::string_view(te.name()) == std::string_view(__GNUC_EXECUTION_CHARSET_NAME));
|
||||
#elif defined(__clang_literal_encoding__)
|
||||
assert(std::string_view(te.name()) == std::string_view(__clang_literal_encoding__));
|
||||
#else
|
||||
assert(te.mib() = std::text_encoding::id::unknown);
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int main(int, char**) {
|
||||
test();
|
||||
static_assert(test());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,76 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// REQUIRES: std-at-least-c++26
|
||||
|
||||
// <text_encoding>
|
||||
|
||||
// constexpr implementation-defined text_encoding::aliases_view::begin() const;
|
||||
|
||||
#include <cassert>
|
||||
#include <ranges>
|
||||
#include <text_encoding>
|
||||
|
||||
#include "test_macros.h"
|
||||
|
||||
constexpr bool test() {
|
||||
// 1. begin() of an aliases_view from a single text_encoding object are the same.
|
||||
{
|
||||
std::text_encoding te{std::text_encoding::UTF8};
|
||||
|
||||
std::same_as<std::text_encoding::aliases_view> decltype(auto) view1 = te.aliases();
|
||||
|
||||
auto view2 = te.aliases();
|
||||
ASSERT_NOEXCEPT(view1.begin());
|
||||
|
||||
assert(std::ranges::begin(view1) == std::ranges::begin(view2));
|
||||
assert(view1.begin() == view2.begin());
|
||||
}
|
||||
|
||||
// 2. begin() of aliases_views of two text_encoding objects that represent the same ID but hold different names are the same.
|
||||
{
|
||||
std::text_encoding te1{"ANSI_X3.4-1968"};
|
||||
std::text_encoding te2{"ANSI_X3.4-1986"};
|
||||
|
||||
auto view1 = te1.aliases();
|
||||
auto view2 = te2.aliases();
|
||||
|
||||
assert(view1.begin() == view2.begin());
|
||||
assert(std::ranges::begin(view1) == std::ranges::begin(view2));
|
||||
}
|
||||
|
||||
// 3. begin() of aliases_views of two text_encoding objects that represent different IDs are different.
|
||||
{
|
||||
std::text_encoding te1{std::text_encoding::UTF8};
|
||||
std::text_encoding te2{std::text_encoding::ASCII};
|
||||
|
||||
auto view1 = te1.aliases();
|
||||
auto view2 = te2.aliases();
|
||||
|
||||
assert(!(view1.begin() == view2.begin()));
|
||||
assert(!(std::ranges::begin(view1) == std::ranges::begin(view2)));
|
||||
}
|
||||
|
||||
{
|
||||
// 2 aliases
|
||||
std::text_encoding te{std::text_encoding::UTF8};
|
||||
|
||||
auto view = te.aliases();
|
||||
|
||||
assert(view.begin() + 2 == view.end());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int main(int, char**) {
|
||||
test();
|
||||
static_assert(test());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// REQUIRES: std-at-least-c++26
|
||||
|
||||
// <text_encoding>
|
||||
|
||||
// view_interface<text_encoding::aliases_view>::empty()
|
||||
|
||||
#include <cassert>
|
||||
#include <ranges>
|
||||
#include <text_encoding>
|
||||
|
||||
#include "../../test_text_encoding.h"
|
||||
|
||||
using id = std::text_encoding::id;
|
||||
|
||||
constexpr bool test() {
|
||||
// 1. An alias_view of a text_encoding object for "other" and "unknown" are empty
|
||||
{
|
||||
std::text_encoding te_other{id::other};
|
||||
|
||||
auto other_range = te_other.aliases();
|
||||
assert(other_range.empty());
|
||||
}
|
||||
|
||||
{
|
||||
std::text_encoding te_unknown{id::unknown};
|
||||
|
||||
auto unknown_range = te_unknown.aliases();
|
||||
assert(unknown_range.empty());
|
||||
}
|
||||
|
||||
// 2. An alias_view of a text_encoding object for a known encoding e.g. "UTF-8" is not empty
|
||||
for (auto& data : unique_encoding_data) {
|
||||
std::text_encoding te{id(data.mib)};
|
||||
std::text_encoding::aliases_view range = te.aliases();
|
||||
assert(!range.empty());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int main(int, char**) {
|
||||
test();
|
||||
static_assert(test());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// REQUIRES: std-at-least-c++26
|
||||
|
||||
// <text_encoding>
|
||||
|
||||
// text_encoding::aliases_view::end()
|
||||
|
||||
#include <cassert>
|
||||
#include <text_encoding>
|
||||
|
||||
#include "test_macros.h"
|
||||
|
||||
constexpr bool test() {
|
||||
{
|
||||
std::text_encoding a_other{"foobar"};
|
||||
|
||||
std::text_encoding::aliases_view other_aliases = a_other.aliases();
|
||||
|
||||
// 1. begin() of an aliases_view of "other" is equal to end()
|
||||
ASSERT_NOEXCEPT(other_aliases.end());
|
||||
assert(other_aliases.begin() == other_aliases.end());
|
||||
}
|
||||
|
||||
{
|
||||
std::text_encoding utf8{std::text_encoding::UTF8};
|
||||
|
||||
std::text_encoding::aliases_view aliases = utf8.aliases();
|
||||
|
||||
assert(aliases.begin() != aliases.end());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int main(int, char**) {
|
||||
test();
|
||||
static_assert(test());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// REQUIRES: std-at-least-c++26
|
||||
|
||||
// <text_encoding>
|
||||
|
||||
// text_encoding::aliases_view::front()
|
||||
|
||||
#include <cassert>
|
||||
#include <ranges>
|
||||
#include <string_view>
|
||||
#include <text_encoding>
|
||||
|
||||
using id = std::text_encoding::id;
|
||||
|
||||
constexpr bool test() {
|
||||
// 1. An aliases_view from a single text_encoding object returns the same front()
|
||||
{
|
||||
std::text_encoding te{id::UTF8};
|
||||
|
||||
auto view1 = te.aliases();
|
||||
auto view2 = te.aliases();
|
||||
|
||||
assert(std::string_view(view1.front()) == std::string_view(view2.front()));
|
||||
}
|
||||
|
||||
// 2. An aliases_views of two text_encoding objects that represent the same ID but hold different names return the same front()
|
||||
{
|
||||
std::text_encoding te1{"US-ASCII"};
|
||||
std::text_encoding te2{"ANSI_X3.4-1986"};
|
||||
|
||||
auto view1 = te1.aliases();
|
||||
auto view2 = te2.aliases();
|
||||
|
||||
assert(std::string_view(view1.front()) == std::string_view(view2.front()));
|
||||
}
|
||||
|
||||
// 3. An aliases_views of two text_encoding objects that represent different IDs return different front()
|
||||
{
|
||||
std::text_encoding te1{id::UTF8};
|
||||
std::text_encoding te2{id::ASCII};
|
||||
|
||||
auto view1 = te1.aliases();
|
||||
auto view2 = te2.aliases();
|
||||
|
||||
assert(!(std::string_view(view1.front()) == std::string_view(view2.front())));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int main(int, char**) {
|
||||
test();
|
||||
static_assert(test());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// REQUIRES: std-at-least-c++26
|
||||
|
||||
// <text_encoding>
|
||||
|
||||
// text_encoding::aliases_view::operator[]
|
||||
|
||||
#include <cassert>
|
||||
#include <string_view>
|
||||
#include <text_encoding>
|
||||
|
||||
#include "test_macros.h"
|
||||
|
||||
constexpr bool test() {
|
||||
std::text_encoding te(std::text_encoding::id::UTF8);
|
||||
std::text_encoding::aliases_view aliases = te.aliases();
|
||||
auto iter = aliases.begin();
|
||||
|
||||
ASSERT_SAME_TYPE(decltype(aliases[0]), const char*);
|
||||
assert(aliases.size() >= 2 && "assumed below");
|
||||
assert(std::string_view(aliases[0]) == *iter);
|
||||
assert(std::string_view(aliases[1]) == std::string_view(*(iter + 1)));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int main(int, char**) {
|
||||
test();
|
||||
static_assert(test());
|
||||
}
|
||||
|
|
@ -0,0 +1,156 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// REQUIRES: std-at-least-c++26
|
||||
|
||||
// <text_encoding>
|
||||
|
||||
// text_encoding::aliases_view::iterator (implementation-defined)
|
||||
//
|
||||
// Implementation is almost trivial, so everything is tested here.
|
||||
|
||||
#include <cassert>
|
||||
#include <compare>
|
||||
#include <concepts>
|
||||
#include <string_view>
|
||||
#include <text_encoding>
|
||||
#include <type_traits>
|
||||
|
||||
#include "test_macros.h"
|
||||
|
||||
constexpr bool test() {
|
||||
// Test iterator operators.
|
||||
std::text_encoding te{std::text_encoding::ASCII}; // 11 aliases
|
||||
|
||||
auto i = te.aliases().begin();
|
||||
auto j = te.aliases().begin();
|
||||
auto k = te.aliases().end();
|
||||
|
||||
static_assert(std::three_way_comparable<decltype(i)>);
|
||||
|
||||
{ // iterator operator return types
|
||||
ASSERT_SAME_TYPE(const char*, decltype(*i));
|
||||
ASSERT_SAME_TYPE(const char*, decltype(i[0]));
|
||||
ASSERT_SAME_TYPE(decltype(i), decltype(i + 1));
|
||||
ASSERT_SAME_TYPE(decltype(i), decltype(1 + i));
|
||||
ASSERT_SAME_TYPE(decltype(i), decltype(i - 1));
|
||||
ASSERT_SAME_TYPE(std::add_lvalue_reference_t<decltype(i)>, decltype(++i));
|
||||
ASSERT_SAME_TYPE(decltype(i), decltype(i++));
|
||||
ASSERT_SAME_TYPE(std::add_lvalue_reference_t<decltype(i)>, decltype(--i));
|
||||
ASSERT_SAME_TYPE(decltype(i), decltype(i--));
|
||||
ASSERT_SAME_TYPE(std::add_lvalue_reference_t<decltype(i)>, decltype(i += 1));
|
||||
ASSERT_SAME_TYPE(std::add_lvalue_reference_t<decltype(i)>, decltype(i -= 1));
|
||||
ASSERT_SAME_TYPE(bool, decltype(i == j));
|
||||
ASSERT_SAME_TYPE(bool, decltype(i != j));
|
||||
ASSERT_SAME_TYPE(bool, decltype(i > j));
|
||||
ASSERT_SAME_TYPE(bool, decltype(i < j));
|
||||
ASSERT_SAME_TYPE(bool, decltype(i >= j));
|
||||
ASSERT_SAME_TYPE(bool, decltype(i <= j));
|
||||
ASSERT_SAME_TYPE(std::strong_ordering, decltype(i <=> j));
|
||||
}
|
||||
{
|
||||
ASSERT_NOEXCEPT(i == j);
|
||||
ASSERT_NOEXCEPT(i != k);
|
||||
ASSERT_NOEXCEPT(i <=> j);
|
||||
ASSERT_NOEXCEPT(i > j);
|
||||
ASSERT_NOEXCEPT(i < j);
|
||||
ASSERT_NOEXCEPT(i >= j);
|
||||
ASSERT_NOEXCEPT(i <= j);
|
||||
assert(i == j);
|
||||
assert(i != k);
|
||||
assert(i <= j);
|
||||
assert(i >= j);
|
||||
assert(i <=> j == std::strong_ordering::equal);
|
||||
assert(std::string_view(*i) == std::string_view(*j));
|
||||
}
|
||||
{
|
||||
ASSERT_NOEXCEPT(*i);
|
||||
ASSERT_NOEXCEPT(i[0]);
|
||||
assert(std::string_view(i[0]) == std::string_view(j[0]));
|
||||
assert(std::string_view(i[1]) != std::string_view(j[3]));
|
||||
}
|
||||
{
|
||||
i++;
|
||||
assert(i > j);
|
||||
assert(i >= j);
|
||||
assert(!(i <= j));
|
||||
assert(i <=> j == std::strong_ordering::greater);
|
||||
assert(i - j == 1);
|
||||
assert(std::string_view(*i) != std::string_view(*j));
|
||||
}
|
||||
{
|
||||
i--;
|
||||
assert(i == te.aliases().begin());
|
||||
assert(i == j);
|
||||
assert(i != k);
|
||||
std::same_as<const char*> decltype(auto) str1 = *i;
|
||||
std::same_as<const char*> decltype(auto) str2 = *j;
|
||||
assert(std::string_view(str1) == std::string_view(str2));
|
||||
}
|
||||
{
|
||||
i++;
|
||||
j++;
|
||||
assert(i != te.aliases().begin());
|
||||
assert(i == j);
|
||||
assert(i != k);
|
||||
assert(std::string_view(*i) == std::string_view(*j));
|
||||
}
|
||||
{
|
||||
ASSERT_NOEXCEPT(i + 1);
|
||||
ASSERT_NOEXCEPT(1 + i);
|
||||
ASSERT_NOEXCEPT(i - 1);
|
||||
std::same_as<decltype(j)> decltype(auto) temp = i + 2;
|
||||
assert(i != temp);
|
||||
assert(std::string_view(*temp) != std::string_view(*j));
|
||||
std::same_as<decltype(j)> decltype(auto) temp2 = temp - 2;
|
||||
assert(std::string_view(*temp2) == std::string_view(*j));
|
||||
}
|
||||
{
|
||||
ASSERT_NOEXCEPT(i - j);
|
||||
assert(i - j == 0);
|
||||
assert(k - i > 0);
|
||||
}
|
||||
{
|
||||
ASSERT_NOEXCEPT(i++);
|
||||
ASSERT_NOEXCEPT(++i);
|
||||
ASSERT_NOEXCEPT(i--);
|
||||
ASSERT_NOEXCEPT(--i);
|
||||
std::same_as<std::add_lvalue_reference_t<decltype(i)>> decltype(auto) temp = ++i;
|
||||
assert(temp == i);
|
||||
assert(&temp == &i);
|
||||
|
||||
std::same_as<decltype(j)> decltype(auto) temp2 = j++;
|
||||
assert(temp2 == j - 1);
|
||||
assert(i == j);
|
||||
}
|
||||
{
|
||||
ASSERT_NOEXCEPT(i += 2);
|
||||
ASSERT_NOEXCEPT(i -= 2);
|
||||
i += 2;
|
||||
j += 3;
|
||||
|
||||
auto tempi = i;
|
||||
auto tempj = j;
|
||||
assert(i != j);
|
||||
assert((i <=> j) == std::strong_ordering::less);
|
||||
i -= 2;
|
||||
j -= 3;
|
||||
assert(i == j);
|
||||
assert(i != tempi && (tempi - i) == 2);
|
||||
assert(j != tempj && (tempj - j) == 3);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int main(int, char**) {
|
||||
test();
|
||||
static_assert(test());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// REQUIRES: std-at-least-c++26
|
||||
|
||||
// <text_encoding>
|
||||
|
||||
// view_interface<text_encoding::aliases_view>::operator bool()
|
||||
|
||||
#include <cassert>
|
||||
#include <ranges>
|
||||
#include <text_encoding>
|
||||
|
||||
#include "../../test_text_encoding.h"
|
||||
|
||||
using id = std::text_encoding::id;
|
||||
|
||||
constexpr bool test() {
|
||||
// 1. An alias_view of a text_encoding object for "other" and "unknown" are empty
|
||||
{
|
||||
{
|
||||
std::text_encoding te_other{id::other};
|
||||
auto other_range = te_other.aliases();
|
||||
assert(!bool(other_range));
|
||||
}
|
||||
|
||||
{
|
||||
std::text_encoding te_unknown{id::unknown};
|
||||
auto unknown_range = te_unknown.aliases();
|
||||
assert(!bool(unknown_range));
|
||||
}
|
||||
}
|
||||
|
||||
// 2. An alias_view of a text_encoding object for a known encoding e.g. "UTF-8" is not empty
|
||||
{
|
||||
for (auto& data : unique_encoding_data) {
|
||||
std::text_encoding te{id(data.mib)};
|
||||
auto range = te.aliases();
|
||||
assert(bool(range));
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int main(int, char**) {
|
||||
test();
|
||||
static_assert(test());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// REQUIRES: std-at-least-c++26
|
||||
|
||||
// <text_encoding>
|
||||
// Class text_encoding is a trivially copyable type ([basic.types.general]).
|
||||
|
||||
#include <text_encoding>
|
||||
#include <type_traits>
|
||||
|
||||
static_assert(std::is_trivially_copyable_v<std::text_encoding>);
|
||||
|
|
@ -1417,7 +1417,6 @@ feature_test_macros = [
|
|||
"c++26": 202306 # P1885R12 Naming Text Encodings to Demystify Them
|
||||
},
|
||||
"headers": ["text_encoding"],
|
||||
"unimplemented": True,
|
||||
},
|
||||
{
|
||||
"name": "__cpp_lib_three_way_comparison",
|
||||
|
|
|
|||
|
|
@ -172,7 +172,6 @@ headers_not_available = list(map(Header, [
|
|||
"spanstream",
|
||||
"stacktrace",
|
||||
"stdfloat",
|
||||
"text_encoding",
|
||||
]))
|
||||
|
||||
# Undeprecate headers that are deprecated in C++17 and removed in C++20.
|
||||
|
|
|
|||
|
|
@ -203,4 +203,12 @@ features += [
|
|||
cfg.available_features,
|
||||
),
|
||||
),
|
||||
# Tests that require std::text_encoding::environment() in the built library
|
||||
Feature(
|
||||
name="availability-te-environment-missing",
|
||||
when=lambda cfg: BooleanExpression.evaluate(
|
||||
"!libcpp-has-no-availability-markup && (stdlib=apple-libc++ && !_target-has-llvm-23)",
|
||||
cfg.available_features,
|
||||
),
|
||||
),
|
||||
]
|
||||
|
|
|
|||
Loading…
Reference in a new issue