diff --git a/Source/Engine/Core/Types/Variant.cpp b/Source/Engine/Core/Types/Variant.cpp index dcb319ec5..1cc401e4b 100644 --- a/Source/Engine/Core/Types/Variant.cpp +++ b/Source/Engine/Core/Types/Variant.cpp @@ -28,6 +28,12 @@ #include "Engine/Utilities/Crc.h" #include "Engine/Utilities/StringConverter.h" +#if USE_NETCORE +#define MANAGED_GC_HANDLE AsUint64 +#else +#define MANAGED_GC_HANDLE AsUint +#endif + namespace { const char* InBuiltTypesTypeNames[40] = @@ -498,13 +504,8 @@ Variant::Variant(Variant&& other) noexcept other.AsDictionary = nullptr; break; case VariantType::ManagedObject: -#if USE_NETCORE - AsUint64 = other.AsUint64; - other.AsUint64 = 0; -#elif USE_MONO - AsUint = other.AsUint; - other.AsUint = 0; -#endif + MANAGED_GC_HANDLE = other.MANAGED_GC_HANDLE; + other.MANAGED_GC_HANDLE = 0; break; case VariantType::Null: case VariantType::Void: @@ -625,11 +626,7 @@ Variant::Variant(Asset* v) Variant::Variant(MObject* v) : Type(VariantType::ManagedObject, v ? MCore::Object::GetClass(v) : nullptr) { -#if USE_NETCORE - AsUint64 = v ? MCore::GCHandle::New(v) : 0; -#else - AsUint = v ? MCore::GCHandle::New(v) : 0; -#endif + MANAGED_GC_HANDLE = v ? MCore::GCHandle::New(v) : 0; } #else @@ -968,13 +965,8 @@ Variant::~Variant() Delete(AsDictionary); break; case VariantType::ManagedObject: -#if USE_NETCORE - if (AsUint64) - MCore::GCHandle::Free(AsUint64); -#elif USE_MONO - if (AsUint) - MCore::GCHandle::Free(AsUint); -#endif + if (MANAGED_GC_HANDLE) + MCore::GCHandle::Free(MANAGED_GC_HANDLE); break; default: ; } @@ -1027,13 +1019,8 @@ Variant& Variant::operator=(Variant&& other) other.AsDictionary = nullptr; break; case VariantType::ManagedObject: -#if USE_NETCORE - AsUint64 = other.AsUint64; - other.AsUint64 = 0; -#elif USE_MONO - AsUint = other.AsUint; - other.AsUint = 0; -#endif + MANAGED_GC_HANDLE = other.MANAGED_GC_HANDLE; + other.MANAGED_GC_HANDLE = 0; break; case VariantType::Null: case VariantType::Void: @@ -1105,11 +1092,7 @@ Variant& Variant::operator=(const Variant& other) AsDictionary = New>(*other.AsDictionary); break; case VariantType::ManagedObject: -#if USE_NETCORE - AsUint64 = other.AsUint64 ? MCore::GCHandle::New(MCore::GCHandle::GetTarget(other.AsUint64)) : 0; -#elif USE_MONO - AsUint = other.AsUint ? MCore::GCHandle::New(MCore::GCHandle::GetTarget(other.AsUint)) : 0; -#endif + MANAGED_GC_HANDLE = other.MANAGED_GC_HANDLE ? MCore::GCHandle::New(MCore::GCHandle::GetTarget(other.MANAGED_GC_HANDLE)) : 0; break; case VariantType::Null: case VariantType::Void: @@ -1234,11 +1217,9 @@ bool Variant::operator==(const Variant& other) const return false; return AsBlob.Length == other.AsBlob.Length && StringUtils::Compare(static_cast(AsBlob.Data), static_cast(other.AsBlob.Data), AsBlob.Length - 1) == 0; case VariantType::ManagedObject: -#if USE_NETCORE +#if USE_CSHARP // TODO: invoke C# Equality logic? - return AsUint64 == other.AsUint64 || MCore::GCHandle::GetTarget(AsUint64) == MCore::GCHandle::GetTarget(other.AsUint64); -#elif USE_MONO - return AsUint == other.AsUint || MCore::GCHandle::GetTarget(AsUint) == MCore::GCHandle::GetTarget(other.AsUint); + return MANAGED_GC_HANDLE == other.MANAGED_GC_HANDLE || MCore::GCHandle::GetTarget(MANAGED_GC_HANDLE) == MCore::GCHandle::GetTarget(other.MANAGED_GC_HANDLE); #else return false; #endif @@ -1331,10 +1312,8 @@ Variant::operator bool() const case VariantType::Asset: return AsAsset != nullptr; case VariantType::ManagedObject: -#if USE_NETCORE - return AsUint64 != 0 && MCore::GCHandle::GetTarget(AsUint64) != nullptr; -#elif USE_MONO - return AsUint != 0 && MCore::GCHandle::GetTarget(AsUint) != nullptr; +#if USE_CSHARP + return MANAGED_GC_HANDLE != 0 && MCore::GCHandle::GetTarget(MANAGED_GC_HANDLE) != nullptr; #else return false; #endif @@ -1605,10 +1584,8 @@ Variant::operator void*() const case VariantType::Blob: return AsBlob.Data; case VariantType::ManagedObject: -#if USE_NETCORE - return AsUint64 ? MCore::GCHandle::GetTarget(AsUint64) : nullptr; -#elif USE_MONO - return AsUint ? MCore::GCHandle::GetTarget(AsUint) : nullptr; +#if USE_CSHARP + return MANAGED_GC_HANDLE ? MCore::GCHandle::GetTarget(MANAGED_GC_HANDLE) : nullptr; #else return nullptr; #endif @@ -1654,10 +1631,8 @@ Variant::operator ScriptingObject*() const Variant::operator MObject*() const { -#if USE_NETCORE - return Type.Type == VariantType::ManagedObject && AsUint64 ? MCore::GCHandle::GetTarget(AsUint64) : nullptr; -#elif USE_MONO - return Type.Type == VariantType::ManagedObject && AsUint ? MCore::GCHandle::GetTarget(AsUint) : nullptr; +#if USE_CSHARP + return Type.Type == VariantType::ManagedObject && MANAGED_GC_HANDLE ? MCore::GCHandle::GetTarget(MANAGED_GC_HANDLE) : nullptr; #else return nullptr; #endif @@ -2370,12 +2345,9 @@ void Variant::SetType(const VariantType& type) Delete(AsDictionary); break; case VariantType::ManagedObject: -#if USE_NETCORE - if (AsUint64) - MCore::GCHandle::Free(AsUint64); -#elif USE_MONO - if (AsUint) - MCore::GCHandle::Free(AsUint); +#if USE_CSHARP + if (MANAGED_GC_HANDLE) + MCore::GCHandle::Free(MANAGED_GC_HANDLE); #endif break; default: ; @@ -2430,10 +2402,8 @@ void Variant::SetType(const VariantType& type) AsDictionary = New>(); break; case VariantType::ManagedObject: -#if USE_NETCORE - AsUint64 = 0; -#elif USE_MONO - AsUint = 0; +#if USE_CSHARP + MANAGED_GC_HANDLE = 0; #endif break; case VariantType::Structure: @@ -2487,12 +2457,9 @@ void Variant::SetType(VariantType&& type) Delete(AsDictionary); break; case VariantType::ManagedObject: -#if USE_NETCORE - if (AsUint64) - MCore::GCHandle::Free(AsUint64); -#elif USE_MONO - if (AsUint) - MCore::GCHandle::Free(AsUint); +#if USE_CSHARP + if (MANAGED_GC_HANDLE) + MCore::GCHandle::Free(MANAGED_GC_HANDLE); #endif break; default: ; @@ -2547,10 +2514,8 @@ void Variant::SetType(VariantType&& type) AsDictionary = New>(); break; case VariantType::ManagedObject: -#if USE_NETCORE - AsUint64 = 0; -#elif USE_MONO - AsUint = 0; +#if USE_CSHARP + MANAGED_GC_HANDLE = 0; #endif break; case VariantType::Structure: @@ -2680,21 +2645,13 @@ void Variant::SetManagedObject(MObject* object) { if (Type.Type != VariantType::ManagedObject) SetType(VariantType(VariantType::ManagedObject, MCore::Object::GetClass(object))); -#if USE_NETCORE - AsUint64 = MCore::GCHandle::New(object); -#else - AsUint = MCore::GCHandle::New(object); -#endif + MANAGED_GC_HANDLE = MCore::GCHandle::New(object); } else { if (Type.Type != VariantType::ManagedObject || Type.TypeName) SetType(VariantType(VariantType::ManagedObject)); -#if USE_NETCORE - AsUint64 = 0; -#elif USE_MONO - AsUint = 0; -#endif + MANAGED_GC_HANDLE = 0; } #endif } @@ -2807,10 +2764,8 @@ String Variant::ToString() const case VariantType::Typename: return String((const char*)AsBlob.Data, AsBlob.Length ? AsBlob.Length - 1 : 0); case VariantType::ManagedObject: -#if USE_NETCORE - return AsUint64 ? String(MUtils::ToString(MCore::Object::ToString(MCore::GCHandle::GetTarget(AsUint64)))) : TEXT("null"); -#elif USE_MONO - return AsUint ? String(MUtils::ToString(MCore::Object::ToString(MCore::GCHandle::GetTarget(AsUint)))) : TEXT("null"); +#if USE_CSHARP + return MANAGED_GC_HANDLE ? String(MUtils::ToString(MCore::Object::ToString(MCore::GCHandle::GetTarget(MANAGED_GC_HANDLE)))) : TEXT("null"); #else return String::Empty; #endif @@ -2981,11 +2936,7 @@ Variant Variant::NewValue(const StringAnsiView& typeName) MObject* instance = mclass->CreateInstance(); if (instance) { -#if USE_NETCORE - v.AsUint64 = MCore::GCHandle::New(instance); -#else - v.AsUint = MCore::GCHandle::New(instance); -#endif + v.MANAGED_GC_HANDLE = MCore::GCHandle::New(instance); } } } @@ -3930,12 +3881,7 @@ void Variant::AllocStructure() Platform::MemoryCopy(AsBlob.Data, data, AsBlob.Length); #else Type.Type = VariantType::ManagedObject; - -#if USE_NETCORE - AsUint64 = MCore::GCHandle::New(instance); -#else - AsUint = MCore::GCHandle::New(instance); -#endif + MANAGED_GC_HANDLE = MCore::GCHandle::New(instance); #endif } else @@ -4027,10 +3973,8 @@ uint32 GetHash(const Variant& key) case VariantType::Typename: return GetHash((const char*)key.AsBlob.Data); case VariantType::ManagedObject: -#if USE_NETCORE - return key.AsUint64 ? (uint32)MCore::Object::GetHashCode(MCore::GCHandle::GetTarget(key.AsUint64)) : 0; -#elif USE_MONO - return key.AsUint ? (uint32)MCore::Object::GetHashCode(MCore::GCHandle::GetTarget(key.AsUint)) : 0; +#if USE_CSHARP + return key.MANAGED_GC_HANDLE ? (uint32)MCore::Object::GetHashCode(MCore::GCHandle::GetTarget(key.MANAGED_GC_HANDLE)) : 0; #else return 0; #endif