diff options
author | chai <chaifix@163.com> | 2019-08-14 22:50:43 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2019-08-14 22:50:43 +0800 |
commit | 15740faf9fe9fe4be08965098bbf2947e096aeeb (patch) | |
tree | a730ec236656cc8cab5b13f088adfaed6bb218fb /Runtime/Serialize/SerializeConversion.h |
Diffstat (limited to 'Runtime/Serialize/SerializeConversion.h')
-rw-r--r-- | Runtime/Serialize/SerializeConversion.h | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/Runtime/Serialize/SerializeConversion.h b/Runtime/Serialize/SerializeConversion.h new file mode 100644 index 0000000..782ea5b --- /dev/null +++ b/Runtime/Serialize/SerializeConversion.h @@ -0,0 +1,34 @@ +#ifndef SERIALIZECONVERSION_H +#define SERIALIZECONVERSION_H + +#if SUPPORT_SERIALIZED_TYPETREES +#include "Runtime/Serialize/TransferFunctions/SerializeTransfer.h" +#include "SerializeTraits.h" + +// Trys to convert from an old type to a new one +template<class OldFormat, class NewFormat> +bool StdTemplateConversionFunction (void* inData, SafeBinaryRead& transfer) +{ + NewFormat& data = *reinterpret_cast<NewFormat*> (inData); + const TypeTree& oldTypeTree = transfer.GetActiveOldTypeTree (); + AssertIf (SerializeTraits<OldFormat>::GetTypeString (NULL) != oldTypeTree.m_Type); + OldFormat oldData; + + SafeBinaryRead safeRead; + CachedReader& temp = safeRead.Init (transfer); + + safeRead.Transfer (oldData, oldTypeTree.m_Name.c_str ()); + + temp.End (); + + data = oldData; + + return true; +} + +#define REGISTER_CONVERTER(from, to) \ +SafeBinaryRead::RegisterConverter (SerializeTraits<from>::GetTypeString (NULL), SerializeTraits<to>::GetTypeString (NULL), \ + StdTemplateConversionFunction<from, to>) + +#endif +#endif |