Files
UnrealEngine/Engine/Source/Editor/UnrealEd/Private/Cooker/CookPackageSplitter.cpp
2025-05-18 13:04:45 +08:00

67 lines
1.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "CookPackageSplitter.h"
#if WITH_EDITOR
#include "Misc/PackageName.h"
#include "Misc/Paths.h"
#include "Misc/PathViews.h"
const TCHAR* ICookPackageSplitter::GetGeneratedPackageSubPath()
{
return FPackageName::GetGeneratedPackageSubPath();
}
bool ICookPackageSplitter::IsUnderGeneratedPackageSubPath(FStringView FileOrLongPackagePath)
{
return FPackageName::IsUnderGeneratedPackageSubPath(FileOrLongPackagePath);
}
FString ICookPackageSplitter::ConstructGeneratedPackageName(FName OwnerPackageName, FStringView RelPath,
FStringView GeneratedRootOverride)
{
FString PackageRoot;
if (GeneratedRootOverride.IsEmpty())
{
PackageRoot = OwnerPackageName.ToString();
}
else
{
PackageRoot = GeneratedRootOverride;
}
return FPaths::RemoveDuplicateSlashes(FString::Printf(TEXT("/%s/%s/%.*s"),
*PackageRoot, GetGeneratedPackageSubPath(), RelPath.Len(), RelPath.GetData()));
}
namespace UE::Cook::Private
{
static TLinkedList<FRegisteredCookPackageSplitter*>* GRegisteredCookPackageSplitterList = nullptr;
FRegisteredCookPackageSplitter::FRegisteredCookPackageSplitter()
: GlobalListLink(this)
{
GlobalListLink.LinkHead(GetRegisteredList());
}
FRegisteredCookPackageSplitter::~FRegisteredCookPackageSplitter()
{
GlobalListLink.Unlink();
}
TLinkedList<FRegisteredCookPackageSplitter*>*& FRegisteredCookPackageSplitter::GetRegisteredList()
{
return GRegisteredCookPackageSplitterList;
}
void FRegisteredCookPackageSplitter::ForEach(TFunctionRef<void(FRegisteredCookPackageSplitter*)> Func)
{
for (TLinkedList<FRegisteredCookPackageSplitter*>::TIterator It(GetRegisteredList()); It; It.Next())
{
Func(*It);
}
}
}
#endif