#ifndef ENTT_ENTITY_COMPONENT_HPP #define ENTT_ENTITY_COMPONENT_HPP #include #include #include "../config/config.h" #include "fwd.hpp" namespace entt { /*! @cond TURN_OFF_DOXYGEN */ namespace internal { template struct in_place_delete: std::bool_constant && std::is_move_assignable_v)> {}; template<> struct in_place_delete: std::false_type {}; template struct in_place_delete> : std::true_type {}; template struct page_size: std::integral_constant * ENTT_PACKED_PAGE> {}; template<> struct page_size: std::integral_constant {}; template struct page_size> : std::integral_constant {}; } // namespace internal /*! @endcond */ /** * @brief Common way to access various properties of components. * @tparam Type Type of component. */ template struct component_traits { static_assert(std::is_same_v, Type>, "Unsupported type"); /*! @brief Component type. */ using type = Type; /*! @brief Pointer stability, default is `false`. */ static constexpr bool in_place_delete = internal::in_place_delete::value; /*! @brief Page size, default is `ENTT_PACKED_PAGE` for non-empty types. */ static constexpr std::size_t page_size = internal::page_size::value; }; } // namespace entt #endif