UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
EnumProperty.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Containers/Array.h"
7#include "HAL/PlatformMath.h"
10#include "UObject/Field.h"
11#include "UObject/NameTypes.h"
13#include "UObject/UnrealType.h"
14
15class FArchive;
16class FBlake3;
18class FOutputDevice;
20class UEnum;
21class UField;
22class UObject;
23class UPackageMap;
24class UStruct;
25namespace UECodeGen_Private { struct FEnumPropertyParams; }
26struct FPropertyTag;
27
29{
31
32public:
34
40 COREUOBJECT_API FEnumProperty(FFieldVariant InOwner, const UECodeGen_Private::FEnumPropertyParams& Prop);
41
42#if UE_WITH_CONSTINIT_UOBJECT
43 consteval FEnumProperty(
44 UE::CodeGen::ConstInit::FPropertyParams InBaseParams,
48 )
49 : Super(InBaseParams.SetElementSize(InUnderlyingSize))
50 , UnderlyingProp(InUnderlyingProperty)
51 , Enum(InEnum)
52 {
53 }
54#endif
55
56
57#if WITH_EDITORONLY_DATA
59#endif // WITH_EDITORONLY_DATA
61
62 // UObject interface
63 COREUOBJECT_API virtual void Serialize( FArchive& Ar ) override;
64 COREUOBJECT_API virtual void AddReferencedObjects(FReferenceCollector& Collector) override;
66 // End of UObject interface
67
68 // Field interface
69 COREUOBJECT_API virtual void PostDuplicate(const FField& InField) override;
70 COREUOBJECT_API virtual FField* GetInnerFieldByName(const FName& InName) override;
72
73 // UField interface
74 COREUOBJECT_API virtual void AddCppProperty(FProperty* Property) override;
75 // End of UField interface
76
77 // FProperty interface
78 COREUOBJECT_API virtual FString GetCPPMacroType( FString& ExtendedTypeText ) const override;
79 COREUOBJECT_API virtual FString GetCPPType( FString* ExtendedTypeText, uint32 CPPExportFlags ) const override;
80 COREUOBJECT_API virtual void LinkInternal(FArchive& Ar) override;
81 COREUOBJECT_API virtual bool Identical( const void* A, const void* B, uint32 PortFlags ) const override;
82 COREUOBJECT_API virtual void SerializeItem(FStructuredArchive::FSlot Slot, void* Value, void const* Defaults) const override;
83 COREUOBJECT_API virtual bool NetSerializeItem( FArchive& Ar, UPackageMap* Map, void* Data, TArray<uint8> * MetaData = NULL ) const override;
84 COREUOBJECT_API virtual void ExportText_Internal( FString& ValueStr, const void* PropertyValueOrContainer, EPropertyPointerType PropertyPointerType, const void* DefaultValue, UObject* Parent, int32 PortFlags, UObject* ExportRootScope ) const override;
86 COREUOBJECT_API virtual int32 GetMinAlignment() const override;
87 COREUOBJECT_API virtual bool SameType(const FProperty* Other) const override;
88 COREUOBJECT_API virtual EConvertFromTypeResult ConvertFromType(const FPropertyTag& Tag, FStructuredArchive::FSlot Slot, uint8* Data, const UStruct* DefaultsStruct, const uint8* Defaults) override;
89#if WITH_EDITORONLY_DATA
90 COREUOBJECT_API virtual void AppendSchemaHash(FBlake3& Builder, bool bSkipEditorOnly) const override;
91#endif
92 COREUOBJECT_API virtual bool LoadTypeName(UE::FPropertyTypeName Type, const FPropertyTag* Tag = nullptr) override;
93 COREUOBJECT_API virtual void SaveTypeName(UE::FPropertyTypeNameBuilder& Type) const override;
94 COREUOBJECT_API virtual bool CanSerializeFromTypeName(UE::FPropertyTypeName Type) const override;
95 // End of FProperty interface
96
101 inline void SetEnum(UEnum* InEnum)
102 {
103 checkf(!Enum, TEXT("FEnumProperty enum may only be set once"));
104 Enum = InEnum;
105 }
106
115
120 {
121 return Enum;
122 }
123
128 {
129 return UnderlyingProp;
130 }
131
132 // Returns the number of bits required by NetSerializeItem to encode this enum, based on the maximum value
134
135 virtual bool HasIntrusiveUnsetOptionalState() const override
136 {
137 return false;
138 }
139
140private:
141 COREUOBJECT_API virtual uint32 GetValueTypeHashInternal(const void* Src) const override;
142
143 FNumericProperty* UnderlyingProp; // The property which represents the underlying type of the enum
144 TObjectPtr<UEnum> Enum; // The enum represented by this property
145};
#define NULL
Definition oodle2base.h:134
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
#define UE_INTERNAL
Definition CoreMiscDefines.h:345
#define DECLARE_FIELD_API(TClass, TSuperClass, TStaticFlags, TRequiredAPI)
Definition Field.h:257
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
#define UE_FORCEINLINE_HINT
Definition Platform.h:723
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
@ CASTCLASS_FEnumProperty
Definition ObjectMacros.h:384
EObjectFlags
Definition ObjectMacros.h:552
EPropertyPointerType
Definition UnrealType.h:156
EConvertFromTypeResult
Definition UnrealType.h:130
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
Definition Blake3.h:94
Definition EnumProperty.h:29
UE_FORCEINLINE_HINT FNumericProperty * GetUnderlyingProperty() const
Definition EnumProperty.h:127
virtual COREUOBJECT_API FField * GetInnerFieldByName(const FName &InName) override
Definition EnumProperty.cpp:608
virtual COREUOBJECT_API EConvertFromTypeResult ConvertFromType(const FPropertyTag &Tag, FStructuredArchive::FSlot Slot, uint8 *Data, const UStruct *DefaultsStruct, const uint8 *Defaults) override
Definition EnumProperty.cpp:488
virtual COREUOBJECT_API ~FEnumProperty()
Definition EnumProperty.cpp:254
UE_FORCEINLINE_HINT UEnum * GetEnum() const
Definition EnumProperty.h:119
virtual COREUOBJECT_API bool CanSerializeFromTypeName(UE::FPropertyTypeName Type) const override
Definition EnumProperty.cpp:692
virtual COREUOBJECT_API void GetPreloadDependencies(TArray< UObject * > &OutDeps) override
Definition EnumProperty.cpp:454
virtual COREUOBJECT_API FString GetCPPMacroType(FString &ExtendedTypeText) const override
Definition EnumProperty.cpp:448
virtual COREUOBJECT_API int32 GetMinAlignment() const override
Definition EnumProperty.cpp:478
virtual bool HasIntrusiveUnsetOptionalState() const override
Definition EnumProperty.h:135
UE_INTERNAL UE_FORCEINLINE_HINT void SetEnumForImpersonation(UEnum *InEnum)
Definition EnumProperty.h:111
virtual COREUOBJECT_API void AddReferencedObjects(FReferenceCollector &Collector) override
Definition EnumProperty.cpp:382
virtual COREUOBJECT_API bool LoadTypeName(UE::FPropertyTypeName Type, const FPropertyTag *Tag=nullptr) override
Definition EnumProperty.cpp:635
virtual COREUOBJECT_API void PostDuplicate(const FField &InField) override
Definition EnumProperty.cpp:260
COREUOBJECT_API uint64 GetMaxNetSerializeBits() const
Definition EnumProperty.cpp:627
void SetEnum(UEnum *InEnum)
Definition EnumProperty.h:101
virtual COREUOBJECT_API void GetInnerFields(TArray< FField * > &OutFields) override
Definition EnumProperty.cpp:618
virtual COREUOBJECT_API void AddCppProperty(FProperty *Property) override
Definition EnumProperty.cpp:268
virtual COREUOBJECT_API void ExportText_Internal(FString &ValueStr, const void *PropertyValueOrContainer, EPropertyPointerType PropertyPointerType, const void *DefaultValue, UObject *Parent, int32 PortFlags, UObject *ExportRootScope) const override
Definition EnumProperty.cpp:414
virtual COREUOBJECT_API void SaveTypeName(UE::FPropertyTypeNameBuilder &Type) const override
Definition EnumProperty.cpp:669
virtual COREUOBJECT_API void LinkInternal(FArchive &Ar) override
Definition EnumProperty.cpp:461
virtual COREUOBJECT_API void SerializeItem(FStructuredArchive::FSlot Slot, void *Value, void const *Defaults) const override
Definition EnumProperty.cpp:279
virtual COREUOBJECT_API bool SameType(const FProperty *Other) const override
Definition EnumProperty.cpp:483
Definition Field.h:353
Definition Field.h:556
FField Super
Definition Field.h:575
Definition NameTypes.h:617
Definition UnrealType.h:1766
Definition OutputDevice.h:133
Definition UnrealType.h:174
virtual void virtual ExportText_Internal(FString &ValueStr, const void *PropertyValueOrContainer, EPropertyPointerType PointerType, const void *DefaultValue, UObject *Parent, int32 PortFlags, UObject *ExportRootScope=nullptr) const PURE_VIRTUAL(FProperty const TCHAR ImportText_Internal)(const TCHAR *Buffer, void *ContainerOrPropertyPtr, EPropertyPointerType PointerType, UObject *OwnerObject, int32 PortFlags, FOutputDevice *ErrorText) const PURE_VIRTUAL(FProperty
Definition UnrealType.h:719
virtual FString GetCPPType(FString *ExtendedTypeText=NULL, uint32 CPPExportFlags=0) const PURE_VIRTUAL(FProperty
Definition UnrealType.h:339
virtual bool Identical(const void *A, const void *B, uint32 PortFlags=0) const PURE_VIRTUAL(FProperty
Definition UnrealType.h:515
virtual void SerializeItem(FStructuredArchive::FSlot Slot, void *Value, void const *Defaults=NULL) const PURE_VIRTUAL(FProperty virtual COREUOBJECT_API boo NetSerializeItem)(FArchive &Ar, UPackageMap *Map, void *Data, TArray< uint8 > *MetaData=NULL) const
Definition UnrealType.h:582
Definition UObjectGlobals.h:2492
Definition StructuredArchiveSlots.h:52
Definition Array.h:670
Definition PropertyTypeName.h:151
Definition PropertyTypeName.h:46
Definition Class.h:2791
Definition Class.h:181
Definition Object.h:95
Definition CoreNet.h:191
Definition Class.h:480
Definition UObjectConstructInternal.h:15
Definition PropertyTag.h:38
Definition ObjectPtr.h:488