EM_Task/CoreUObject/Private/UObject/PackageId.cpp

29 lines
827 B
C++
Raw Permalink Normal View History

2026-02-13 16:18:33 +08:00
// Copyright Epic Games, Inc. All Rights Reserved.
#include "UObject/PackageId.h"
#include "Serialization/StructuredArchive.h"
FPackageId FPackageId::FromName(const FName& Name)
{
TCHAR NameStr[FName::StringBufferSize];
uint32 NameLen = Name.ToString(NameStr);
for (uint32 I = 0; I < NameLen; ++I)
{
NameStr[I] = TChar<TCHAR>::ToLower(NameStr[I]);
}
uint64 Hash = CityHash64(reinterpret_cast<const char*>(NameStr), NameLen * sizeof(TCHAR));
checkf(Hash != InvalidId, TEXT("Package name hash collision \"%s\" and InvalidId"), NameStr);
return FPackageId(Hash);
}
FArchive& operator<<(FArchive& Ar, FPackageId& Value)
{
FStructuredArchiveFromArchive(Ar).GetSlot() << Value;
return Ar;
}
void operator<<(FStructuredArchiveSlot Slot, FPackageId& Value)
{
Slot << Value.Id;
}