summaryrefslogtreecommitdiff
path: root/Runtime/Serialize/SerializeConversion.h
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-08-14 22:50:43 +0800
committerchai <chaifix@163.com>2019-08-14 22:50:43 +0800
commit15740faf9fe9fe4be08965098bbf2947e096aeeb (patch)
treea730ec236656cc8cab5b13f088adfaed6bb218fb /Runtime/Serialize/SerializeConversion.h
+Unity Runtime codeHEADmaster
Diffstat (limited to 'Runtime/Serialize/SerializeConversion.h')
-rw-r--r--Runtime/Serialize/SerializeConversion.h34
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