#pragma once #include "detail/magic_enum.h" namespace tl { // Returns type name of enum. template [[nodiscard]] constexpr auto enum_type_name() noexcept { return magic_enum::enum_type_name(); } // Returns number of enum values. template [[nodiscard]] constexpr auto enum_count() noexcept { return magic_enum::enum_count(); } // Returns enum value at specified index. // No bounds checking is performed: the behavior is undefined if index >= number of enum values. template [[nodiscard]] constexpr auto enum_value(std::size_t index) noexcept { return magic_enum::enum_value(index); } // Returns std::array with enum values, sorted by enum value. template [[nodiscard]] constexpr auto enum_values() noexcept { return magic_enum::enum_values(); } // Returns name from static storage enum variable. // This version is much lighter on the compile times and is not restricted to the enum_range limitation. template [[nodiscard]] constexpr auto enum_name() noexcept { return magic_enum::enum_name(); } // Returns name from enum value. // If enum value does not have name or value out of range, returns empty string. template [[nodiscard]] constexpr auto enum_name(E value) noexcept { return magic_enum::enum_name(value); } // Returns std::array with names, sorted by enum value. template [[nodiscard]] constexpr auto enum_names() noexcept { return magic_enum::enum_names(); } // Returns std::array with pairs (value, name), sorted by enum value. template [[nodiscard]] constexpr auto enum_entries() noexcept { return magic_enum::enum_entries(); } // Obtains enum value from integer value. // Returns optional with enum value. template [[nodiscard]] constexpr auto enum_cast(std::underlying_type_t value) noexcept { return magic_enum::enum_cast(value); } // Obtains enum value from name. // Returns optional with enum value. template [[nodiscard]] constexpr auto enum_cast(std::string_view value, BinaryPredicate p) noexcept(std::is_nothrow_invocable_r_v) { return magic_enum::enum_cast(value, p); } // Obtains enum value from name. // Returns optional with enum value. template [[nodiscard]] constexpr auto enum_cast(std::string_view value) noexcept { return magic_enum::enum_cast(value); } // Returns integer value from enum value. template [[nodiscard]] constexpr auto enum_integer(E value) noexcept { return magic_enum::enum_integer(value); } // Obtains index in enum values from enum value. // Returns optional with index. template [[nodiscard]] constexpr auto enum_index(E value) noexcept { return magic_enum::enum_index(value); } // Checks whether enum contains enumerator with such enum value. template [[nodiscard]] constexpr auto enum_contains(E value) noexcept { return magic_enum::enum_contains(value); } // Checks whether enum contains enumerator with such integer value. template [[nodiscard]] constexpr auto enum_contains(std::underlying_type_t value) noexcept { return magic_enum::enum_contains(value); } // Checks whether enum contains enumerator with such name. template [[nodiscard]] constexpr auto enum_contains(std::string_view value, BinaryPredicate p) noexcept(std::is_nothrow_invocable_r_v) { return magic_enum::enum_names(value, p); } // Checks whether enum contains enumerator with such name. template [[nodiscard]] constexpr auto enum_contains(std::string_view value) noexcept { return magic_enum::enum_contains(value); } }