From 2e2d1bd3b6c7776b77c33b94f30ead89367a71e6 Mon Sep 17 00:00:00 2001 From: Lexi Winter Date: Tue, 1 Jul 2025 17:07:04 +0100 Subject: add nihil.std --- nihil.std/CMakeLists.txt | 7 + nihil.std/nihil.std.ccm | 429 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 436 insertions(+) create mode 100644 nihil.std/CMakeLists.txt create mode 100644 nihil.std/nihil.std.ccm (limited to 'nihil.std') diff --git a/nihil.std/CMakeLists.txt b/nihil.std/CMakeLists.txt new file mode 100644 index 0000000..27209a0 --- /dev/null +++ b/nihil.std/CMakeLists.txt @@ -0,0 +1,7 @@ +# This source code is released into the public domain. + +add_library(nihil.std STATIC) +target_sources(nihil.std + PUBLIC FILE_SET modules TYPE CXX_MODULES FILES + nihil.std.ccm +) diff --git a/nihil.std/nihil.std.ccm b/nihil.std/nihil.std.ccm new file mode 100644 index 0000000..2f01c91 --- /dev/null +++ b/nihil.std/nihil.std.ccm @@ -0,0 +1,429 @@ +// This source code is released into the public domain. +module; + +// Export the parts of std that nihil uses. This is technically undefined behaviour since we're +// modifying namespace std, but this is essentially the same as what clang's own std.cppm does. +// This module could be removed if/when we get support for std.cppm in both FreeBSD and CMake. + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +export module nihil.std; + +// NOLINTBEGIN(misc-unused-using-decls,misc-unused-using-namespaces,misc-unused-alias-decls) + +export namespace std { +// Symbols declared in multiple headers +using std::operator+; +using std::operator-; +using std::operator|; +using std::operator|=; +using std::operator&; +using std::operator&=; +using std::operator^; +using std::operator^=; +using std::operator~; +using std::operator<=>; +using std::operator==; +using std::operator!=; +using std::operator<; +using std::operator<=; +using std::operator>; +using std::operator>=; +using std::operator<<; +using std::operator>>; +using std::operator<<=; +using std::operator>>=; +using std::swap; + +// +using std::all_of; +using std::copy; +using std::fill; +using std::fill_n; +using std::find; +using std::find_if; +using std::find_if_not; +using std::ranges::generate; +using std::generate_n; +using std::min; +using std::max; + +namespace ranges { +using std::ranges::all_of; +using std::ranges::copy; +using std::ranges::equal; +using std::ranges::fill; +using std::ranges::fill_n; +using std::ranges::find; +using std::ranges::find_if; +using std::ranges::find_if_not; +using std::ranges::generate; +using std::ranges::generate_n; +} // namespace ranges + +// +using std::array; + +// +using std::from_chars; +using std::to_chars; +using std::to_chars_result; +using std::chars_format; + +// +using std::partial_ordering; +using std::strong_ordering; +using std::cmp_equal; +using std::cmp_greater; +using std::cmp_greater_equal; +using std::cmp_less; +using std::cmp_less_equal; +using std::cmp_not_equal; + +// +using std::convertible_to; +using std::copy_constructible; +using std::copy_constructible; +using std::default_initializable; +using std::derived_from; +using std::destructible; +using std::equality_comparable; +using std::integral; +using std::invocable; +using std::move_constructible; +using std::regular; +using std::same_as; +using std::semiregular; +using std::swappable; +using std::totally_ordered; + +// +using std::coroutine_handle; +using std::coroutine_traits; +using std::noop_coroutine; +using std::suspend_always; +using std::suspend_never; + +// +using std::byte; +using std::ptrdiff_t; +using std::size_t; +using std::to_integer; + +// +using std::int8_t; +using std::int16_t; +using std::int32_t; +using std::int64_t; +using std::uint8_t; +using std::uint16_t; +using std::uint32_t; +using std::uint64_t; + +// +using std::exit; +using std::quick_exit; + +// +using std::FILE; +using std::fprintf; +using std::printf; +using std::rename; + +// +using std::strerror; + +// +using std::current_exception; +using std::exception; +using std::exception_ptr; +using std::rethrow_exception; + +// +using std::unexpected; +using std::bad_expected_access; +using std::unexpect; +using std::unexpect_t; +using std::expected; + +// +namespace filesystem { +using std::filesystem::path; +using std::filesystem::create_directories; +using std::filesystem::exists; +} + +// +using std::format; +using std::formatter; +using std::format_to; +using std::format_to_n; +using std::runtime_format; +using std::format_error; + +// +using std::function; +using std::invoke; +using std::ref; +using std::cref; +using std::reference_wrapper; + +// +using std::cerr; +using std::cin; +using std::clog; +using std::cout; +using std::basic_ostream; +using std::ostream; +using std::istream; +using std::basic_istream; +using std::streambuf; +using std::ostream_iterator; + +// +using std::initializer_list; + +// +using std::back_insert_iterator; +using std::back_inserter; +using std::input_iterator; +using std::input_iterator_tag; +using std::iter_value_t; +using std::output_iterator; +using std::sentinel_for; +using std::next; +using std::prev; +using std::begin; +using std::end; +using std::distance; + +// +using std::numeric_limits; + +// +using std::list; + +// +using std::locale; +using std::ctype; +using std::ctype_base; +using std::ctype_byname; +using std::has_facet; +using std::isalnum; +using std::isalpha; +using std::isblank; +using std::iscntrl; +using std::isdigit; +using std::isgraph; +using std::islower; +using std::isprint; +using std::ispunct; +using std::isspace; +using std::isupper; +using std::isxdigit; +using std::locale; +using std::tolower; +using std::toupper; +using std::use_facet; + +// map +using std::map; + +// +using std::addressof; +using std::allocator; +using std::allocator_arg; +using std::allocator_arg_t; +using std::allocator_traits; +using std::make_shared; +using std::make_unique; +using std::shared_ptr; +using std::unique_ptr; + +// +using std::nullopt; +using std::optional; + +// +using std::print; +using std::println; + +// +using std::default_random_engine; +using std::random_device; +using std::uniform_int_distribution; +using std::mt19937; +using std::ranlux24;; +using std::ranlux24_base; +using std::ranlux48; +using std::ranlux48_base; + +using std::seed_seq; + +// +using std::from_range; +using std::from_range_t; + +namespace ranges { +using std::ranges::range_value_t; + +using std::ranges::contiguous_range; +using std::ranges::enable_view; +using std::ranges::range; +using std::ranges::sized_range; + +using std::ranges::begin; +using std::ranges::empty; +using std::ranges::end; +using std::ranges::data; +using std::ranges::size; +using std::ranges::rbegin; +using std::ranges::rend; +using std::ranges::subrange; + +using std::ranges::split_view; +using std::ranges::transform_view; +using std::ranges::operator|; + +namespace views { +using std::ranges::views::split; +using std::ranges::views::transform; +} // namespace views + +} // namespace ranges + +namespace views = ranges::views; + +// +using std::set; + +// +using std::as_bytes; +using std::as_writable_bytes; +using std::dynamic_extent; +using std::span; + +// +using std::basic_istringstream; +using std::basic_ostringstream; +using std::istringstream; +using std::ostringstream; + +// +using std::logic_error; +using std::runtime_error; +using std::out_of_range; + +// +using std::basic_string; +using std::basic_string_view; +using std::char_traits; +using std::string; +using std::string_view; +using std::wstring; +using std::wstring_view; + +inline namespace literals { +inline namespace string_literals { +using std::literals::string_literals::operator""s; +using std::literals::string_view_literals::operator""sv; +} +} + +// +using std::errc; +using std::error_category; +using std::error_code; +using std::error_condition; +using std::is_error_code_enum; +using std::is_error_condition_enum; +using std::make_error_code; +using std::make_error_condition; +using std::system_error; + +// +using std::add_pointer_t; +using std::false_type; +using std::invoke_result; +using std::is_convertible; +using std::is_convertible_v; +using std::is_default_constructible; +using std::is_default_constructible_v; +using std::is_nothrow_constructible; +using std::is_nothrow_constructible_v; +using std::is_nothrow_destructible; +using std::is_nothrow_destructible_v; +using std::is_nothrow_move_constructible; +using std::is_nothrow_move_constructible_v; +using std::is_reference; +using std::is_reference_v; +using std::is_same; +using std::is_same_v; +using std::remove_const_t; +using std::remove_cv_t; +using std::remove_cvref_t; +using std::true_type; + +// +using std::unordered_set; + +// +using std::exchange; +using std::forward; +using std::hash; +using std::ignore; +using std::make_pair; +using std::move; +using std::pair; + +// +using std::get_if; +using std::monostate; +using std::variant; +using std::visit; + +// +using std::vector; + +} // namespace std + +// NOLINTEND(misc-unused-using-decls,misc-unused-using-namespaces,misc-unused-alias-decls) -- cgit v1.2.3