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/TransferNameConversions.h | 56 ++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 Runtime/Serialize/TransferFunctions/TransferNameConversions.h (limited to 'Runtime/Serialize/TransferFunctions/TransferNameConversions.h') diff --git a/Runtime/Serialize/TransferFunctions/TransferNameConversions.h b/Runtime/Serialize/TransferFunctions/TransferNameConversions.h new file mode 100644 index 0000000..3082f8f --- /dev/null +++ b/Runtime/Serialize/TransferFunctions/TransferNameConversions.h @@ -0,0 +1,56 @@ +#ifndef TRANSFERNAMECONVERSIONS_H +#define TRANSFERNAMECONVERSIONS_H + +#include "Runtime/Utilities/CStringHash.h" +#include "Runtime/Modules/ExportModules.h" + +using namespace std; + +struct smaller_cstring_pair : std::binary_function, std::pair, std::size_t> +{ + bool operator () (pair lhs, pair rhs) const + { + int first = strcmp (lhs.first, rhs.first); + if (first != 0) + return first < 0; + else + return strcmp (lhs.second, rhs.second) < 0; + } +}; + +typedef std::multimap AllowTypeNameConversions; +typedef std::map, set, smaller_cstring_pair> AllowNameConversion; + +class TranferNameConversionsManager +{ +public: + AllowTypeNameConversions* m_AllowTypeNameConversions; + AllowNameConversion* m_AllowNameConversion; + + TranferNameConversionsManager(); + ~TranferNameConversionsManager(); + + static TranferNameConversionsManager* s_Instance; + static void StaticInitialize(); + static void StaticDestroy(); +}; +inline TranferNameConversionsManager& GetTranferNameConversionsManager() { return *TranferNameConversionsManager::s_Instance; } + + +/// Allows type name conversion from oldTypeName to newTypeName(The passed strings will not be copied so you can only pass in constant strings) +/// (Useful for depracating types -> RegisterAllowTypeNameConversion ("UniqueIdentifier", "GUID");) +/// "UniqueIdentifier" can now be renamed to "GUID" and serialization will just work! +void RegisterAllowTypeNameConversion (const char* oldTypeName, const char* newTypeName); + +/// Allows name conversion from oldName to newName? (The passed strings will not be copied so you can only pass in constant strings) +/// (Useful for deprecating names -> m_NewPosition will now load from m_DeprecatedPosition in an old serialized file +/// RegisterAllowNameConversion (MyClass::GetClassStringStatic(), "m_DeprecatedPosition", "m_NewPosition"); +EXPORT_COREMODULE void RegisterAllowNameConversion (const char* type, const char* oldName, const char* newName); + +const AllowNameConversion::mapped_type* GetAllowedNameConversions (const char* type, const char* name); + +bool AllowTypeNameConversion (const UnityStr& oldType, const char* newTypeName); + +void ClearTypeNameConversion (); + +#endif -- cgit v1.1-26-g67d0