9#include "Containers/Array.h"
10#include "Containers/Map.h"
57#if WITH_EDITORONLY_DATA
73#if WITH_EDITORONLY_DATA
93#if WITH_EDITORONLY_DATA
101#if WITH_EDITORONLY_DATA
113 inline void ClearCachedFieldInternal()
152#if WITH_EDITORONLY_DATA
162#if WITH_EDITORONLY_DATA
189#if WITH_EDITORONLY_DATA
239#if WITH_EDITORONLY_DATA
281template<
class PropertyType>
287 enum EDummy1 { Dummy1 };
297 FFieldPath::operator=(
Other);
304 FFieldPath::operator=(
Other);
325#if WITH_EDITORONLY_DATA
331 static_assert(std::is_convertible_v<PropertyType*, const volatile FField*>,
"TFieldPath can only be constructed with FField types");
341 UE_REQUIRES(std::is_convertible_v<OtherPropertyType*, PropertyType*>)
348 static_assert(std::is_convertible_v<PropertyType*, const volatile FField*>,
"TFieldPath can only be constructed with FField types");
357 UE_REQUIRES(std::is_convertible_v<OtherPropertyType*, PropertyType*>)
364 static_assert(std::is_convertible_v<PropertyType*, const volatile FField*>,
"TFieldPath can only be constructed with FField types");
373 UE_REQUIRES(std::is_convertible_v<OtherPropertyType*, PropertyType*>)
389 UE_REQUIRES(std::is_convertible_v<OtherPropertyType*, PropertyType*>)
397 FFieldPath::operator=(
Other);
439template <
typename LhsType,
typename RhsType>
451template <
typename LhsType,
typename RhsType>
453 ->
decltype((
LhsType*)
nullptr == Rhs)
455 return Lhs.Get() == Rhs;
463template <
typename LhsType,
typename RhsType>
465 ->
decltype(Lhs == (
RhsType*)
nullptr)
467 return Lhs == Rhs.Get();
474template <
typename LhsType>
484template <
typename RhsType>
490#if !PLATFORM_COMPILER_HAS_GENERATED_COMPARISON_OPERATORS
496template <
typename LhsType,
typename RhsType>
500 return !(Lhs == Rhs);
508template <
typename LhsType,
typename RhsType>
510 ->
decltype((
LhsType*)
nullptr != Rhs)
512 return !(Lhs == Rhs);
520template <
typename LhsType,
typename RhsType>
522 ->
decltype(Lhs != (
RhsType*)
nullptr)
524 return !(Lhs == Rhs);
531template <
typename LhsType>
534 return !(Lhs ==
nullptr);
541template <
typename RhsType>
544 return !(
nullptr == Rhs);
549template <
typename PropertyType>
564template <
typename KeyType,
typename ValueType,
bool bInAllowDuplicateKeys = false>
576 return GetTypeHash(Key);
#define check(expr)
Definition AssertionMacros.h:314
#define WITH_EDITORONLY_DATA
Definition CoreMiscDefines.h:24
UE_FORCEINLINE_HINT FieldType * CastField(FField *Src)
Definition Field.h:1106
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE_FORCEINLINE_HINT auto operator==(const TFieldPath< LhsType > &Lhs, const TFieldPath< LhsType > &Rhs) -> decltype((LhsType *) nullptr==(RhsType *) nullptr)
Definition FieldPath.h:440
UE_FORCEINLINE_HINT auto operator!=(const TFieldPath< LhsType > &Lhs, const TFieldPath< LhsType > &Rhs) -> decltype((LhsType *) nullptr !=(RhsType *) nullptr)
Definition FieldPath.h:497
UE_FORCEINLINE_HINT TFieldPath< PropertyType > MakePropertyPath(PropertyType *Ptr)
Definition FieldPath.h:550
UClass * StaticClass()
Definition ReflectedTypeAccessors.h:13
#define UE_REQUIRES(...)
Definition Requires.h:86
constexpr uint32 HashCombine(uint32 A, uint32 C)
Definition TypeHash.h:36
Definition Archive.h:1208
Definition FieldPathProperty.h:25
static COREUOBJECT_API FFieldClass * StaticClass()
Definition Field.cpp:293
FFieldClass * GetClass() const
Definition Field.h:722
Definition LinkerLoad.h:124
Definition NameTypes.h:617
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void Empty(SizeType Slack=0)
Definition Array.h:2273
Definition FieldPath.h:36
friend uint32 GetTypeHash(const FFieldPath &InPropertyPath)
Definition FieldPath.h:270
void Reset()
Definition FieldPath.h:248
TWeakObjectPtr< UStruct > ResolvedOwner
Definition FieldPath.h:64
EPathResolveType
Definition FieldPath.h:50
@ UseStructAlways
Definition FieldPath.h:52
@ UseStructIfOuterNotFound
Definition FieldPath.h:51
TArray< FName > Path
Definition FieldPath.h:67
COREUOBJECT_API void Generate(FField *InField)
Definition FieldPath.cpp:78
bool IsStale() const
Definition FieldPath.h:236
UE_FORCEINLINE_HINT bool operator==(const FFieldPath &InOther) const
Definition FieldPath.h:255
bool IsPathToFieldEmpty() const
Definition FieldPath.h:227
UE_FORCEINLINE_HINT bool operator!=(const FFieldPath &InOther) const
Definition FieldPath.h:260
COREUOBJECT_API friend FArchive & operator<<(FArchive &Ar, FFieldPath &InOutPropertyPath)
Definition FieldPath.cpp:316
COREUOBJECT_API FString ToString() const
Definition FieldPath.cpp:291
bool NeedsResolving() const
Definition FieldPath.h:69
void ResolveField(FFieldClass *ExpectedClass=FField::StaticClass(), UStruct *InCurrentStruct=nullptr, EPathResolveType InResolveType=FFieldPath::UseStructIfOuterNotFound) const
Definition FieldPath.h:179
FFieldPath(FField *InField)
Definition FieldPath.h:147
COREUOBJECT_API FField * TryToResolvePath(UStruct *InCurrentStruct, EPathResolveType InResolveType=FFieldPath::UseStructIfOuterNotFound) const
Definition FieldPath.cpp:268
FField * GetTyped(FFieldClass *ExpectedType, UStruct *InCurrentStruct=nullptr) const
Definition FieldPath.h:214
FField * ResolvedField
Definition FieldPath.h:56
void ClearCachedField() const
Definition FieldPath.h:90
Definition FastReferenceCollector.h:61
Definition UObjectArray.h:50
TTypeTraits< KeyType >::ConstPointerType KeyInitType
Definition Map.h:78
Definition FieldPath.h:283
PropertyType * ResolveWithRenamedStructPackage(UStruct *InCurrentStruct)
Definition FieldPath.h:410
void operator=(const TFieldPath< OtherPropertyType > &Other)
Definition FieldPath.h:391
TFieldPath(const TFieldPath< OtherPropertyType > &Other)
Definition FieldPath.h:359
TFieldPath & operator=(const TFieldPath &Other)
Definition FieldPath.h:299
TFieldPath(const TCHAR *InPath)
Definition FieldPath.h:319
UE_FORCEINLINE_HINT PropertyType * Get(UStruct *InCurrentStruct=nullptr) const
Definition FieldPath.h:405
UE_FORCEINLINE_HINT TFieldPath(TYPE_OF_NULLPTR)
Definition FieldPath.h:311
UE_FORCEINLINE_HINT PropertyType * operator->() const
Definition FieldPath.h:428
void operator=(OtherPropertyType *InProperty)
Definition FieldPath.h:375
UE_FORCEINLINE_HINT PropertyType * operator*() const
Definition FieldPath.h:420
TFieldPath(const TFieldPath &Other)
Definition FieldPath.h:292
TFieldPath(OtherPropertyType *InProperty, EDummy1=Dummy1)
Definition FieldPath.h:343
TFieldPath()
Definition FieldPath.h:290
Definition IsPODType.h:12
@ Value
Definition IsPODType.h:13
Definition UnrealTypeTraits.h:181
@ Value
Definition UnrealTypeTraits.h:182
Definition UnrealTypeTraits.h:172
Definition FieldPath.h:566
static UE_FORCEINLINE_HINT uint32 GetKeyHash(KeyInitType Key)
Definition FieldPath.h:574
TDefaultMapKeyFuncs< KeyType, ValueType, bInAllowDuplicateKeys >::KeyInitType KeyInitType
Definition FieldPath.h:567
static UE_FORCEINLINE_HINT bool Matches(KeyInitType A, KeyInitType B)
Definition FieldPath.h:569
Definition WeakFieldPtr.h:65
Definition WeakObjectPtrTemplates.h:25
FORCEINLINE void Reset()
Definition WeakObjectPtrTemplates.h:92
FORCEINLINE T * Get(bool bEvenIfPendingKill) const
Definition WeakObjectPtrTemplates.h:132
FORCEINLINE bool IsValid(bool bEvenIfPendingKill, bool bThreadsafeTest=false) const
Definition WeakObjectPtrTemplates.h:232