Finish move to Deserialise function; remove Deserialise class

This commit is contained in:
GregF
2016-02-07 18:43:24 +01:00
committed by baldurk
parent c3553d26a9
commit 38ebce536e
8 changed files with 106 additions and 125 deletions
+2 -15
View File
@@ -432,20 +432,8 @@ class Serialiser
DebugPrint("%s: %s\n", name, ToStr::Get<T>(el).c_str());
}
// object to serialise a single element
// used to instantiate destructors for structs
// with allocated members
template<class T>
class Deserialise : public T {
public:
Deserialise(T t) : T(t) {}
Deserialise() {}
virtual ~Deserialise() {}
Mode m_Mode;
};
// function to deallocate members
template<class T> void Deserialize(const T* const el) const {}
template<class T> void Deserialise(const T* const el) const {}
template<typename X>
void Serialise(const char *name, std::vector<X> &el)
@@ -775,7 +763,7 @@ template<class T>
struct ScopedDeserialise
{
ScopedDeserialise(const Serialiser* const ser, const T* const t) : m_ser(ser), m_t(t) {}
~ScopedDeserialise() { m_ser->Deserialize(m_t); }
~ScopedDeserialise() { m_ser->Deserialise(m_t); }
const Serialiser* const m_ser;
const T* const m_t;
};
@@ -789,7 +777,6 @@ struct ScopedDeserialise
#define SCOPED_SERIALISE_SMALL_CONTEXT(n) ScopedContext scope(GET_SERIALISER, GetChunkName(n), n, true);
#define SERIALISE_ELEMENT(type, name, inValue) type name; ScopedDeserialise<type> CONCAT(deserialise_, name)(m_pSerialiser, &name); if(m_State >= WRITING) name = (inValue); GET_SERIALISER->Serialise(#name, name);
#define SERIALISE_ELEMENT_CLASS(type, name, inValue) Serialiser::Deserialise<type> name; if(m_State >= WRITING) { static_cast<type&>(name) = (inValue); name.m_Mode = Serialiser::WRITING; } else name.m_Mode = Serialiser::READING; GET_SERIALISER->Serialise(#name, static_cast<type&>(name));
#define SERIALISE_ELEMENT_OPT(type, name, inValue, Condition) type name = type(); if(Condition) { if(m_State >= WRITING) name = (inValue); GET_SERIALISER->Serialise(#name, name); }
#define SERIALISE_ELEMENT_ARR(type, name, inValues, count) type *name = new type[count]; for(size_t serialiseIdx=0; serialiseIdx < count; serialiseIdx++) { if(m_State >= WRITING) name[serialiseIdx] = (inValues)[serialiseIdx]; GET_SERIALISER->Serialise(#name, name[serialiseIdx]); }
#define SERIALISE_ELEMENT_ARR_OPT(type, name, inValues, count, Condition) type *name = NULL; if(Condition) { name = new type[count]; for(size_t serialiseIdx=0; serialiseIdx < count; serialiseIdx++) { if(m_State >= WRITING) name[serialiseIdx] = (inValues)[serialiseIdx]; GET_SERIALISER->Serialise(#name, name[serialiseIdx]); } }