ttg 1.0.0
Template Task Graph (TTG): flowgraph-based programming model for high-performance distributed-memory algorithms
Loading...
Searching...
No Matches
traits.h
Go to the documentation of this file.
1// SPDX-License-Identifier: BSD-3-Clause
2#ifndef TTG_SERIALIZATION_TRAITS_H
3#define TTG_SERIALIZATION_TRAITS_H
4
5#include "ttg/util/meta.h"
6
7#include <type_traits>
8
9#include <iostream>
10
11namespace boost {
12 namespace archive {}
13 namespace serialization {
14 struct unsigned_int {
15 unsigned int v;
16 unsigned_int(unsigned int v) : v(v) {}
17 operator unsigned int() const { return v; }
18 };
20 } // namespace serialization
21} // namespace boost
22
23namespace ttg::detail {
24
28 template <typename T, typename Archive>
29 using has_member_serialize_t = decltype(std::declval<T&>().serialize(std::declval<Archive&>()));
30
34 template <typename T, typename Archive>
35 using has_member_serialize_with_version_t = decltype(std::declval<T&>().serialize(std::declval<Archive&>(), 0u));
36
40 template <typename T, typename Archive>
41 using has_member_load_t = decltype(std::declval<T&>().load(std::declval<Archive&>()));
42
46 template <typename T, typename Archive>
47 using has_member_load_with_version_t = decltype(std::declval<T&>().load(std::declval<Archive&>(), 0u));
48
52 template <typename T, typename Archive>
53 using has_member_save_t = decltype(std::declval<T&>().save(std::declval<Archive&>()));
54
58 template <typename T, typename Archive>
59 using has_member_save_with_version_t = decltype(std::declval<T&>().save(std::declval<Archive&>(), 0u));
60
63 template <typename T, typename Archive>
64 using has_freestanding_serialize_t = decltype(serialize(std::declval<Archive&>(), std::declval<T&>()));
65
68 template <typename T, typename Archive>
70 decltype(serialize(std::declval<Archive&>(), std::declval<T&>(), 0u));
71
74 template <typename T, typename Archive>
76 decltype(serialize(std::declval<Archive&>(), std::declval<T&>(), boost::serialization::version_as_adl_tag));
77
83 template <typename T, typename Archive>
85
91 template <typename T, typename Archive>
94
100 template <typename T, typename Archive>
101 inline constexpr bool has_member_load_with_version_v =
103
109 template <typename T, typename Archive>
110 inline constexpr bool has_member_save_with_version_v =
112
118 template <typename T, typename Archive>
119 inline constexpr bool has_freestanding_serialize_v =
121
127 template <typename T, typename Archive>
130
136 template <typename T, typename Archive>
139
141
142 template <typename T, typename Enabler = void>
143 inline constexpr bool is_archive_v = false;
144
145 template <typename T, typename Enabler>
146 inline constexpr bool is_input_archive_v = false;
147
148 template <typename T, typename Enabler = void>
149 inline constexpr bool is_output_archive_v = false;
150
152
153 template <class, class = void>
154 struct is_printable : std::false_type {};
155
156 template <class T>
157 struct is_printable<T, std::void_t<decltype(std::declval<std::ostream&>() << std::declval<T>())>> : std::true_type {};
158
159 template <typename T, typename Enabler = void>
160 struct printer_helper {
161 static void print(const void* object) { std::cout << "[unprintable object]" << std::endl; }
162 };
163
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; }
167 };
168
169} // namespace ttg::detail
170
171#include "ttg/serialization/backends.h"
172
173namespace ttg::detail {
175 template <typename T, typename Enabler = void>
176 struct is_user_buffer_serializable : std::false_type {};
177
178 // template <typename T>
179 // struct is_user_buffer_serializable<T, std::enable_if_t<is_madness_user_buffer_serializable_v<T> ||
180 // is_boost_user_buffer_serializable_v<T>>> : std::true_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 {};
184
185 template <typename T>
186 inline constexpr bool is_user_buffer_serializable_v = is_user_buffer_serializable<T>::value;
187
189
194 template <typename T>
195 inline constexpr bool is_memcpyable_override_v = std::is_trivially_copyable_v<T>;
196
197 // std::pair of trivially-copyable types is trivially copyable
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>;
200
202
204 template <typename T>
205 struct is_memcpyable : std::bool_constant<std::is_trivially_copyable_v<T> || is_memcpyable_override_v<T>> {};
206
207 template <typename T>
208 inline constexpr bool is_memcpyable_v = is_memcpyable<T>::value;
209
210} // namespace ttg::detail
211
212#endif // TTG_SERIALIZATION_TRAITS_H
const unsigned_int version_as_adl_tag
Definition traits.h:19
STL namespace.
decltype(serialize(std::declval< Archive & >(), std::declval< T & >(), boost::serialization::version_as_adl_tag)) has_freestanding_boost_serialize_with_version_t
Definition traits.h:76
decltype(serialize(std::declval< Archive & >(), std::declval< T & >())) has_freestanding_serialize_t
Definition traits.h:64
decltype(std::declval< T & >().save(std::declval< Archive & >())) has_member_save_t
Definition traits.h:53
constexpr bool has_member_serialize_with_version_v
Definition traits.h:92
decltype(std::declval< T & >().serialize(std::declval< Archive & >())) has_member_serialize_t
Definition traits.h:29
decltype(std::declval< T & >().load(std::declval< Archive & >())) has_member_load_t
Definition traits.h:41
constexpr bool is_input_archive_v
Definition traits.h:146
decltype(std::declval< T & >().save(std::declval< Archive & >(), 0u)) has_member_save_with_version_t
Definition traits.h:59
constexpr bool is_output_archive_v
Definition traits.h:149
constexpr bool has_member_load_with_version_v
Definition traits.h:101
constexpr bool has_member_serialize_v
Definition traits.h:84
constexpr bool has_freestanding_serialize_with_version_v
Definition traits.h:128
decltype(std::declval< T & >().serialize(std::declval< Archive & >(), 0u)) has_member_serialize_with_version_t
Definition traits.h:35
constexpr bool has_freestanding_boost_serialize_with_version_v
Definition traits.h:137
constexpr bool is_archive_v
Definition traits.h:143
constexpr bool has_member_save_with_version_v
Definition traits.h:110
decltype(serialize(std::declval< Archive & >(), std::declval< T & >(), 0u)) has_freestanding_serialize_with_version_t
Definition traits.h:70
decltype(std::declval< T & >().load(std::declval< Archive & >(), 0u)) has_member_load_with_version_t
Definition traits.h:47
constexpr bool has_freestanding_serialize_v
Definition traits.h:119
constexpr auto get(typelist< T, RestOfTs... >)
Definition typelist.h:102