Added all the missing serializer support, fixed up serialization notification
Signed-off-by: chcurran <82187351+carlitosan@users.noreply.github.com>
This commit is contained in:
@@ -10,7 +10,6 @@ set(FILES
|
||||
ArrayView.cpp
|
||||
ConcurrencyCheckerTests.cpp
|
||||
InstanceDatabase.cpp
|
||||
JsonSerializationUtilsTests.cpp
|
||||
lru_cache.cpp
|
||||
Main.cpp
|
||||
vector_set.cpp
|
||||
|
||||
@@ -209,39 +209,35 @@ namespace AZ
|
||||
//! performance sensitive code.
|
||||
AZ_INLINE bool CompareAnyValue(const AZStd::any& lhs, const AZStd::any& rhs)
|
||||
{
|
||||
bool isEqual = false;
|
||||
|
||||
if (lhs.type() != rhs.type())
|
||||
if (lhs.type() == rhs.type())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
AZ::SerializeContext* serializeContext = nullptr;
|
||||
AZ::ComponentApplicationBus::BroadcastResult(serializeContext, &AZ::ComponentApplicationRequests::GetSerializeContext);
|
||||
|
||||
AZ::SerializeContext* serializeContext = nullptr;
|
||||
AZ::ComponentApplicationBus::BroadcastResult(serializeContext, &AZ::ComponentApplicationRequests::GetSerializeContext);
|
||||
|
||||
const AZ::SerializeContext::ClassData* classData = serializeContext->FindClassData(lhs.type());
|
||||
if (classData)
|
||||
{
|
||||
if (classData->m_serializer)
|
||||
const AZ::SerializeContext::ClassData* classData = serializeContext->FindClassData(lhs.type());
|
||||
if (classData)
|
||||
{
|
||||
isEqual = classData->m_serializer->CompareValueData(AZStd::any_cast<void>(&lhs), AZStd::any_cast<void>(&rhs));
|
||||
}
|
||||
else
|
||||
{
|
||||
AZStd::vector<AZ::u8> myData;
|
||||
AZ::IO::ByteContainerStream<decltype(myData)> myDataStream(&myData);
|
||||
if (classData->m_serializer)
|
||||
{
|
||||
return classData->m_serializer->CompareValueData(AZStd::any_cast<void>(&lhs), AZStd::any_cast<void>(&rhs));
|
||||
}
|
||||
else
|
||||
{
|
||||
AZStd::vector<AZ::u8> myData;
|
||||
AZ::IO::ByteContainerStream<decltype(myData)> myDataStream(&myData);
|
||||
|
||||
AZ::Utils::SaveObjectToStream(myDataStream, AZ::ObjectStream::ST_BINARY, AZStd::any_cast<void>(&lhs), lhs.type());
|
||||
AZ::Utils::SaveObjectToStream(myDataStream, AZ::ObjectStream::ST_BINARY, AZStd::any_cast<void>(&lhs), lhs.type());
|
||||
|
||||
AZStd::vector<AZ::u8> otherData;
|
||||
AZ::IO::ByteContainerStream<decltype(otherData)> otherDataStream(&otherData);
|
||||
AZStd::vector<AZ::u8> otherData;
|
||||
AZ::IO::ByteContainerStream<decltype(otherData)> otherDataStream(&otherData);
|
||||
|
||||
AZ::Utils::SaveObjectToStream(otherDataStream, AZ::ObjectStream::ST_BINARY, AZStd::any_cast<void>(&rhs), rhs.type());
|
||||
isEqual = (myData.size() == otherData.size()) && (memcmp(myData.data(), otherData.data(), myData.size()) == 0);
|
||||
AZ::Utils::SaveObjectToStream(otherDataStream, AZ::ObjectStream::ST_BINARY, AZStd::any_cast<void>(&rhs), rhs.type());
|
||||
return (myData.size() == otherData.size()) && (memcmp(myData.data(), otherData.data(), myData.size()) == 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return isEqual;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -213,7 +213,7 @@ namespace AZ
|
||||
void* object, const Uuid& typeId, const rapidjson::Value& value, JsonDeserializerContext& context, ContinuationFlags flags)
|
||||
{
|
||||
bool loadAsNewInstance = (flags & ContinuationFlags::LoadAsNewInstance) == ContinuationFlags::LoadAsNewInstance;
|
||||
JsonDeserializer::UseTypeDeserializer useCustom = (flags & ContinuationFlags::NoTypeSerializer) == ContinuationFlags::NoTypeSerializer
|
||||
JsonDeserializer::UseTypeDeserializer useCustom = (flags & ContinuationFlags::IgnoreTypeSerializer) == ContinuationFlags::IgnoreTypeSerializer
|
||||
? JsonDeserializer::UseTypeDeserializer::No
|
||||
: JsonDeserializer::UseTypeDeserializer::Yes;
|
||||
|
||||
@@ -228,7 +228,7 @@ namespace AZ
|
||||
{
|
||||
using namespace JsonSerializationResult;
|
||||
|
||||
JsonSerializer::UseTypeSerializer useCustom = (flags & ContinuationFlags::NoTypeSerializer) == ContinuationFlags::NoTypeSerializer
|
||||
JsonSerializer::UseTypeSerializer useCustom = (flags & ContinuationFlags::IgnoreTypeSerializer) == ContinuationFlags::IgnoreTypeSerializer
|
||||
? JsonSerializer::UseTypeSerializer::No
|
||||
: JsonSerializer::UseTypeSerializer::Yes;
|
||||
|
||||
|
||||
@@ -159,13 +159,13 @@ namespace AZ
|
||||
|
||||
enum class ContinuationFlags
|
||||
{
|
||||
None = 0, //! No extra flags.
|
||||
ResolvePointer = 1 << 0, //! The pointer passed in contains a pointer. The (de)serializer will attempt to resolve to an instance.
|
||||
ReplaceDefault = 1 << 1, //! The default value provided for storing will be replaced with a newly created one.
|
||||
LoadAsNewInstance = 1 << 2, //! Treats the value as if it's a newly created instance. This may trigger serializers marked with
|
||||
//! OperationFlags::InitializeNewInstance. Used for instance by pointers or new instances added to
|
||||
//! an array.
|
||||
NoTypeSerializer = 1 << 3, //! Ignore the custom/specific serializer for the TypeId
|
||||
None = 0, //! No extra flags.
|
||||
ResolvePointer = 1 << 0, //! The pointer passed in contains a pointer. The (de)serializer will attempt to resolve to an instance.
|
||||
ReplaceDefault = 1 << 1, //! The default value provided for storing will be replaced with a newly created one.
|
||||
LoadAsNewInstance = 1 << 2, //! Treats the value as if it's a newly created instance. This may trigger serializers marked with
|
||||
//! OperationFlags::InitializeNewInstance. Used for instance by pointers or new instances added to
|
||||
//! an array.
|
||||
IgnoreTypeSerializer = 1 << 3, //! Ignore the custom/specific serializer for the TypeId
|
||||
};
|
||||
|
||||
enum class OperationFlags
|
||||
|
||||
@@ -73,7 +73,9 @@ namespace AZ
|
||||
}
|
||||
|
||||
if (BaseJsonSerializer* serializer
|
||||
= context.GetRegistrationContext()->GetSerializerForType(classData->m_azRtti->GetGenericTypeId()))
|
||||
= (custom == UseTypeDeserializer::Yes)
|
||||
? context.GetRegistrationContext()->GetSerializerForType(classData->m_azRtti->GetGenericTypeId())
|
||||
: nullptr)
|
||||
{
|
||||
return DeserializerDefaultCheck(serializer, object, typeId, value, isNewInstance, context);
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
#include <AzCore/Serialization/Utils.h>
|
||||
#include <AzCore/Utils/Utils.h>
|
||||
|
||||
#include "JsonUtils.h"
|
||||
#include <AzCore/Serialization/Json/JsonUtils.h>
|
||||
|
||||
namespace AZ
|
||||
{
|
||||
|
||||
@@ -105,6 +105,7 @@ set(FILES
|
||||
Serialization/Json/JsonSerializationResultTests.cpp
|
||||
Serialization/Json/JsonSerializationTests.h
|
||||
Serialization/Json/JsonSerializationTests.cpp
|
||||
Serialization/Json/JsonSerializationUtilsTests.cpp
|
||||
Serialization/Json/JsonSerializerConformityTests.h
|
||||
Serialization/Json/JsonSerializerMock.h
|
||||
Serialization/Json/MapSerializerTests.cpp
|
||||
|
||||
Reference in New Issue
Block a user