1 #ifndef ZSERIO_TRAITS_H_INC
2 #define ZSERIO_TRAITS_H_INC
11 template <
typename, std::
size_t>
17 template <
typename T,
typename ARRAY_TRAITS>
20 template <
typename ALLOC,
typename T>
34 struct always_false : std::false_type
37 template <
typename VALUE_TYPE>
38 class NumericTypeWrapper;
40 template <
typename VALUE_TYPE>
43 template <
typename T,
typename =
void>
44 struct is_allocator_impl : std::false_type
48 struct is_allocator_impl<T,
49 std::void_t<typename T::value_type, decltype(std::declval<T>().allocate(0)),
50 decltype(std::declval<T>().deallocate(std::declval<typename T::value_type*>(), 0))>>
55 struct is_array_view : std::false_type
58 template <
typename T,
typename ARRAY_TRAITS>
59 struct is_array_view<ArrayView<T, ARRAY_TRAITS>> : std::true_type
63 constexpr
bool is_array_view_v = is_array_view<T>::value;
66 struct is_view : std::false_type
70 struct is_view<
View<T>> : std::true_type
74 constexpr
bool is_view_v = is_view<T>::value;
77 struct needs_offset_reference : std::negation<is_view<T>>
81 struct needs_offset_reference<Extended<T>>
83 static constexpr
bool value = needs_offset_reference<T>::value;
86 template <
typename ALLOC,
typename T>
87 struct needs_offset_reference<BasicOptional<ALLOC, T>>
89 static constexpr
bool value = needs_offset_reference<T>::value;
93 constexpr
bool needs_offset_reference_v = needs_offset_reference<T>::value;
101 template <
typename T>
105 template <
typename T>
113 template <
typename... ARGS>
117 template <
typename T,
typename... ARGS>
121 template <
typename... ARGS>
129 template <
typename T,
typename =
void>
133 template <
typename T>
137 template <
typename T,
typename V =
void>
145 template <
typename... ARGS>
149 template <
typename T,
typename... ARGS>
153 template <
typename... ARGS>
161 template <
typename T,
typename =
void>
165 template <
typename T>
166 struct is_bitmask<T,
std::void_t<decltype(std::declval<T>().getValue()), typename T::ZserioType>>
170 template <
typename T,
typename V =
void>
184 template <
typename T,
size_t Extent>
188 template <
typename T>
197 template <
typename T,
typename =
void>
201 template <
typename T>
203 std::enable_if_t<std::is_base_of_v<detail::NumericTypeWrapper<typename T::ValueType>, T>>>
207 template <
typename T,
typename V =
void>
213 template <
typename T,
typename =
void>
217 template <
typename T>
219 std::enable_if_t<std::is_base_of_v<detail::DynIntWrapper<typename T::ValueType>, T>>> : std::true_type
222 template <
typename T,
typename V =
void>
229 template <
typename T,
typename =
void>
233 template <
typename T>
237 template <
typename T>
246 template <
typename T,
typename =
void>
252 template <
typename T>
258 template <
typename T,
typename V =
void>
267 template <
typename T,
typename =
void>
273 template <
typename T>
279 template <
typename T,
typename V =
void>
290 template <
typename T,
typename ALLOC,
typename... ARGS>
293 if constexpr (std::is_constructible_v<T, ARGS..., ALLOC>)
295 return T(std::forward<ARGS>(args)..., allocator);
299 return T(std::forward<ARGS>(args)...);
309 template <
typename T,
typename ALLOC,
typename U, std::enable_if_t<is_numeric_wrapper_v<T>,
int> = 0>
312 return T(
static_cast<typename T::ValueType
>(value));
constexpr bool is_complete_v
typename offset_field_reference< T, V >::type offset_field_reference_t
constexpr bool is_allocator_v
constexpr bool is_dyn_int_wrapper_v
constexpr T constructWithAllocator(const ALLOC &allocator, ARGS &&... args)
constexpr bool is_numeric_wrapper_v
constexpr bool is_bitmask_v
View(T, ARGS &&...) -> View< T >
constexpr bool has_allocator_v
typename view_type< T, V >::type view_type_t
constexpr bool is_first_allocator_v
constexpr bool is_first_array_preallocation_v