60 static constexpr bool mem = std::is_pod<T>::value;
69template <
class T,
size_t arr_size>
70struct meta<std::array<T, arr_size>>
75template <
class A,
class B>
76struct meta<std::pair<A, B>>
81template <
class T,
bool constantsize,
bool... constant_size>
94 constexpr static size_t
100 pack(
const T& src,
char*& dest)
102 std::memcpy(dest, &src,
sizeof(T));
108 std::memcpy(&dest, src,
sizeof(T));
121 pack(
const T* src,
char*& dest)
140 pack(
const T* src,
char*& dest)
150template <
class A,
class B>
154 size(
const std::pair<A, B>& obj)
159 pack(
const std::pair<A, B>& src,
char*& dest)
165 unpack(std::pair<A, B>& dest,
char*& src)
171template <
class A,
class B>
174 constexpr static size_t
175 size(
const std::pair<A, B>& obj)
180 pack(
const std::pair<A, B>& obj,
char*& dest)
186 unpack(std::pair<A, B>& dest,
char*& src)
193struct serial<std::vector<T>, false, false>
196 size(
const std::vector<T>& vect)
198 size_t total_size = 0;
200 return total_size +
sizeof(size_t);
203 pack(
const std::vector<T>& vect,
char*& dest)
218struct serial<std::vector<T>, false, true>
221 size(
const std::vector<T>& vect)
226 pack(
const std::vector<T>& src,
char*& dest)
244 size(
const std::vector<T>& obj)
249 pack(
const std::vector<T>& src,
char*& dest)
259template <
class T,
size_t arr_size>
260struct serial<std::array<T*, arr_size>, true>
262 constexpr static size_t
263 size(
const std::array<T*, arr_size>& arr)
265 return sizeof(T) * arr_size;
268 pack(
const std::array<T*, arr_size>& src,
char*& dest)
273 unpack(std::array<T*, arr_size>& dest,
char*& src)
278template <
class T,
size_t arr_size>
279struct serial<std::array<T, arr_size>, false>
282 size(
const std::array<T, arr_size>& arr)
284 size_t total_size = 0;
289 pack(
const std::array<T, arr_size>& src,
char*& dest)
294 unpack(std::array<T, arr_size>& dest,
char*& src)
299template <
class T,
class dataT>
301pack(
const T&
object, std::vector<dataT>& vect)
303 static_assert(std::is_pod<dataT>::value,
"vector must be of POD type");
305 vect.resize(size /
sizeof(dataT) + 1);
306 char* dataptr = (
char*)&vect[0];
311template <
class T,
class dataT>
315 static_assert(std::is_pod<dataT>::value,
"vector must be of POD type");
317 if (size > vect.size()) vect.resize(size /
sizeof(dataT) + 1);
318 char* dataptr = (
char*)&vect[0];
323template <
class T,
class dataT>
325unpack(T&
object,
const std::vector<dataT>& vect)
327 static_assert(std::is_pod<dataT>::value,
"vector must be of POD type");
328 char* dataptr = (
char*)&vect[0];
Definition nimble.mpi.serialization.h:56
size_t pack_avoid_resize(const T &object, std::vector< dataT > &vect)
Definition nimble.mpi.serialization.h:313
serial< typename std::remove_cv< T >::type, meta< T >::mem > serial_t
Definition nimble.mpi.serialization.h:84
size_t pack(const T &object, std::vector< dataT > &vect)
Definition nimble.mpi.serialization.h:301
void unpack(T &object, const std::vector< dataT > &vect)
Definition nimble.mpi.serialization.h:325
Definition kokkos_contact_manager.h:49
static constexpr size_t size(const T &obj)
Definition nimble.mpi.serialization.h:95
static void unpack(T &dest, char *&src)
Definition nimble.mpi.serialization.h:106
static void pack(const T &src, char *&dest)
Definition nimble.mpi.serialization.h:100
static size_t size(const T *obj)
Definition nimble.mpi.serialization.h:116
static void pack(const T *src, char *&dest)
Definition nimble.mpi.serialization.h:121
static void unpack(T *dest, char *&src)
Definition nimble.mpi.serialization.h:126
static size_t size(const T *obj)
Definition nimble.mpi.serialization.h:135
static void unpack(T *dest, char *&src)
Definition nimble.mpi.serialization.h:145
static void pack(const T *src, char *&dest)
Definition nimble.mpi.serialization.h:140
static void pack(const std::array< T, arr_size > &src, char *&dest)
Definition nimble.mpi.serialization.h:289
static size_t size(const std::array< T, arr_size > &arr)
Definition nimble.mpi.serialization.h:282
static void unpack(std::array< T, arr_size > &dest, char *&src)
Definition nimble.mpi.serialization.h:294
static constexpr size_t size(const std::array< T *, arr_size > &arr)
Definition nimble.mpi.serialization.h:263
static void unpack(std::array< T *, arr_size > &dest, char *&src)
Definition nimble.mpi.serialization.h:273
static void pack(const std::array< T *, arr_size > &src, char *&dest)
Definition nimble.mpi.serialization.h:268
static void unpack(std::pair< A, B > &dest, char *&src)
Definition nimble.mpi.serialization.h:165
static size_t size(const std::pair< A, B > &obj)
Definition nimble.mpi.serialization.h:154
static void pack(const std::pair< A, B > &src, char *&dest)
Definition nimble.mpi.serialization.h:159
static void unpack(std::pair< A, B > &dest, char *&src)
Definition nimble.mpi.serialization.h:186
static void pack(const std::pair< A, B > &obj, char *&dest)
Definition nimble.mpi.serialization.h:180
static constexpr size_t size(const std::pair< A, B > &obj)
Definition nimble.mpi.serialization.h:175
static void unpack(std::vector< T > &dest, char *&src)
Definition nimble.mpi.serialization.h:209
static void pack(const std::vector< T > &vect, char *&dest)
Definition nimble.mpi.serialization.h:203
static size_t size(const std::vector< T > &vect)
Definition nimble.mpi.serialization.h:196
static void unpack(std::vector< T > &dest, char *&src)
Definition nimble.mpi.serialization.h:232
static void pack(const std::vector< T > &src, char *&dest)
Definition nimble.mpi.serialization.h:226
static size_t size(const std::vector< T > &vect)
Definition nimble.mpi.serialization.h:221
static void unpack(std::vector< T > &dest, char *&src)
Definition nimble.mpi.serialization.h:254
static void pack(const std::vector< T > &src, char *&dest)
Definition nimble.mpi.serialization.h:249
static size_t size(const std::vector< T > &obj)
Definition nimble.mpi.serialization.h:244
Definition nimble.mpi.serialization.h:82