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>
167 lines
4.9 KiB
C++
167 lines
4.9 KiB
C++
// -*- 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
|
||
//
|
||
//===----------------------------------------------------------------------===//
|
||
|
||
// WARNING, this entire header is generated by
|
||
// utils/generate_libcxx_cppm_in.py
|
||
// DO NOT MODIFY!
|
||
|
||
module;
|
||
|
||
#include <__config>
|
||
|
||
// The headers of Table 24: C++ library headers [tab:headers.cpp]
|
||
// and the headers of Table 25: C++ headers for C library facilities [tab:headers.cpp.c]
|
||
#include <algorithm>
|
||
#include <any>
|
||
#include <array>
|
||
#include <atomic>
|
||
#include <barrier>
|
||
#include <bit>
|
||
#include <bitset>
|
||
#include <cassert>
|
||
#include <cctype>
|
||
#include <cerrno>
|
||
#include <cfenv>
|
||
#include <cfloat>
|
||
#include <charconv>
|
||
#include <chrono>
|
||
#include <cinttypes>
|
||
#include <climits>
|
||
#include <clocale>
|
||
#include <cmath>
|
||
#include <codecvt>
|
||
#include <compare>
|
||
#include <complex>
|
||
#include <concepts>
|
||
#include <condition_variable>
|
||
#include <coroutine>
|
||
#include <csetjmp>
|
||
#include <csignal>
|
||
#include <cstdarg>
|
||
#include <cstddef>
|
||
#include <cstdint>
|
||
#include <cstdio>
|
||
#include <cstdlib>
|
||
#include <cstring>
|
||
#include <ctime>
|
||
#include <cuchar>
|
||
#include <cwchar>
|
||
#include <cwctype>
|
||
#include <deque>
|
||
#include <exception>
|
||
#include <execution>
|
||
#include <expected>
|
||
#include <filesystem>
|
||
#include <flat_map>
|
||
#include <flat_set>
|
||
#include <format>
|
||
#include <forward_list>
|
||
#include <fstream>
|
||
#include <functional>
|
||
#include <future>
|
||
#include <initializer_list>
|
||
#include <iomanip>
|
||
#include <ios>
|
||
#include <iosfwd>
|
||
#include <iostream>
|
||
#include <istream>
|
||
#include <iterator>
|
||
#include <latch>
|
||
#include <limits>
|
||
#include <list>
|
||
#include <locale>
|
||
#include <map>
|
||
#include <mdspan>
|
||
#include <memory>
|
||
#include <memory_resource>
|
||
#include <mutex>
|
||
#include <new>
|
||
#include <numbers>
|
||
#include <numeric>
|
||
#include <optional>
|
||
#include <ostream>
|
||
#include <print>
|
||
#include <queue>
|
||
#include <random>
|
||
#include <ranges>
|
||
#include <ratio>
|
||
#include <regex>
|
||
#include <scoped_allocator>
|
||
#include <semaphore>
|
||
#include <set>
|
||
#include <shared_mutex>
|
||
#include <source_location>
|
||
#include <span>
|
||
#include <sstream>
|
||
#include <stack>
|
||
#include <stdexcept>
|
||
#include <stop_token>
|
||
#include <streambuf>
|
||
#include <string>
|
||
#include <string_view>
|
||
#include <strstream>
|
||
#include <syncstream>
|
||
#include <system_error>
|
||
#include <text_encoding>
|
||
#include <thread>
|
||
#include <tuple>
|
||
#include <type_traits>
|
||
#include <typeindex>
|
||
#include <typeinfo>
|
||
#include <unordered_map>
|
||
#include <unordered_set>
|
||
#include <utility>
|
||
#include <valarray>
|
||
#include <variant>
|
||
#include <vector>
|
||
#include <version>
|
||
|
||
// *** Headers not yet available ***
|
||
//
|
||
// This validation is mainly to catch when a new header is added but adding the
|
||
// corresponding .inc file is forgotten. However, the check based on __has_include
|
||
// alone doesn't work on Windows because the Windows SDK is on the include path,
|
||
// and that means the MSVC STL headers can be found as well, tricking __has_include
|
||
// into thinking that libc++ provides the header.
|
||
//
|
||
#ifndef _WIN32
|
||
# if __has_include(<debugging>)
|
||
# error "please update the header information for <debugging> in headers_not_available in utils/libcxx/header_information.py"
|
||
# endif // __has_include(<debugging>)
|
||
# if __has_include(<generator>)
|
||
# error "please update the header information for <generator> in headers_not_available in utils/libcxx/header_information.py"
|
||
# endif // __has_include(<generator>)
|
||
# if __has_include(<hazard_pointer>)
|
||
# error "please update the header information for <hazard_pointer> in headers_not_available in utils/libcxx/header_information.py"
|
||
# endif // __has_include(<hazard_pointer>)
|
||
# if __has_include(<inplace_vector>)
|
||
# error "please update the header information for <inplace_vector> in headers_not_available in utils/libcxx/header_information.py"
|
||
# endif // __has_include(<inplace_vector>)
|
||
# if __has_include(<linalg>)
|
||
# error "please update the header information for <linalg> in headers_not_available in utils/libcxx/header_information.py"
|
||
# endif // __has_include(<linalg>)
|
||
# if __has_include(<rcu>)
|
||
# error "please update the header information for <rcu> in headers_not_available in utils/libcxx/header_information.py"
|
||
# endif // __has_include(<rcu>)
|
||
# if __has_include(<spanstream>)
|
||
# error "please update the header information for <spanstream> in headers_not_available in utils/libcxx/header_information.py"
|
||
# endif // __has_include(<spanstream>)
|
||
# if __has_include(<stacktrace>)
|
||
# error "please update the header information for <stacktrace> in headers_not_available in utils/libcxx/header_information.py"
|
||
# endif // __has_include(<stacktrace>)
|
||
# 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>)
|
||
#endif // _WIN32
|
||
|
||
export module std;
|
||
|
||
|
||
@LIBCXX_MODULE_STD_INCLUDE_SOURCES@
|