22#include <opm/common/utility/TimeService.hpp>
31namespace Serialization {
35template <
bool pod,
class T>
38 static std::size_t packSize(
const T&);
39 static void pack(
const T&, std::vector<char>&, std::size_t&);
40 static void unpack(T&,
const std::vector<char>&, std::size_t&);
51 return packSize(&data, 1);
57 static std::size_t
packSize(
const T*, std::size_t n)
66 static void pack(
const T& data,
67 std::vector<char>& buffer,
68 std::size_t& position)
70 pack(&data, 1, buffer, position);
78 static void pack(
const T* data,
80 std::vector<char>& buffer,
81 std::size_t& position)
83 std::memcpy(buffer.data() + position, data, n*
sizeof(T));
84 position += n*
sizeof(T);
92 const std::vector<char>& buffer,
93 std::size_t& position)
95 unpack(&data, 1, buffer, position);
105 const std::vector<char>& buffer,
106 std::size_t& position)
108 std::memcpy(data, buffer.data() + position, n*
sizeof(T));
109 position += n*
sizeof(T);
117 static std::size_t packSize(
const T&)
119 static_assert(!std::is_same_v<T,T>,
"Packing not supported for type");
123 static void pack(
const T&, std::vector<char>&, std::size_t&)
125 static_assert(!std::is_same_v<T,T>,
"Packing not supported for type");
128 static void unpack(T&,
const std::vector<char>&, std::size_t&)
130 static_assert(!std::is_same_v<T,T>,
"Packing not supported for type");
135template <std::
size_t Size>
138 static std::size_t packSize(
const std::bitset<Size>& data);
140 static void pack(
const std::bitset<Size>& data,
141 std::vector<char>& buffer, std::size_t& position);
143 static void unpack(std::bitset<Size>& data,
144 const std::vector<char>& buffer, std::size_t& position);
150 static std::size_t packSize(
const std::string& data);
152 static void pack(
const std::string& data,
153 std::vector<char>& buffer, std::size_t& position);
155 static void unpack(std::string& data,
const std::vector<char>& buffer, std::size_t& position);
161 static std::size_t packSize(
const time_point&);
163 static void pack(
const time_point& data,
164 std::vector<char>& buffer, std::size_t& position);
166 static void unpack(time_point& data,
const std::vector<char>& buffer, std::size_t& position);
187 std::size_t
packSize(
const T* data, std::size_t n)
const
189 static_assert(std::is_pod_v<T>,
"Array packing not supported for non-pod data");
200 std::vector<char>& buffer,
201 std::size_t& position)
const
215 std::vector<char>& buffer,
216 std::size_t& position)
const
218 static_assert(std::is_pod_v<T>,
"Array packing not supported for non-pod data");
229 const std::vector<char>& buffer,
230 std::size_t& position)
const
244 const std::vector<char>& buffer,
245 std::size_t& position)
const
247 static_assert(std::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:172
void unpack(T *data, std::size_t n, const std::vector< char > &buffer, std::size_t &position) const
Unpack an array.
Definition MemPacker.hpp:242
std::size_t packSize(const T *data, std::size_t n) const
Calculates the pack size for an array.
Definition MemPacker.hpp:187
void pack(const T *data, std::size_t n, std::vector< char > &buffer, std::size_t &position) const
Pack an array.
Definition MemPacker.hpp:213
void unpack(T &data, const std::vector< char > &buffer, std::size_t &position) const
Unpack a variable.
Definition MemPacker.hpp:228
std::size_t packSize(const T &data) const
Calculates the pack size for a variable.
Definition MemPacker.hpp:177
void pack(const T &data, std::vector< char > &buffer, std::size_t &position) const
Pack a variable.
Definition MemPacker.hpp:199
static std::size_t packSize(const T &data)
Calculates the pack size for a POD.
Definition MemPacker.hpp:49
static void pack(const T &data, std::vector< char > &buffer, std::size_t &position)
Pack a POD.
Definition MemPacker.hpp:66
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:78
static void unpack(T &data, const std::vector< char > &buffer, std::size_t &position)
Unpack a POD.
Definition MemPacker.hpp:91
static std::size_t packSize(const T *, std::size_t n)
Calculates the pack size for an array of POD.
Definition MemPacker.hpp:57
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:103
Abstract struct for packing which is (partially) specialized for specific types.
Definition MemPacker.hpp:37