2#ifndef TTG_SERIALIZATION_TRAITS_H
3#define TTG_SERIALIZATION_TRAITS_H
13 namespace serialization {
17 operator unsigned int()
const {
return v; }
28 template <
typename T,
typename Archive>
34 template <
typename T,
typename Archive>
40 template <
typename T,
typename Archive>
46 template <
typename T,
typename Archive>
52 template <
typename T,
typename Archive>
58 template <
typename T,
typename Archive>
63 template <
typename T,
typename Archive>
68 template <
typename T,
typename Archive>
70 decltype(serialize(std::declval<Archive&>(), std::declval<T&>(), 0u));
74 template <
typename T,
typename Archive>
83 template <
typename T,
typename Archive>
91 template <
typename T,
typename Archive>
100 template <
typename T,
typename Archive>
109 template <
typename T,
typename Archive>
118 template <
typename T,
typename Archive>
127 template <
typename T,
typename Archive>
136 template <
typename T,
typename Archive>
142 template <
typename T,
typename Enabler =
void>
145 template <
typename T,
typename Enabler>
148 template <
typename T,
typename Enabler =
void>
153 template <
class,
class =
void>
157 struct is_printable<T,
std::void_t<decltype(std::declval<std::ostream&>() << std::declval<T>())>> : std::true_type {};
159 template <typename T, typename Enabler = void>
160 struct printer_helper {
161 static void print(const void* object) { std::cout << "[unprintable object]" << std::endl; }
164 template <typename T>
165 struct printer_helper<T, std::enable_if_t<is_printable<T>::value>> {
166 static void print(const void* object) { std::cout << *(static_cast<const T*>(object)) << std::endl; }
171#include "ttg/serialization/backends.h"
173namespace ttg::detail {
175 template <typename T, typename Enabler = void>
176 struct is_user_buffer_serializable : std::false_type {};
181 template <typename T>
182 struct is_user_buffer_serializable<
183 T, std::enable_if_t<is_madness_user_buffer_serializable_v<T> || is_boost_user_buffer_serializable_v<T>>> : std::true_type {};
185 template <typename T>
186 inline constexpr bool is_user_buffer_serializable_v = is_user_buffer_serializable<T>::value;
194 template <typename T>
195 inline constexpr bool is_memcpyable_override_v = std::is_trivially_copyable_v<T>;
198 template <typename T1, typename T2>
199 inline constexpr bool is_memcpyable_override_v<std::pair<T1,T2>> = std::is_trivially_copyable_v<T1> && std::is_trivially_copyable_v<T2>;
204 template <typename T>
205 struct is_memcpyable : std::bool_constant<std::is_trivially_copyable_v<T> || is_memcpyable_override_v<T>> {};
207 template <typename T>
208 inline constexpr bool is_memcpyable_v = is_memcpyable<T>::value;
const unsigned_int version_as_adl_tag
decltype(serialize(std::declval< Archive & >(), std::declval< T & >(), boost::serialization::version_as_adl_tag)) has_freestanding_boost_serialize_with_version_t
decltype(serialize(std::declval< Archive & >(), std::declval< T & >())) has_freestanding_serialize_t
decltype(std::declval< T & >().save(std::declval< Archive & >())) has_member_save_t
constexpr bool has_member_serialize_with_version_v
decltype(std::declval< T & >().serialize(std::declval< Archive & >())) has_member_serialize_t
decltype(std::declval< T & >().load(std::declval< Archive & >())) has_member_load_t
constexpr bool is_input_archive_v
decltype(std::declval< T & >().save(std::declval< Archive & >(), 0u)) has_member_save_with_version_t
constexpr bool is_output_archive_v
constexpr bool has_member_load_with_version_v
constexpr bool has_member_serialize_v
constexpr bool has_freestanding_serialize_with_version_v
decltype(std::declval< T & >().serialize(std::declval< Archive & >(), 0u)) has_member_serialize_with_version_t
constexpr bool has_freestanding_boost_serialize_with_version_v
constexpr bool is_archive_v
constexpr bool has_member_save_with_version_v
decltype(serialize(std::declval< Archive & >(), std::declval< T & >(), 0u)) has_freestanding_serialize_with_version_t
decltype(std::declval< T & >().load(std::declval< Archive & >(), 0u)) has_member_load_with_version_t
constexpr bool has_freestanding_serialize_v
unsigned_int(unsigned int v)