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/hashed_string.hpp | 311 ------------------------------- 1 file changed, 311 deletions(-) delete mode 100644 deps/include/entt/core/hashed_string.hpp (limited to 'deps/include/entt/core/hashed_string.hpp') diff --git a/deps/include/entt/core/hashed_string.hpp b/deps/include/entt/core/hashed_string.hpp deleted file mode 100644 index c4b1313..0000000 --- a/deps/include/entt/core/hashed_string.hpp +++ /dev/null @@ -1,311 +0,0 @@ -#ifndef ENTT_CORE_HASHED_STRING_HPP -#define ENTT_CORE_HASHED_STRING_HPP - -#include -#include -#include -#include "fwd.hpp" - -namespace entt { - -/*! @cond TURN_OFF_DOXYGEN */ -namespace internal { - -template -struct fnv_1a_params; - -template<> -struct fnv_1a_params { - static constexpr auto offset = 2166136261; - static constexpr auto prime = 16777619; -}; - -template<> -struct fnv_1a_params { - static constexpr auto offset = 14695981039346656037ull; - static constexpr auto prime = 1099511628211ull; -}; - -template -struct basic_hashed_string { - using value_type = Char; - using size_type = std::size_t; - using hash_type = id_type; - - const value_type *repr; - size_type length; - hash_type hash; -}; - -} // namespace internal -/*! @endcond */ - -/** - * @brief Zero overhead unique identifier. - * - * A hashed string is a compile-time tool that allows users to use - * human-readable identifiers in the codebase while using their numeric - * counterparts at runtime.
- * Because of that, a hashed string can also be used in constant expressions if - * required. - * - * @warning - * This class doesn't take ownership of user-supplied strings nor does it make a - * copy of them. - * - * @tparam Char Character type. - */ -template -class basic_hashed_string: internal::basic_hashed_string { - using base_type = internal::basic_hashed_string; - using params = internal::fnv_1a_params<>; - - struct const_wrapper { - // non-explicit constructor on purpose - constexpr const_wrapper(const Char *str) noexcept - : repr{str} {} - - const Char *repr; - }; - - // Fowler–Noll–Vo hash function v. 1a - the good - [[nodiscard]] static constexpr auto helper(const std::basic_string_view view) noexcept { - base_type base{view.data(), view.size(), params::offset}; - - for(auto &&curr: view) { - base.hash = (base.hash ^ static_cast(curr)) * params::prime; - } - - return base; - } - -public: - /*! @brief Character type. */ - using value_type = typename base_type::value_type; - /*! @brief Unsigned integer type. */ - using size_type = typename base_type::size_type; - /*! @brief Unsigned integer type. */ - using hash_type = typename base_type::hash_type; - - /** - * @brief Returns directly the numeric representation of a string view. - * @param str Human-readable identifier. - * @param len Length of the string to hash. - * @return The numeric representation of the string. - */ - [[nodiscard]] static constexpr hash_type value(const value_type *str, const size_type len) noexcept { - return basic_hashed_string{str, len}; - } - - /** - * @brief Returns directly the numeric representation of a string. - * @tparam N Number of characters of the identifier. - * @param str Human-readable identifier. - * @return The numeric representation of the string. - */ - template - // NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays, modernize-avoid-c-arrays) - [[nodiscard]] static constexpr hash_type value(const value_type (&str)[N]) noexcept { - return basic_hashed_string{str}; - } - - /** - * @brief Returns directly the numeric representation of a string. - * @param wrapper Helps achieving the purpose by relying on overloading. - * @return The numeric representation of the string. - */ - [[nodiscard]] static constexpr hash_type value(const_wrapper wrapper) noexcept { - return basic_hashed_string{wrapper}; - } - - /*! @brief Constructs an empty hashed string. */ - constexpr basic_hashed_string() noexcept - : basic_hashed_string{nullptr, 0u} {} - - /** - * @brief Constructs a hashed string from a string view. - * @param str Human-readable identifier. - * @param len Length of the string to hash. - */ - constexpr basic_hashed_string(const value_type *str, const size_type len) noexcept - : base_type{helper({str, len})} {} - - /** - * @brief Constructs a hashed string from an array of const characters. - * @tparam N Number of characters of the identifier. - * @param str Human-readable identifier. - */ - template - // NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays, modernize-avoid-c-arrays) - constexpr basic_hashed_string(const value_type (&str)[N]) noexcept - : base_type{helper({static_cast(str)})} {} - - /** - * @brief Explicit constructor on purpose to avoid constructing a hashed - * string directly from a `const value_type *`. - * - * @warning - * The lifetime of the string is not extended nor is it copied. - * - * @param wrapper Helps achieving the purpose by relying on overloading. - */ - explicit constexpr basic_hashed_string(const_wrapper wrapper) noexcept - : base_type{helper({wrapper.repr})} {} - - /** - * @brief Returns the size a hashed string. - * @return The size of the hashed string. - */ - [[nodiscard]] constexpr size_type size() const noexcept { - return base_type::length; - } - - /** - * @brief Returns the human-readable representation of a hashed string. - * @return The string used to initialize the hashed string. - */ - [[nodiscard]] constexpr const value_type *data() const noexcept { - return base_type::repr; - } - - /** - * @brief Returns the numeric representation of a hashed string. - * @return The numeric representation of the hashed string. - */ - [[nodiscard]] constexpr hash_type value() const noexcept { - return base_type::hash; - } - - /*! @copydoc data */ - [[nodiscard]] constexpr operator const value_type *() const noexcept { - return data(); - } - - /** - * @brief Returns the numeric representation of a hashed string. - * @return The numeric representation of the hashed string. - */ - [[nodiscard]] constexpr operator hash_type() const noexcept { - return value(); - } -}; - -/** - * @brief Deduction guide. - * @tparam Char Character type. - * @param str Human-readable identifier. - * @param len Length of the string to hash. - */ -template -basic_hashed_string(const Char *str, const std::size_t len) -> basic_hashed_string; - -/** - * @brief Deduction guide. - * @tparam Char Character type. - * @tparam N Number of characters of the identifier. - * @param str Human-readable identifier. - */ -template -// NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays, modernize-avoid-c-arrays) -basic_hashed_string(const Char (&str)[N]) -> basic_hashed_string; - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the two hashed strings are identical, false otherwise. - */ -template -[[nodiscard]] constexpr bool operator==(const basic_hashed_string &lhs, const basic_hashed_string &rhs) noexcept { - return lhs.value() == rhs.value(); -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the two hashed strings differ, false otherwise. - */ -template -[[nodiscard]] constexpr bool operator!=(const basic_hashed_string &lhs, const basic_hashed_string &rhs) noexcept { - return !(lhs == rhs); -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the first element is less than the second, false otherwise. - */ -template -[[nodiscard]] constexpr bool operator<(const basic_hashed_string &lhs, const basic_hashed_string &rhs) noexcept { - return lhs.value() < rhs.value(); -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the first element is less than or equal to the second, false - * otherwise. - */ -template -[[nodiscard]] constexpr bool operator<=(const basic_hashed_string &lhs, const basic_hashed_string &rhs) noexcept { - return !(rhs < lhs); -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the first element is greater than the second, false - * otherwise. - */ -template -[[nodiscard]] constexpr bool operator>(const basic_hashed_string &lhs, const basic_hashed_string &rhs) noexcept { - return rhs < lhs; -} - -/** - * @brief Compares two hashed strings. - * @tparam Char Character type. - * @param lhs A valid hashed string. - * @param rhs A valid hashed string. - * @return True if the first element is greater than or equal to the second, - * false otherwise. - */ -template -[[nodiscard]] constexpr bool operator>=(const basic_hashed_string &lhs, const basic_hashed_string &rhs) noexcept { - return !(lhs < rhs); -} - -inline namespace literals { - -/** - * @brief User defined literal for hashed strings. - * @param str The literal without its suffix. - * @return A properly initialized hashed string. - */ -[[nodiscard]] constexpr hashed_string operator"" _hs(const char *str, std::size_t) noexcept { - return hashed_string{str}; -} - -/** - * @brief User defined literal for hashed wstrings. - * @param str The literal without its suffix. - * @return A properly initialized hashed wstring. - */ -[[nodiscard]] constexpr hashed_wstring operator"" _hws(const wchar_t *str, std::size_t) noexcept { - return hashed_wstring{str}; -} - -} // namespace literals - -} // namespace entt - -#endif -- cgit