1 #ifndef ZSERIO_TRAITS_H_INC 2 #define ZSERIO_TRAITS_H_INC 12 class BitStreamReader;
13 struct PropagateAllocatorT;
16 template <
typename, std::
size_t>
23 class inplace_optional_holder;
25 template <
typename,
typename>
26 class heap_optional_holder;
29 template <
typename T,
typename U = decltype(&T::initialize)>
30 struct decltype_initialize
35 template <
typename T,
typename U = decltype(&T::initializeChildren)>
36 struct decltype_initialize_children
41 template <
typename T,
typename U = decltype(std::declval<T>().reflectable())>
42 struct decltype_reflectable
48 template <
typename T,
typename U = decltype(std::declval<T>().allocate(0))>
49 struct decltype_allocate
54 template <
typename T,
typename U = decltype(std::declval<T>().deallocate(
nullptr, 0))>
55 struct decltype_deallocate
60 template <
typename T,
typename U = decltype(std::declval<T>().getValue())>
61 struct decltype_get_value
66 template <
typename T,
typename U = decltype(&T::initializeOffset)>
67 struct decltype_initialize_offset
72 template <
typename T,
typename U = decltype(&T::checkOffset)>
73 struct decltype_check_offset
78 template <
typename T,
typename U = decltype(&T::initializeElement)>
79 struct decltype_initialize_element
84 template <
typename ...T>
85 struct make_void {
using type = void; };
87 template <
typename ...T>
88 using void_t =
typename make_void<T...>::type;
96 template <
typename T,
typename =
void>
100 template <
typename T>
101 struct is_allocator<T, detail::void_t<typename detail::decltype_allocate<T>::type,
102 typename detail::decltype_deallocate<T>::type>> : std::true_type
110 template <
typename ...ARGS>
114 template <
typename T,
typename ...ARGS>
123 template <
typename T,
typename =
void>
127 template <
typename T>
128 struct has_owner_type<T, detail::void_t<typename T::OwnerType>> : std::true_type
136 template <
typename T,
typename =
void>
140 template <
typename T>
149 template <
typename T,
typename =
void>
153 template <
typename T>
154 struct has_allocator<T, detail::void_t<typename T::allocator_type>> : std::true_type
162 template <
typename T,
typename =
void>
166 template <
typename T>
167 struct has_initialize<T, detail::void_t<typename detail::decltype_initialize<T>::type>> : std::true_type
175 template <
typename T,
typename =
void>
179 template <
typename T>
181 detail::void_t<typename detail::decltype_initialize_children<T>::type>> : std::true_type
189 template <
typename T,
typename =
void>
193 template <
typename T>
194 struct has_reflectable<T, detail::void_t<typename detail::decltype_reflectable<T>::type>> : std::true_type
202 template <
typename T,
typename =
void>
206 template <
typename T>
208 detail::void_t<typename detail::decltype_initialize_offset<T>::type>> : std::true_type
218 template <
typename T,
typename =
void>
222 template <
typename T>
224 detail::void_t<typename detail::decltype_check_offset<T>::type>> : std::true_type
234 template <
typename T,
typename =
void>
238 template <
typename T>
240 detail::void_t<typename detail::decltype_initialize_element<T>::type>> : std::true_type
250 template <
typename T,
typename =
void>
254 template <
typename T>
255 struct is_bitmask<T, detail::void_t<typename detail::decltype_get_value<T>::type,
256 typename T::underlying_type>> : std::true_type
270 template <
typename T,
size_t Extent>
281 template <
typename FIELD_TYPE,
typename COMPOUND_TYPE,
typename ALLOCATOR_TYPE,
typename =
void>
283 !std::is_same<typename std::decay<FIELD_TYPE>::type, ALLOCATOR_TYPE>::value &&
284 !std::is_same<typename std::decay<FIELD_TYPE>::type, BitStreamReader>::value &&
285 !std::is_same<typename std::decay<FIELD_TYPE>::type, COMPOUND_TYPE>::value &&
286 !std::is_same<typename std::decay<FIELD_TYPE>::type, PropagateAllocatorT>::value &&
287 !std::is_same<typename std::decay<FIELD_TYPE>::type, NoInitT>::value,
291 template <
typename FIELD_TYPE,
typename COMPOUND_TYPE,
typename ALLOCATOR_TYPE>
293 detail::void_t<typename COMPOUND_TYPE::ZserioPackingContext>> : std::enable_if<
294 !std::is_same<typename std::decay<FIELD_TYPE>::type, ALLOCATOR_TYPE>::value &&
295 !std::is_same<typename std::decay<FIELD_TYPE>::type, BitStreamReader>::value &&
296 !std::is_same<typename std::decay<FIELD_TYPE>::type, COMPOUND_TYPE>::value &&
297 !std::is_same<typename std::decay<FIELD_TYPE>::type, PropagateAllocatorT>::value &&
298 !std::is_same<typename std::decay<FIELD_TYPE>::type, NoInitT>::value &&
299 !std::is_same<typename std::decay<FIELD_TYPE>::type,
300 typename COMPOUND_TYPE::ZserioPackingContext>::value,
308 template <
typename FIELD_TYPE,
typename COMPOUND_TYPE,
typename ALLOCATOR_TYPE>
314 #endif // ifndef ZSERIO_TRAITS_H_INC
typename is_field_constructor_enabled< FIELD_TYPE, COMPOUND_TYPE, ALLOCATOR_TYPE >::type is_field_constructor_enabled_t