22#include <opm/common/utility/TimeService.hpp>
31namespace Serialization {
35constexpr bool is_pod_v = std::is_standard_layout_v<T> && std::is_trivial_v<T>;
38template <
bool pod,
class T>
41 static std::size_t packSize(
const T&);
42 static void pack(
const T&, std::vector<char>&, std::size_t&);
43 static void unpack(T&,
const std::vector<char>&, std::size_t&);
54 return packSize(&data, 1);
60 static std::size_t
packSize(
const T*, std::size_t n)
69 static void pack(
const T& data,
70 std::vector<char>& buffer,
71 std::size_t& position)
73 pack(&data, 1, buffer, position);
81 static void pack(
const T* data,
83 std::vector<char>& buffer,
84 std::size_t& position)
86 std::memcpy(buffer.data() + position, data, n*
sizeof(T));
87 position += n*
sizeof(T);
95 const std::vector<char>& buffer,
96 std::size_t& position)
98 unpack(&data, 1, buffer, position);
108 const std::vector<char>& buffer,
109 std::size_t& position)
111 std::memcpy(data, buffer.data() + position, n*
sizeof(T));
112 position += n*
sizeof(T);
120 static std::size_t packSize(
const T&)
122 static_assert(!std::is_same_v<T,T>,
"Packing not supported for type");
126 static void pack(
const T&, std::vector<char>&, std::size_t&)
128 static_assert(!std::is_same_v<T,T>,
"Packing not supported for type");
131 static void unpack(T&,
const std::vector<char>&, std::size_t&)
133 static_assert(!std::is_same_v<T,T>,
"Packing not supported for type");
138template <std::
size_t Size>
141 static std::size_t packSize(
const std::bitset<Size>& data);
143 static void pack(
const std::bitset<Size>& data,
144 std::vector<char>& buffer, std::size_t& position);
146 static void unpack(std::bitset<Size>& data,
147 const std::vector<char>& buffer, std::size_t& position);
153 static std::size_t packSize(
const std::string& data);
155 static void pack(
const std::string& data,
156 std::vector<char>& buffer, std::size_t& position);
158 static void unpack(std::string& data,
const std::vector<char>& buffer, std::size_t& position);
164 static std::size_t packSize(
const time_point&);
166 static void pack(
const time_point& data,
167 std::vector<char>& buffer, std::size_t& position);
169 static void unpack(time_point& data,
const std::vector<char>& buffer, std::size_t& position);
190 std::size_t
packSize(
const T* data, std::size_t n)
const
192 static_assert(detail::is_pod_v<T>,
"Array packing not supported for non-pod data");
203 std::vector<char>& buffer,
204 std::size_t& position)
const
218 std::vector<char>& buffer,
219 std::size_t& position)
const
221 static_assert(detail::is_pod_v<T>,
"Array packing not supported for non-pod data");
232 const std::vector<char>& buffer,
233 std::size_t& position)
const
247 const std::vector<char>& buffer,
248 std::size_t& position)
const
250 static_assert(detail::is_pod_v<T>,
"Array packing not supported for non-pod data");
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition Exceptions.hpp:30
Struct handling packing of serialization to a memory buffer.
Definition MemPacker.hpp:175
void unpack(T *data, std::size_t n, const std::vector< char > &buffer, std::size_t &position) const
Unpack an array.
Definition MemPacker.hpp:245
std::size_t packSize(const T *data, std::size_t n) const
Calculates the pack size for an array.
Definition MemPacker.hpp:190
void pack(const T *data, std::size_t n, std::vector< char > &buffer, std::size_t &position) const
Pack an array.
Definition MemPacker.hpp:216
void unpack(T &data, const std::vector< char > &buffer, std::size_t &position) const
Unpack a variable.
Definition MemPacker.hpp:231
std::size_t packSize(const T &data) const
Calculates the pack size for a variable.
Definition MemPacker.hpp:180
void pack(const T &data, std::vector< char > &buffer, std::size_t &position) const
Pack a variable.
Definition MemPacker.hpp:202
static std::size_t packSize(const T &data)
Calculates the pack size for a POD.
Definition MemPacker.hpp:52
static void pack(const T &data, std::vector< char > &buffer, std::size_t &position)
Pack a POD.
Definition MemPacker.hpp:69
static void pack(const T *data, std::size_t n, std::vector< char > &buffer, std::size_t &position)
Pack an array of POD.
Definition MemPacker.hpp:81
static void unpack(T &data, const std::vector< char > &buffer, std::size_t &position)
Unpack a POD.
Definition MemPacker.hpp:94
static std::size_t packSize(const T *, std::size_t n)
Calculates the pack size for an array of POD.
Definition MemPacker.hpp:60
static void unpack(T *data, std::size_t n, const std::vector< char > &buffer, std::size_t &position)
Unpack an array of POD.
Definition MemPacker.hpp:106
Abstract struct for packing which is (partially) specialized for specific types.
Definition MemPacker.hpp:40