UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
UnrealNames.cpp File Reference
#include "UObject/UnrealNames.h"
#include "UObject/NameBatchSerialization.h"
#include "Async/Async.h"
#include "Misc/AssertionMacros.h"
#include "Misc/MessageDialog.h"
#include "Misc/OutputDeviceHelper.h"
#include "Misc/Paths.h"
#include "Math/NumericLimits.h"
#include "Math/UnrealMathUtility.h"
#include "HAL/UnrealMemory.h"
#include "Templates/UnrealTemplate.h"
#include "Misc/CString.h"
#include "Misc/Crc.h"
#include "Misc/StringBuilder.h"
#include "Misc/TransactionallySafeRWLock.h"
#include "Containers/UnrealString.h"
#include "Containers/Utf8String.h"
#include "UObject/NameTypes.h"
#include "Logging/LogMacros.h"
#include "Misc/ByteSwap.h"
#include "UObject/ObjectVersion.h"
#include "HAL/ThreadSafeCounter.h"
#include "Misc/ScopeRWLock.h"
#include "ProfilingDebugging/StringsTrace.h"
#include "ProfilingDebugging/MetadataTrace.h"
#include "Containers/Set.h"
#include "Internationalization/Text.h"
#include "Internationalization/TextChar.h"
#include "Internationalization/Internationalization.h"
#include "Misc/OutputDeviceRedirector.h"
#include "HAL/FileManager.h"
#include "HAL/IConsoleManager.h"
#include "HAL/LowLevelMemTracker.h"
#include "Serialization/MemoryImage.h"
#include "Serialization/MemoryReader.h"
#include "Serialization/MemoryWriter.h"
#include "Hash/Blake3.h"
#include "Hash/CityHash.h"
#include "Templates/AlignmentTemplates.h"
#include "Templates/Greater.h"
#include "Misc/AsciiSet.h"
#include "AutoRTFM.h"
#include "UObject/UnrealNames.inl"
#include "Containers/StackTracker.h"

Classes

struct  FNameEntryIds
 
union  FNameBuffer
 
struct  FNameStringView
 
struct  FDefaultNameStore
 
struct  FNameEntryHandle
 
class  TNameAtomicBitSet< NumBits >
 
struct  FNameSlot
 
struct  FNumberedEntry
 
class  FNameEntryAllocator
 
struct  FNameHash
 
struct  FNameValue< Sensitivity >
 
struct  FNullScopeLock
 
struct  FNameLoad< Sensitivity >
 
class  FNamePoolShardBase
 
class  FNamePoolShard< Sensitivity >
 
class  FNamePool
 
struct  FNameAnsiStringView
 
struct  FNameUtf8StringViewWithWidth
 
struct  FWideStringViewWithWidth
 
struct  FNameHelper
 
struct  FNameSerializedView
 
struct  FSerializedNameHeader
 
struct  FShardTarget
 
struct  FNameBatchLoader
 
struct  FNameBatchAsyncLoader
 
struct  FSampleFNameChurn
 
struct  UE::Name::Private::FOutputDeviceWrapper
 

Namespaces

namespace  UE
 
namespace  UE::Name
 
namespace  UE::Name::Private
 

Macros

#define USE_FNAME_MMAP   0
 
#define REGISTER_NAME(num, name)   case EName::name: return TEXT(PREPROCESSOR_TO_STRING(name));
 
#define UE_FNAME_POOL_INITIAL_SLOT_BITS   8
 
#define REGISTER_NAME(num, name)   ENameToEntry[num] = Store(FNameStringView(#name, FCStringAnsi::Strlen(#name)));
 

Typedefs

using FNameStore = FDefaultNameStore
 
using FNameComparisonValue = FNameValue< ENameCase::IgnoreCase >
 
using FNameComparisonLoad = FNameLoad< ENameCase::IgnoreCase >
 
using FShardTargetArray = FShardTarget[FNamePoolShards]
 

Functions

PRAGMA_DISABLE_UNSAFE_TYPECAST_WARNINGS DEFINE_LOG_CATEGORY_STATIC (LogUnrealNames, Log, All)
 
void UE::Name::Private::ListFNames (const TArray< FString > &, UWorld *, FOutputDevice &)
 
void UE::Name::Private::DumpFNames (const TArray< FString > &, UWorld *, FOutputDevice &)
 
void UE::Name::Private::ListNumberedFNames (const TArray< FString > &, UWorld *, FOutputDevice &)
 
void UE::Name::Private::DumpNumberedFNames (const TArray< FString > &, UWorld *, FOutputDevice &)
 
void UE::Name::Private::GetFNameStats (FOutputDevice &)
 
void UE::Name::Private::DumpHashCsv (FOutputDevice &)
 
FAutoConsoleCommandWithWorldArgsAndOutputDevice UE::Name::Private::CCListFNames (TEXT("FName.List"), TEXT("List all base FName strings to the output device. Pass -num=n to list the most recent n names."), FConsoleCommandWithWorldArgsAndOutputDeviceDelegate::CreateStatic(&ListFNames))
 
FAutoConsoleCommandWithWorldArgsAndOutputDevice UE::Name::Private::CCDumpFNames (TEXT("FName.Dump"), TEXT("Dump all base FName strings to a file. Pass -num=n to dump the most recent n names."), FConsoleCommandWithWorldArgsAndOutputDeviceDelegate::CreateStatic(&DumpFNames))
 
FAutoConsoleCommandWithWorldArgsAndOutputDevice UE::Name::Private::CCListNumberedFNames (TEXT("FName.ListNumbered"), TEXT("List all numbered FNames to the output devicce (only when UE_FNAME_OUTLINE_NUMBER is set). Pass -num=n to list the most recent n names."), FConsoleCommandWithWorldArgsAndOutputDeviceDelegate::CreateStatic(&ListNumberedFNames))
 
FAutoConsoleCommandWithWorldArgsAndOutputDevice UE::Name::Private::CCDumpNumberedFNames (TEXT("FName.DumpNumbered"), TEXT("Dump all numbered FNames to a file (only when UE_FNAME_OUTLINE_NUMBER is set). Pass -num=n to dump the most recent n names."), FConsoleCommandWithWorldArgsAndOutputDeviceDelegate::CreateStatic(&DumpNumberedFNames))
 
FAutoConsoleCommandWithOutputDevice UE::Name::Private::CCGetFNameStats (TEXT("FName.Stats"), TEXT("Write FName stats to the output device."), FConsoleCommandWithOutputDeviceDelegate::CreateStatic(&GetFNameStats))
 
FAutoConsoleCommandWithOutputDevice UE::Name::Private::CCDumpHashCsv (TEXT("FName.HashCsv"), TEXT("Write FName hash stats to a csv file."), FConsoleCommandWithOutputDeviceDelegate::CreateStatic(&DumpHashCsv))
 
const TCHARLexToString (EName Ename)
 
template<typename FromCharType , typename ToCharType >
ToCharTypeConvertInPlace (FromCharType *Str, uint32 Len)
 
template<>
WIDECHARConvertInPlace< ANSICHAR, WIDECHAR > (ANSICHAR *Str, uint32 Len)
 
template<>
ANSICHARConvertInPlace< WIDECHAR, ANSICHAR > (WIDECHAR *Str, uint32 Len)
 
template<ENameCase Sensitivity>
FORCEINLINE bool EqualsSameDimensions (FNameStringView A, FNameStringView B)
 
template<ENameCase Sensitivity>
FORCEINLINE bool Equals (FNameStringView A, FNameStringView B)
 
template<ENameCase Sensitivity>
bool EqualsSameDimensions (const FNameEntry &Entry, FNameStringView Name)
 
uint32 GetTypeHash (FNameEntryId Id)
 
FArchiveoperator<< (FArchive &Ar, FNameEntryId &Id)
 
template<class CharType >
FORCENOINLINE uint64 GenerateLowerCaseHash (const CharType *Str, uint32 Len)
 
template<class CharType >
FORCENOINLINE FNameHash HashLowerCase (const CharType *Str, uint32 Len)
 
template<ENameCase Sensitivity>
FNameHash HashName (FNameStringView Name)
 
template<>
FNameHash HashName< ENameCase::IgnoreCase > (FNameStringView Name)
 
template<>
FNameHash HashName< ENameCase::CaseSensitive > (FNameStringView Name)
 
FORCEINLINE TOptional< FNameEntryIdGetExistingComparisonId (const FNameComparisonValue &Value)
 
void CallNameCreationHook ()
 
const TCHARDebugFName (FNameEntryId Index)
 
const TCHARDebugFName (int32 Index, int32 Number)
 
const TCHARDebugFName (FName &Name)
 
FString LexToString (const FName &Name)
 
void AppendHash (FBlake3 &Builder, FName In)
 
FWideStringBuilderBaseoperator<< (FWideStringBuilderBase &Builder, FNameEntryId Id)
 
FUtf8StringBuilderBaseoperator<< (FUtf8StringBuilderBase &Builder, FNameEntryId Id)
 
template<typename CharType , int N>
void CheckLazyName (const CharType(&Literal)[N])
 
FArchiveoperator<< (FArchive &Ar, FNameEntrySerialized &E)
 
constexpr bool CanCastUtf16ToWideCharWithoutConversion ()
 
FNameSerializedView LoadNameHeader (const uint8 *&InOutIt)
 
FORCENOINLINE void ReserveNameBatch (uint32 NameDataBytes, uint32 HashDataBytes)
 
template<typename CharType >
FDisplayNameEntryId BatchLoadNameWithHash (const CharType *Str, uint32 Len, uint64 InHash)
 
void LoadNameBatch (TArray< FDisplayNameEntryId > &OutNames, TArrayView< const uint8 > NameData, TArrayView< const uint8 > HashData, ENameBatchLoadingFlags Flags)
 
TArray< FDisplayNameEntryIdLoadNameBatch (FArchive &Ar, ENameBatchLoadingFlags Flags)
 
TFunction< TArray< FDisplayNameEntryId >()> LoadNameBatchAsync (FArchive &Ar, uint32 MaxWorkers, ENameBatchLoadingFlags Flags)
 
bool ShouldReplicateAsInteger (EName Ename, const FName &Name)
 
void UE::Name::Private::DebugDumpInternal (bool bNumbered, int32 Num, FOutputDevice &Out)
 

Variables

bool GFNameUseMmap = false
 
constexpr uint32 FNamePoolShardBits = 8
 
constexpr uint32 FNamePoolShards = 1 << FNamePoolShardBits
 
constexpr uint32 FNamePoolInitialSlotBits = UE_FNAME_POOL_INITIAL_SLOT_BITS
 
constexpr uint32 FNamePoolInitialSlotsPerShard = 1 << FNamePoolInitialSlotBits
 
FSampleFNameChurn GGameThreadFNameChurnTracker
 

Macro Definition Documentation

◆ REGISTER_NAME [1/2]

#define REGISTER_NAME (   num,
  name 
)    case EName::name: return TEXT(PREPROCESSOR_TO_STRING(name));

◆ REGISTER_NAME [2/2]

#define REGISTER_NAME (   num,
  name 
)    ENameToEntry[num] = Store(FNameStringView(#name, FCStringAnsi::Strlen(#name)));

◆ UE_FNAME_POOL_INITIAL_SLOT_BITS

#define UE_FNAME_POOL_INITIAL_SLOT_BITS   8

◆ USE_FNAME_MMAP

#define USE_FNAME_MMAP   0

Typedef Documentation

◆ FNameComparisonLoad

◆ FNameComparisonValue

◆ FNameStore

◆ FShardTargetArray

Function Documentation

◆ AppendHash()

void AppendHash ( FBlake3 Builder,
FName  In 
)

◆ BatchLoadNameWithHash()

template<typename CharType >
FDisplayNameEntryId BatchLoadNameWithHash ( const CharType *  Str,
uint32  Len,
uint64  InHash 
)

◆ CallNameCreationHook()

void CallNameCreationHook ( )

◆ CanCastUtf16ToWideCharWithoutConversion()

constexpr bool CanCastUtf16ToWideCharWithoutConversion ( )
constexpr

◆ CheckLazyName()

template<typename CharType , int N>
void CheckLazyName ( const CharType(&)  Literal[N])

◆ ConvertInPlace()

ToCharType * ConvertInPlace ( FromCharType Str,
uint32  Len 
)

◆ ConvertInPlace< ANSICHAR, WIDECHAR >()

template<>
WIDECHAR * ConvertInPlace< ANSICHAR, WIDECHAR > ( ANSICHAR Str,
uint32  Len 
)

◆ ConvertInPlace< WIDECHAR, ANSICHAR >()

template<>
ANSICHAR * ConvertInPlace< WIDECHAR, ANSICHAR > ( WIDECHAR Str,
uint32  Len 
)

◆ DebugFName() [1/3]

const TCHAR * DebugFName ( FName Name)

Helper function that can be used inside the debuggers watch window. E.g. "DebugFName(Class->Name)".

Parameters
NameName to look up string for
Returns
Associated name

◆ DebugFName() [2/3]

const TCHAR * DebugFName ( FNameEntryId  Index)

Helper function that can be used inside the debuggers watch window. E.g. "DebugFName(Class->Name.Index)".

Parameters
IndexName index to look up string for
Returns
Associated name

◆ DebugFName() [3/3]

const TCHAR * DebugFName ( int32  Index,
int32  Number 
)

Helper function that can be used inside the debuggers watch window. E.g. "DebugFName(Class->Name.Index, Class->Name.Number)".

Parameters
IndexName index to look up string for
NumberInternal instance number of the FName to print (which is 1 more than the printed number)
Returns
Associated name

◆ DEFINE_LOG_CATEGORY_STATIC()

PRAGMA_DISABLE_UNSAFE_TYPECAST_WARNINGS DEFINE_LOG_CATEGORY_STATIC ( LogUnrealNames  ,
Log  ,
All   
)

◆ Equals()

template<ENameCase Sensitivity>
FORCEINLINE bool Equals ( FNameStringView  A,
FNameStringView  B 
)

◆ EqualsSameDimensions() [1/2]

template<ENameCase Sensitivity>
bool EqualsSameDimensions ( const FNameEntry Entry,
FNameStringView  Name 
)

◆ EqualsSameDimensions() [2/2]

template<ENameCase Sensitivity>
FORCEINLINE bool EqualsSameDimensions ( FNameStringView  A,
FNameStringView  B 
)

◆ GenerateLowerCaseHash()

template<class CharType >
FORCENOINLINE uint64 GenerateLowerCaseHash ( const CharType *  Str,
uint32  Len 
)

◆ GetExistingComparisonId()

FORCEINLINE TOptional< FNameEntryId > GetExistingComparisonId ( const FNameComparisonValue Value)

◆ GetTypeHash()

uint32 GetTypeHash ( FNameEntryId  Id)

◆ HashLowerCase()

template<class CharType >
FORCENOINLINE FNameHash HashLowerCase ( const CharType *  Str,
uint32  Len 
)

◆ HashName()

template<ENameCase Sensitivity>
FNameHash HashName ( FNameStringView  Name)

◆ HashName< ENameCase::CaseSensitive >()

◆ HashName< ENameCase::IgnoreCase >()

◆ LexToString() [1/2]

FString LexToString ( const FName Name)

◆ LexToString() [2/2]

const TCHAR * LexToString ( EName  Ename)

◆ LoadNameBatch() [1/2]

TArray< FDisplayNameEntryId > LoadNameBatch ( FArchive Ar,
ENameBatchLoadingFlags  Flags 
)

◆ LoadNameBatch() [2/2]

void LoadNameBatch ( TArray< FDisplayNameEntryId > &  OutNames,
TArrayView< const uint8 NameData,
TArrayView< const uint8 HashData,
ENameBatchLoadingFlags  Flags 
)

◆ LoadNameBatchAsync()

TFunction< TArray< FDisplayNameEntryId >()> LoadNameBatchAsync ( FArchive Ar,
uint32  MaxWorkers,
ENameBatchLoadingFlags  Flags 
)

◆ LoadNameHeader()

FNameSerializedView LoadNameHeader ( const uint8 *&  InOutIt)

◆ operator<<() [1/4]

FArchive & operator<< ( FArchive Ar,
FNameEntryId Id 
)

Serialize as process specific unstable int

◆ operator<<() [2/4]

FArchive & operator<< ( FArchive Ar,
FNameEntrySerialized E 
)

◆ operator<<() [3/4]

FUtf8StringBuilderBase & operator<< ( FUtf8StringBuilderBase Builder,
FNameEntryId  Id 
)

◆ operator<<() [4/4]

FWideStringBuilderBase & operator<< ( FWideStringBuilderBase Builder,
FNameEntryId  Id 
)

◆ ReserveNameBatch()

FORCENOINLINE void ReserveNameBatch ( uint32  NameDataBytes,
uint32  HashDataBytes 
)

◆ ShouldReplicateAsInteger()

bool ShouldReplicateAsInteger ( EName  Ename,
const FName Name 
)

Variable Documentation

◆ FNamePoolInitialSlotBits

constexpr uint32 FNamePoolInitialSlotBits = UE_FNAME_POOL_INITIAL_SLOT_BITS
constexpr

◆ FNamePoolInitialSlotsPerShard

constexpr uint32 FNamePoolInitialSlotsPerShard = 1 << FNamePoolInitialSlotBits
constexpr

◆ FNamePoolShardBits

constexpr uint32 FNamePoolShardBits = 8
constexpr

◆ FNamePoolShards

constexpr uint32 FNamePoolShards = 1 << FNamePoolShardBits
constexpr

◆ GFNameUseMmap

bool GFNameUseMmap = false

◆ GGameThreadFNameChurnTracker

FSampleFNameChurn GGameThreadFNameChurnTracker