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>&,
int&);
40 static void unpack(T&, std::vector<char>&,
int&);
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,
70 pack(&data, 1, buffer, position);
78 static void pack(
const T* data,
80 std::vector<char>& buffer,
83 std::memcpy(buffer.data() + position, data, n*
sizeof(T));
84 position += n*
sizeof(T);
92 std::vector<char>& buffer,
95 unpack(&data, 1, buffer, position);
105 std::vector<char>& buffer,
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>&,
int&)
125 static_assert(!std::is_same_v<T,T>,
"Packing not supported for type");
128 static void unpack(T&, std::vector<char>&,
int&)
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,
int& position);
143 static void unpack(std::bitset<Size>& data,
144 std::vector<char>& buffer,
int& position);
150 static std::size_t packSize(
const std::string& data);
152 static void pack(
const std::string& data,
153 std::vector<char>& buffer,
int& position);
155 static void unpack(std::string& data, std::vector<char>& buffer,
int& position);
161 static std::size_t packSize(
const time_point&);
163 static void pack(
const time_point& data,
164 std::vector<char>& buffer,
int& position);
166 static void unpack(time_point& data, std::vector<char>& buffer,
int& 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,
215 std::vector<char>& buffer,
218 static_assert(std::is_pod_v<T>,
"Array packing not supported for non-pod data");
229 std::vector<char>& buffer,
244 std::vector<char>& buffer,
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 pack(const T &data, std::vector< char > &buffer, int &position) const
Pack a variable.
Definition MemPacker.hpp:199
std::size_t packSize(const T *data, std::size_t n) const
Calculates the pack size for an array.
Definition MemPacker.hpp:187
void unpack(T &data, std::vector< char > &buffer, int &position) const
Unpack a variable.
Definition MemPacker.hpp:228
void unpack(T *data, std::size_t n, std::vector< char > &buffer, int &position) const
Unpack an array.
Definition MemPacker.hpp:242
void pack(const T *data, std::size_t n, std::vector< char > &buffer, int &position) const
Pack an array.
Definition MemPacker.hpp:213
std::size_t packSize(const T &data) const
Calculates the pack size for a variable.
Definition MemPacker.hpp:177
static std::size_t packSize(const T &data)
Calculates the pack size for a POD.
Definition MemPacker.hpp:49
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::vector< char > &buffer, int &position)
Unpack a POD.
Definition MemPacker.hpp:91
static void unpack(T *data, std::size_t n, std::vector< char > &buffer, int &position)
Unpack an array of POD.
Definition MemPacker.hpp:103
static void pack(const T &data, std::vector< char > &buffer, int &position)
Pack a POD.
Definition MemPacker.hpp:66
static void pack(const T *data, std::size_t n, std::vector< char > &buffer, int &position)
Pack an array of POD.
Definition MemPacker.hpp:78
Abstract struct for packing which is (partially) specialized for specific types.
Definition MemPacker.hpp:37