You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
Headers are updated to contain any missing #includes needed to compile and #includes are sorted. Nothing is removed. #ushell-cherrypick of 21065896 by bryan.sefcik #preflight 62d4b1a5a6141b6adfb0c892 #jira #ROBOMERGE-OWNER: Bryan.sefcik #ROBOMERGE-AUTHOR: bryan.sefcik #ROBOMERGE-SOURCE: CL 21150156 via CL 21151754 via CL 21154719 #ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v972-20964824) #ROBOMERGE-CONFLICT from-shelf [CL 21181076 by Bryan sefcik in ue5-main branch]
144 lines
4.7 KiB
C++
144 lines
4.7 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "HAL/Platform.h"
|
|
#include "Templates/Function.h"
|
|
|
|
class Error;
|
|
class FProperty;
|
|
class IStructDeserializerBackend;
|
|
class UStruct;
|
|
|
|
/**
|
|
* Enumerates policies for various errors during de-serialization.
|
|
*/
|
|
enum class EStructDeserializerErrorPolicies
|
|
{
|
|
/** Fail the de-serialization. */
|
|
Error,
|
|
|
|
/** Ignore the error (default). */
|
|
Ignore,
|
|
|
|
/** Print a warning to the log. */
|
|
Warning,
|
|
};
|
|
|
|
/**
|
|
* Enumerates policies for map de-serialization.
|
|
*/
|
|
enum class EStructDeserializerMapPolicies
|
|
{
|
|
/** Deserialize maps as key-value pair - default. */
|
|
KeyValuePair,
|
|
|
|
/** Treat map properties as array using index. */
|
|
Array,
|
|
};
|
|
|
|
|
|
/**
|
|
* Structure for UStruct serialization policies.
|
|
*/
|
|
struct FStructDeserializerPolicies
|
|
{
|
|
/** Holds the policy for handling missing fields. */
|
|
EStructDeserializerErrorPolicies MissingFields;
|
|
|
|
/** Policy about map property deserialization */
|
|
EStructDeserializerMapPolicies MapPolicies;
|
|
|
|
/** Predicate for performing advanced filtering of struct properties.
|
|
If set, the predicate should return true for all properties it wishes to include in the output.
|
|
*/
|
|
TFunction<bool (const FProperty* /*CurrentProp*/, const FProperty* /*ParentProp*/)> PropertyFilter;
|
|
|
|
/** Default constructor. */
|
|
FStructDeserializerPolicies()
|
|
: MissingFields(EStructDeserializerErrorPolicies::Ignore)
|
|
, MapPolicies(EStructDeserializerMapPolicies::KeyValuePair)
|
|
, PropertyFilter()
|
|
{ }
|
|
};
|
|
|
|
|
|
/**
|
|
* Implements a static class that can deserialize UStruct based types.
|
|
*
|
|
* This class implements the basic functionality for the serialization of UStructs, such as
|
|
* iterating a structure's properties and writing property values. The actual reading of
|
|
* serialized input data is performed by de-serialization backends, which allows this
|
|
* class to remain serialization format agnostic.
|
|
*/
|
|
class FStructDeserializer
|
|
{
|
|
public:
|
|
|
|
/**
|
|
* Deserializes a data structure from an archive using the specified policy.
|
|
*
|
|
* @param OutStruct A pointer to the data structure to deserialize into.
|
|
* @param TypeInfo The data structure's type information.
|
|
* @param Backend The de-serialization backend to use.
|
|
* @param Policies The de-serialization policies to use.
|
|
* @return true if deserialization was successful, false otherwise.
|
|
*/
|
|
SERIALIZATION_API static bool Deserialize( void* OutStruct, UStruct& TypeInfo, IStructDeserializerBackend& Backend, const FStructDeserializerPolicies& Policies );
|
|
|
|
/**
|
|
* Deserializes a data structure element from an archive using the specified policy.
|
|
*
|
|
* @param OutStruct A pointer to the data structure to deserialize into.
|
|
* @param TypeInfo The data structure's type information.
|
|
* @param ElementIndex The element index to deserialize in case of a container property.
|
|
* @param Backend The de-serialization backend to use.
|
|
* @param Policies The de-serialization policies to use.
|
|
* @return true if deserialization was successful, false otherwise.
|
|
*/
|
|
SERIALIZATION_API static bool DeserializeElement(void* OutStruct, UStruct& TypeInfo, int32 ElementIndex, IStructDeserializerBackend& Backend, const FStructDeserializerPolicies& Policies);
|
|
|
|
/**
|
|
* Deserializes a data structure from an archive using the default policy.
|
|
*
|
|
* @param OutStruct A pointer to the data structure to deserialize into.
|
|
* @param TypeInfo The data structure's type information.
|
|
* @param Backend The de-serialization backend to use.
|
|
* @return true if deserialization was successful, false otherwise.
|
|
*/
|
|
static bool Deserialize( void* OutStruct, UStruct& TypeInfo, IStructDeserializerBackend& Backend )
|
|
{
|
|
return Deserialize(OutStruct, TypeInfo, Backend, FStructDeserializerPolicies());
|
|
}
|
|
|
|
public:
|
|
|
|
/**
|
|
* Deserializes a data structure from an archive using the default policy.
|
|
*
|
|
* @param OutStruct The struct to deserialize into.
|
|
* @param Backend The de-serialization backend to use.
|
|
* @return true if deserialization was successful, false otherwise.
|
|
*/
|
|
template<typename StructType>
|
|
static bool Deserialize( StructType& OutStruct, IStructDeserializerBackend& Backend )
|
|
{
|
|
return Deserialize(&OutStruct, *StructType::StaticStruct(), Backend);
|
|
}
|
|
|
|
/**
|
|
* Deserializes a data structure from an archive using the specified policy.
|
|
*
|
|
* @param OutStruct The struct to deserialize into.
|
|
* @param Backend The de-serialization backend to use.
|
|
* @param Policies The de-serialization policies to use.
|
|
* @return true if deserialization was successful, false otherwise.
|
|
*/
|
|
template<typename StructType>
|
|
static bool Deserialize( StructType& OutStruct, IStructDeserializerBackend& Backend, const FStructDeserializerPolicies& Policies )
|
|
{
|
|
return Deserialize(&OutStruct, *StructType::StaticStruct(), Backend, Policies);
|
|
}
|
|
};
|