EnTT  3.10.0
component.hpp
1 #ifndef ENTT_ENTITY_COMPONENT_HPP
2 #define ENTT_ENTITY_COMPONENT_HPP
3 
4 #include <cstddef>
5 #include <type_traits>
6 #include "../config/config.h"
7 
8 namespace entt {
9 
15 namespace internal {
16 
17 template<typename, typename = void>
18 struct in_place_delete: std::false_type {};
19 
20 template<typename Type>
21 struct in_place_delete<Type, std::enable_if_t<Type::in_place_delete>>
22  : std::true_type {};
23 
24 template<typename Type, typename = void>
25 struct page_size: std::integral_constant<std::size_t, (ENTT_IGNORE_IF_EMPTY && std::is_empty_v<Type>) ? 0u : ENTT_PACKED_PAGE> {};
26 
27 template<typename Type>
28 struct page_size<Type, std::enable_if_t<std::is_convertible_v<decltype(Type::page_size), std::size_t>>>
29  : std::integral_constant<std::size_t, Type::page_size> {};
30 
31 } // namespace internal
32 
42 template<typename Type, typename = void>
44  static_assert(std::is_same_v<std::decay_t<Type>, Type>, "Unsupported type");
45 
47  static constexpr bool in_place_delete = internal::in_place_delete<Type>::value;
49  static constexpr std::size_t page_size = internal::page_size<Type>::value;
50 };
51 
56 template<class Type>
57 inline constexpr bool ignore_as_empty_v = (component_traits<Type>::page_size == 0u);
58 
59 } // namespace entt
60 
61 #endif
EnTT default namespace.
Definition: dense_map.hpp:22
constexpr bool ignore_as_empty_v
Helper variable template.
Definition: component.hpp:57
Common way to access various properties of components.
Definition: component.hpp:43
static constexpr std::size_t page_size
Page size, default is ENTT_PACKED_PAGE for non-empty types.
Definition: component.hpp:49
static constexpr bool in_place_delete
Pointer stability, default is false.
Definition: component.hpp:47