22#include <opm/common/utility/TimeService.hpp>
30namespace Serialization {
34template <
bool pod,
class T>
37 static std::size_t packSize(
const T&);
38 static void pack(
const T&, std::vector<char>&,
int&);
39 static void unpack(T&, std::vector<char>&,
int&);
50 return packSize(&data, 1);
56 static std::size_t
packSize(
const T*, std::size_t n)
65 static void pack(
const T& data,
66 std::vector<char>& buffer,
69 pack(&data, 1, buffer, position);
77 static void pack(
const T* data,
79 std::vector<char>& buffer,
82 std::memcpy(buffer.data() + position, data, n*
sizeof(T));
83 position += n*
sizeof(T);
91 std::vector<char>& buffer,
94 unpack(&data, 1, buffer, position);
104 std::vector<char>& buffer,
107 std::memcpy(data, buffer.data() + position, n*
sizeof(T));
108 position += n*
sizeof(T);
116 static std::size_t packSize(
const T&)
118 static_assert(!std::is_same_v<T,T>,
"Packing not supported for type");
122 static void pack(
const T&, std::vector<char>&,
int&)
124 static_assert(!std::is_same_v<T,T>,
"Packing not supported for type");
127 static void unpack(T&, std::vector<char>&,
int&)
129 static_assert(!std::is_same_v<T,T>,
"Packing not supported for type");
134template <std::
size_t Size>
137 static std::size_t packSize(
const std::bitset<Size>& data);
139 static void pack(
const std::bitset<Size>& data,
140 std::vector<char>& buffer,
int& position);
142 static void unpack(std::bitset<Size>& data,
143 std::vector<char>& buffer,
int& position);
149 static std::size_t packSize(
const std::string& data);
151 static void pack(
const std::string& data,
152 std::vector<char>& buffer,
int& position);
154 static void unpack(std::string& data, std::vector<char>& buffer,
int& position);
160 static std::size_t packSize(
const time_point&);
162 static void pack(
const time_point& data,
163 std::vector<char>& buffer,
int& position);
165 static void unpack(time_point& data, std::vector<char>& buffer,
int& position);
186 std::size_t
packSize(
const T* data, std::size_t n)
const
188 static_assert(std::is_pod_v<T>,
"Array packing not supported for non-pod data");
199 std::vector<char>& buffer,
214 std::vector<char>& buffer,
217 static_assert(std::is_pod_v<T>,
"Array packing not supported for non-pod data");
228 std::vector<char>& buffer,
243 std::vector<char>& buffer,
246 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:171
void pack(const T &data, std::vector< char > &buffer, int &position) const
Pack a variable.
Definition: MemPacker.hpp:198
std::size_t packSize(const T *data, std::size_t n) const
Calculates the pack size for an array.
Definition: MemPacker.hpp:186
void unpack(T &data, std::vector< char > &buffer, int &position) const
Unpack a variable.
Definition: MemPacker.hpp:227
void unpack(T *data, std::size_t n, std::vector< char > &buffer, int &position) const
Unpack an array.
Definition: MemPacker.hpp:241
void pack(const T *data, std::size_t n, std::vector< char > &buffer, int &position) const
Pack an array.
Definition: MemPacker.hpp:212
std::size_t packSize(const T &data) const
Calculates the pack size for a variable.
Definition: MemPacker.hpp:176
static std::size_t packSize(const T &data)
Calculates the pack size for a POD.
Definition: MemPacker.hpp:48
static std::size_t packSize(const T *, std::size_t n)
Calculates the pack size for an array of POD.
Definition: MemPacker.hpp:56
static void unpack(T &data, std::vector< char > &buffer, int &position)
Unpack a POD.
Definition: MemPacker.hpp:90
static void unpack(T *data, std::size_t n, std::vector< char > &buffer, int &position)
Unpack an array of POD.
Definition: MemPacker.hpp:102
static void pack(const T &data, std::vector< char > &buffer, int &position)
Pack a POD.
Definition: MemPacker.hpp:65
static void pack(const T *data, std::size_t n, std::vector< char > &buffer, int &position)
Pack an array of POD.
Definition: MemPacker.hpp:77
Abstract struct for packing which is (partially) specialized for specific types.
Definition: MemPacker.hpp:36