summaryrefslogtreecommitdiff
path: root/Runtime/Serialize/SerializeTraitsBase.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/SerializeTraitsBase.h
+Unity Runtime codeHEADmaster
Diffstat (limited to 'Runtime/Serialize/SerializeTraitsBase.h')
-rw-r--r--Runtime/Serialize/SerializeTraitsBase.h61
1 files changed, 61 insertions, 0 deletions
diff --git a/Runtime/Serialize/SerializeTraitsBase.h b/Runtime/Serialize/SerializeTraitsBase.h
new file mode 100644
index 0000000..b3a85fd
--- /dev/null
+++ b/Runtime/Serialize/SerializeTraitsBase.h
@@ -0,0 +1,61 @@
+#pragma once
+
+template<class T>
+class SerializeTraitsBase
+{
+ public:
+
+ typedef T value_type;
+
+ static int GetByteSize () {return sizeof (value_type);}
+ static size_t GetAlignOf() {return ALIGN_OF(value_type);}
+
+ static void resource_image_assign_external (value_type& /*data*/, void* /*begin*/, void* /*end*/)
+ {
+ AssertString("Unsupported");
+ }
+};
+
+template<class T>
+class SerializeTraitsBaseForBasicType : public SerializeTraitsBase<T>
+{
+public:
+ typedef T value_type;
+
+ template<class TransferFunction> inline
+ static void Transfer (value_type& data, TransferFunction& transfer)
+ {
+ transfer.TransferBasicData (data);
+ }
+};
+
+template<class T>
+class SerializeTraits : public SerializeTraitsBase<T>
+{
+public:
+
+ typedef T value_type;
+
+ inline static const char* GetTypeString (void* /*ptr*/) { return value_type::GetTypeString (); }
+ inline static bool MightContainPPtr () { return value_type::MightContainPPtr (); }
+ /// Returns whether or not a this type is to be treated as a seperate channel in the animation system
+ static bool IsAnimationChannel () { return T::IsAnimationChannel (); }
+
+ /// AllowTransferOptimization can be used for type that have the same memory format as serialized format.
+ /// Eg. a float or a Vector3f.
+ /// StreamedBinaryRead will collapse the read into a direct read when reading an array with values that have AllowTransferOptimization.
+ static bool AllowTransferOptimization () { return T::AllowTransferOptimization (); }
+
+ template<class TransferFunction> inline
+ static void Transfer (value_type& data, TransferFunction& transfer)
+ {
+ data.Transfer (transfer);
+ }
+
+};
+
+#define DEFINE_GET_TYPESTRING_CONTAINER(x) \
+inline static const char* GetTypeString (void*) { return #x; } \
+inline static bool IsAnimationChannel () { return false; } \
+inline static bool MightContainPPtr () { return SerializeTraits<T>::MightContainPPtr(); } \
+inline static bool AllowTransferOptimization () { return false; }