52 #ifndef EMP_SERIALIZE_H 53 #define EMP_SERIALIZE_H 57 #include "../base/vector.h" 72 if (own_os && os)
delete os;
73 if (own_is && is)
delete is;
76 DataPod(std::ostream & _os, std::istream & _is)
77 : os(&_os), is(&_is), own_os(false), own_is(false) { ; }
81 DataPod(
DataPod && rhs) : os(rhs.os), is(rhs.is), own_os(rhs.own_os), own_is(rhs.own_is) {
82 rhs.own_os =
false; rhs.own_is=
false;
86 os = rhs.os; is = rhs.is; own_os = rhs.own_os; own_is = rhs.own_is;
87 rhs.own_os =
false; rhs.own_is=
false;
108 template <
typename T>
109 auto StoreVar(
DataPod & pod,
const T & var,
bool) ->
typename T::emp_load_return_type & {
115 template <
typename T>
118 for (
int i = 0; i < (int) var.
size(); ++i) {
128 template <
typename T>
142 template <
typename T>
148 template <
typename T>
152 pod.IStream() >> var;
153 pod.IStream().ignore(1);
154 emp_assert(pod.IStream() &&
"Make sure the DataPod is still okay.");
161 std::getline(pod.
IStream(), var,
':');
167 template <
typename T>
169 const uint32_t v_size(
SetupLoad(pod, &v_size,
true));
173 for (uint32_t i = 0; i < v_size; i++) {
190 template <
typename FIRST_TYPE,
typename... OTHER_TYPES>
192 static void Store(
DataPod & pod, FIRST_TYPE & arg1, OTHER_TYPES&... others) {
204 template <
typename... ARG_TYPES>
DataPod(DataPod &&rhs)
Definition: serialize.h:81
std::istream & IStream()
Definition: serialize.h:98
auto StoreVar(DataPod &pod, const T &var, bool) -> typename T::emp_load_return_type &
Definition: serialize.h:109
DataPod(std::ostream &_os, std::istream &_is)
Definition: serialize.h:76
std::istream * is
Definition: serialize.h:67
static void Store(DataPod &pod, FIRST_TYPE &arg1, OTHER_TYPES &...others)
Definition: serialize.h:192
DataPod(std::iostream &_ios)
Definition: serialize.h:78
size_t size() const
Definition: vector.h:151
void emplace_back(ARGS &&...args)
Definition: vector.h:219
Macros for simplifying to serialization of objects.
std::ostream * os
Definition: serialize.h:66
void Store(DataPod &pod, ARG_TYPES &...args)
Definition: serialize.h:205
Definition: serialize.h:187
If we are in emscripten, make sure to include the header.
Definition: array.h:37
bool own_is
Definition: serialize.h:69
std::ostream & OStream()
Definition: serialize.h:97
#define emp_assert(...)
Definition: assert.h:199
static void Store(DataPod &)
Definition: serialize.h:200
bool own_os
Definition: serialize.h:68
~DataPod()
Definition: serialize.h:95
DataPod & operator=(DataPod &&rhs)
Definition: serialize.h:84
void ClearData()
Definition: serialize.h:71
A DataPod managed information about another class for serialization.
Definition: serialize.h:64
auto SetupLoad(DataPod &pod, T *, bool) -> typename T::emp_load_return_type &
Definition: serialize.h:143