|
|
@@ -2,6 +2,7 @@
|
|
|
#define ENTT_META_NODE_HPP
|
|
|
|
|
|
#include <array>
|
|
|
+#include <bit>
|
|
|
#include <cstddef>
|
|
|
#include <memory>
|
|
|
#include <type_traits>
|
|
|
@@ -47,14 +48,14 @@ enum class meta_traits : std::uint32_t {
|
|
|
template<typename Type>
|
|
|
[[nodiscard]] auto meta_to_user_traits(const meta_traits traits) noexcept {
|
|
|
static_assert(std::is_enum_v<Type>, "Invalid enum type");
|
|
|
- constexpr auto shift = popcount(static_cast<std::underlying_type_t<meta_traits>>(meta_traits::_user_defined_traits));
|
|
|
+ constexpr auto shift = std::popcount(static_cast<std::underlying_type_t<meta_traits>>(meta_traits::_user_defined_traits));
|
|
|
return Type{static_cast<std::underlying_type_t<Type>>(static_cast<std::underlying_type_t<meta_traits>>(traits) >> shift)};
|
|
|
}
|
|
|
|
|
|
template<typename Type>
|
|
|
[[nodiscard]] auto user_to_meta_traits(const Type value) noexcept {
|
|
|
static_assert(std::is_enum_v<Type>, "Invalid enum type");
|
|
|
- constexpr auto shift = popcount(static_cast<std::underlying_type_t<meta_traits>>(meta_traits::_user_defined_traits));
|
|
|
+ constexpr auto shift = std::popcount(static_cast<std::underlying_type_t<meta_traits>>(meta_traits::_user_defined_traits));
|
|
|
const auto traits = static_cast<std::underlying_type_t<internal::meta_traits>>(static_cast<std::underlying_type_t<Type>>(value));
|
|
|
ENTT_ASSERT(traits < ((~static_cast<std::underlying_type_t<meta_traits>>(meta_traits::_user_defined_traits)) >> shift), "Invalid traits");
|
|
|
return meta_traits{traits << shift};
|