From 15740faf9fe9fe4be08965098bbf2947e096aeeb Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 14 Aug 2019 22:50:43 +0800 Subject: +Unity Runtime code --- .../TransferFunctions/YAMLSerializeTraits.h | 236 +++++++++++++++++++++ 1 file changed, 236 insertions(+) create mode 100644 Runtime/Serialize/TransferFunctions/YAMLSerializeTraits.h (limited to 'Runtime/Serialize/TransferFunctions/YAMLSerializeTraits.h') diff --git a/Runtime/Serialize/TransferFunctions/YAMLSerializeTraits.h b/Runtime/Serialize/TransferFunctions/YAMLSerializeTraits.h new file mode 100644 index 0000000..04cf3aa --- /dev/null +++ b/Runtime/Serialize/TransferFunctions/YAMLSerializeTraits.h @@ -0,0 +1,236 @@ +#ifndef YAMLSERIALIZETRAITS_H +#define YAMLSERIALIZETRAITS_H + +class Object; +template +class PPtr; +template +class ImmediatePtr; +struct UnityGUID; +class YAMLRead; +class YAMLWrite; + +template +class YAMLSerializeTraitsBase +{ + public: + inline static std::string ParseName (const char* _name, bool stripNames) + { + std::string name = _name; + + if (name == "Base") + name = SerializeTraits::GetTypeString (NULL); + else if (stripNames) + { + if (name.rfind(".") != std::string::npos) + name = name.substr(name.rfind(".") + 1); + if (name.length() >= 3 && name.find("m_") == 0) + name = (char)tolower(name[2]) + name.substr(3); + } + return name; + } + + inline static bool ShouldSerializeArrayAsCompactString () + { + return false; + } + + inline static bool IsBasicType () + { + return false; + } + + template inline + static void Transfer (T& data, TransferFunction& transfer) + { + SerializeTraits::Transfer (data, transfer); + } + + inline static void TransferStringToData (T& /*data*/, std::string& /*str*/) + { + } +}; + +template +class YAMLSerializeTraits : public YAMLSerializeTraitsBase {}; + +template +class YAMLSerializeTraitsForBasicType : public YAMLSerializeTraitsBase +{ + public: + inline static bool ShouldSerializeArrayAsCompactString () + { + return true; + } + + inline static bool IsBasicType () + { + return true; + } +}; + +template<> +class YAMLSerializeTraits : public YAMLSerializeTraitsForBasicType {}; + +template<> +class YAMLSerializeTraits : public YAMLSerializeTraitsForBasicType {}; + +template<> +class YAMLSerializeTraits : public YAMLSerializeTraitsForBasicType {}; + +template<> +class YAMLSerializeTraits : public YAMLSerializeTraitsForBasicType {}; + +template<> +class YAMLSerializeTraits : public YAMLSerializeTraitsForBasicType {}; + +template<> +class YAMLSerializeTraits : public YAMLSerializeTraitsForBasicType {}; + +template<> +class YAMLSerializeTraits : public YAMLSerializeTraitsForBasicType {}; + +template<> +class YAMLSerializeTraits : public YAMLSerializeTraitsForBasicType {}; + +template<> +class YAMLSerializeTraits : public YAMLSerializeTraitsForBasicType {}; + +template<> +class YAMLSerializeTraits : public YAMLSerializeTraitsForBasicType {}; + +template<> +class YAMLSerializeTraits : public YAMLSerializeTraitsBase +{ +public: + + template inline + static void Transfer (UnityStr& data, TransferFunction& transfer) + { + transfer.TransferStringData (data); + } + + inline static void TransferStringToData (UnityStr& data, std::string &str) + { + data = str.c_str(); + } + + inline static bool IsBasicType () + { + return true; + } +}; + +// Do not add this serialization function. All serialized strings should use UnityStr instead of std::string +//template +//class YAMLSerializeTraits > : public YAMLSerializeTraitsBase > + +template +class YAMLSerializeTraits > : public YAMLSerializeTraitsBase > +{ + public: + + + template inline + static void Transfer (std::pair& data, TransferFunction& transfer) + { + if (YAMLSerializeTraits::IsBasicType()) + transfer.TransferPair (data); + else + { + transfer.Transfer (data.first, "first"); + transfer.Transfer (data.second, "second"); + } + } +}; + +template +class YAMLSerializeTraits > : public YAMLSerializeTraitsBase > +{ + public: + + typedef std::map value_type; + + template inline + static void Transfer (value_type& data, TransferFunction& transfer) + { + AssertIf(transfer.IsRemapPPtrTransfer() && SerializeTraits::MightContainPPtr() && transfer.IsReadingPPtr()); + transfer.TransferSTLStyleMap (data); + } +}; + +template +class YAMLSerializeTraits > : public YAMLSerializeTraitsBase > +{ + public: + + typedef std::multimap value_type; + + template inline + static void Transfer (value_type& data, TransferFunction& transfer) + { + AssertIf(transfer.IsRemapPPtrTransfer() && SerializeTraits::MightContainPPtr() && transfer.IsReadingPPtr()); + transfer.TransferSTLStyleMap (data); + } +}; + + +template +class YAMLSerializeTraits > : public YAMLSerializeTraitsBase > +{ + public: + + typedef std::set value_type; + + template inline + static void Transfer (value_type& data, TransferFunction& transfer) + { + AssertIf(transfer.IsRemapPPtrTransfer() && transfer.IsReadingPPtr()); + transfer.TransferSTLStyleSet (data); + } +}; + + +template +void TransferYAMLPPtr (PPtr &data, TransferFunction& transfer); +template +void TransferYAMLPPtr (ImmediatePtr &data, TransferFunction& transfer); + +template +class YAMLSerializeTraits > : public YAMLSerializeTraitsBase > +{ + public: + + template inline + static void Transfer (PPtr& data, TransferFunction& transfer) + { + TransferYAMLPPtr ((PPtr&)data, transfer); + } +}; + +template +class YAMLSerializeTraits > : public YAMLSerializeTraitsBase > +{ + public: + + template inline + static void Transfer (ImmediatePtr& data, TransferFunction& transfer) + { + TransferYAMLPPtr ((ImmediatePtr&)data, transfer); + } +}; + +template<> +class YAMLSerializeTraits : public YAMLSerializeTraitsBase +{ + public: + + template + static void Transfer (UnityGUID& data, TransferFunction& transfer); + + inline static bool IsBasicType () + { + return true; + } +}; +#endif -- cgit v1.1-26-g67d0