From 61e5bcef2629e2d68b805a956a96fff264d4f74d Mon Sep 17 00:00:00 2001 From: untodesu Date: Sat, 28 Jun 2025 01:59:49 +0500 Subject: Restructure dependencies and update to C++20 - Nuked static_assert from almost everywhere in the project - Nuked binary dependency support. Might add one later though - Separated dependency headers into a separate include subdirectory - Grafted a thirdpartylegalnotices.txt generator from RITEG - Pushed development snapshot version to 2126 (26th week of 2025) --- deps/include/entt/core/compressed_pair.hpp | 272 ----------------------------- 1 file changed, 272 deletions(-) delete mode 100644 deps/include/entt/core/compressed_pair.hpp (limited to 'deps/include/entt/core/compressed_pair.hpp') diff --git a/deps/include/entt/core/compressed_pair.hpp b/deps/include/entt/core/compressed_pair.hpp deleted file mode 100644 index a10589f..0000000 --- a/deps/include/entt/core/compressed_pair.hpp +++ /dev/null @@ -1,272 +0,0 @@ -#ifndef ENTT_CORE_COMPRESSED_PAIR_HPP -#define ENTT_CORE_COMPRESSED_PAIR_HPP - -#include -#include -#include -#include -#include "fwd.hpp" -#include "type_traits.hpp" - -namespace entt { - -/*! @cond TURN_OFF_DOXYGEN */ -namespace internal { - -template -struct compressed_pair_element { - using reference = Type &; - using const_reference = const Type &; - - template>> - // NOLINTNEXTLINE(modernize-use-equals-default) - constexpr compressed_pair_element() noexcept(std::is_nothrow_default_constructible_v) {} - - template>, compressed_pair_element>>> - constexpr compressed_pair_element(Arg &&arg) noexcept(std::is_nothrow_constructible_v) - : value{std::forward(arg)} {} - - template - constexpr compressed_pair_element(std::tuple args, std::index_sequence) noexcept(std::is_nothrow_constructible_v) - : value{std::forward(std::get(args))...} {} - - [[nodiscard]] constexpr reference get() noexcept { - return value; - } - - [[nodiscard]] constexpr const_reference get() const noexcept { - return value; - } - -private: - Type value{}; -}; - -template -struct compressed_pair_element>>: Type { - using reference = Type &; - using const_reference = const Type &; - using base_type = Type; - - template>> - constexpr compressed_pair_element() noexcept(std::is_nothrow_default_constructible_v) - : base_type{} {} - - template>, compressed_pair_element>>> - constexpr compressed_pair_element(Arg &&arg) noexcept(std::is_nothrow_constructible_v) - : base_type{std::forward(arg)} {} - - template - constexpr compressed_pair_element(std::tuple args, std::index_sequence) noexcept(std::is_nothrow_constructible_v) - : base_type{std::forward(std::get(args))...} {} - - [[nodiscard]] constexpr reference get() noexcept { - return *this; - } - - [[nodiscard]] constexpr const_reference get() const noexcept { - return *this; - } -}; - -} // namespace internal -/*! @endcond */ - -/** - * @brief A compressed pair. - * - * A pair that exploits the _Empty Base Class Optimization_ (or _EBCO_) to - * reduce its final size to a minimum. - * - * @tparam First The type of the first element that the pair stores. - * @tparam Second The type of the second element that the pair stores. - */ -template -class compressed_pair final - : internal::compressed_pair_element, - internal::compressed_pair_element { - using first_base = internal::compressed_pair_element; - using second_base = internal::compressed_pair_element; - -public: - /*! @brief The type of the first element that the pair stores. */ - using first_type = First; - /*! @brief The type of the second element that the pair stores. */ - using second_type = Second; - - /** - * @brief Default constructor, conditionally enabled. - * - * This constructor is only available when the types that the pair stores - * are both at least default constructible. - * - * @tparam Dummy Dummy template parameter used for internal purposes. - */ - template && std::is_default_constructible_v>> - constexpr compressed_pair() noexcept(std::is_nothrow_default_constructible_v && std::is_nothrow_default_constructible_v) - : first_base{}, - second_base{} {} - - /** - * @brief Copy constructor. - * @param other The instance to copy from. - */ - constexpr compressed_pair(const compressed_pair &other) noexcept(std::is_nothrow_copy_constructible_v && std::is_nothrow_copy_constructible_v) = default; - - /** - * @brief Move constructor. - * @param other The instance to move from. - */ - constexpr compressed_pair(compressed_pair &&other) noexcept(std::is_nothrow_move_constructible_v && std::is_nothrow_move_constructible_v) = default; - - /** - * @brief Constructs a pair from its values. - * @tparam Arg Type of value to use to initialize the first element. - * @tparam Other Type of value to use to initialize the second element. - * @param arg Value to use to initialize the first element. - * @param other Value to use to initialize the second element. - */ - template - constexpr compressed_pair(Arg &&arg, Other &&other) noexcept(std::is_nothrow_constructible_v && std::is_nothrow_constructible_v) - : first_base{std::forward(arg)}, - second_base{std::forward(other)} {} - - /** - * @brief Constructs a pair by forwarding the arguments to its parts. - * @tparam Args Types of arguments to use to initialize the first element. - * @tparam Other Types of arguments to use to initialize the second element. - * @param args Arguments to use to initialize the first element. - * @param other Arguments to use to initialize the second element. - */ - template - constexpr compressed_pair(std::piecewise_construct_t, std::tuple args, std::tuple other) noexcept(std::is_nothrow_constructible_v && std::is_nothrow_constructible_v) - : first_base{std::move(args), std::index_sequence_for{}}, - second_base{std::move(other), std::index_sequence_for{}} {} - - /*! @brief Default destructor. */ - ~compressed_pair() noexcept(std::is_nothrow_destructible_v && std::is_nothrow_destructible_v) = default; - - /** - * @brief Copy assignment operator. - * @param other The instance to copy from. - * @return This compressed pair object. - */ - constexpr compressed_pair &operator=(const compressed_pair &other) noexcept(std::is_nothrow_copy_assignable_v && std::is_nothrow_copy_assignable_v) = default; - - /** - * @brief Move assignment operator. - * @param other The instance to move from. - * @return This compressed pair object. - */ - constexpr compressed_pair &operator=(compressed_pair &&other) noexcept(std::is_nothrow_move_assignable_v && std::is_nothrow_move_assignable_v) = default; - - /** - * @brief Returns the first element that a pair stores. - * @return The first element that a pair stores. - */ - [[nodiscard]] constexpr first_type &first() noexcept { - return static_cast(*this).get(); - } - - /*! @copydoc first */ - [[nodiscard]] constexpr const first_type &first() const noexcept { - return static_cast(*this).get(); - } - - /** - * @brief Returns the second element that a pair stores. - * @return The second element that a pair stores. - */ - [[nodiscard]] constexpr second_type &second() noexcept { - return static_cast(*this).get(); - } - - /*! @copydoc second */ - [[nodiscard]] constexpr const second_type &second() const noexcept { - return static_cast(*this).get(); - } - - /** - * @brief Swaps two compressed pair objects. - * @param other The compressed pair to swap with. - */ - constexpr void swap(compressed_pair &other) noexcept(std::is_nothrow_swappable_v && std::is_nothrow_swappable_v) { - using std::swap; - swap(first(), other.first()); - swap(second(), other.second()); - } - - /** - * @brief Extracts an element from the compressed pair. - * @tparam Index An integer value that is either 0 or 1. - * @return Returns a reference to the first element if `Index` is 0 and a - * reference to the second element if `Index` is 1. - */ - template - [[nodiscard]] constexpr decltype(auto) get() noexcept { - if constexpr(Index == 0u) { - return first(); - } else { - static_assert(Index == 1u, "Index out of bounds"); - return second(); - } - } - - /*! @copydoc get */ - template - [[nodiscard]] constexpr decltype(auto) get() const noexcept { - if constexpr(Index == 0u) { - return first(); - } else { - static_assert(Index == 1u, "Index out of bounds"); - return second(); - } - } -}; - -/** - * @brief Deduction guide. - * @tparam Type Type of value to use to initialize the first element. - * @tparam Other Type of value to use to initialize the second element. - */ -template -compressed_pair(Type &&, Other &&) -> compressed_pair, std::decay_t>; - -/** - * @brief Swaps two compressed pair objects. - * @tparam First The type of the first element that the pairs store. - * @tparam Second The type of the second element that the pairs store. - * @param lhs A valid compressed pair object. - * @param rhs A valid compressed pair object. - */ -template -inline constexpr void swap(compressed_pair &lhs, compressed_pair &rhs) { - lhs.swap(rhs); -} - -} // namespace entt - -namespace std { - -/** - * @brief `std::tuple_size` specialization for `compressed_pair`s. - * @tparam First The type of the first element that the pair stores. - * @tparam Second The type of the second element that the pair stores. - */ -template -struct tuple_size>: integral_constant {}; - -/** - * @brief `std::tuple_element` specialization for `compressed_pair`s. - * @tparam Index The index of the type to return. - * @tparam First The type of the first element that the pair stores. - * @tparam Second The type of the second element that the pair stores. - */ -template -struct tuple_element>: conditional { - static_assert(Index < 2u, "Index out of bounds"); -}; - -} // namespace std - -#endif -- cgit