9#include "Containers/Array.h"
11#include "Containers/Map.h"
28#include "Misc/Optional.h"
160 check(OptionalStorageQuota < StorageQuota || StorageQuota <= 0);
175 return OptionalStorageQuota;
195 return ShouldManageFile(Path);
205 uint32 KeyHash = GetTypeHash(Filename);
221 FileSizes.AddByHash(KeyHash, Filename, FileSize);
234 if (FileSizes.RemoveAndCopyValue(Filename, OldSize))
238 UsedQuota -= OldSize;
277 return CategoryStat{ CategoryName, UsedQuota, StorageQuota, OptionalStorageQuota, FileSizes, Directories };
319 bool ShouldManageFile(
const FString& Filename)
const
321 for (
const FString& Directory : Directories)
333 const FString CategoryName;
336 const int64 StorageQuota = -1;
337 const int64 OptionalStorageQuota = 0;
339 std::atomic<int64> UsedQuota{ 0 };
433 TryManageFileInternal(
OutFile);
443 TryManageFileInternal(
OutFile);
463 int32 CategoryIndex = 0;
466 if (Category.IsInCategory(
OutFile.FullFilename))
468 OutFile.Category = CategoryIndex;
477 OutFile.Category = Categories.GetDefaultCategoryIndex();
490 return Categories.GetCategories()[
File.Category].AddOrUpdateFile(
File.FullFilename, FileSize,
Flags);
500 return Categories.GetCategories()[
File.Category].RemoveFile(
File.FullFilename);
529 if (Category.IsInCategory(FullPath))
531 UsedSpace = Category.GetUsedSize();
533 Quota = Category.GetCategoryQuota();
549 UsedSpace = Category->GetUsedSize();
551 Quota = Category->GetCategoryQuota();
571 UsedSpace += Category.GetUsedSize();
572 RequiredSpace += Category.GetCategoryQuota();
590 return Categories.GetCategories()[
File.Category].IsCategoryFull();
600 CategoryStats.Add(Category.GetCategoryName(), Category.GetStat());
614 Result.Emplace(Category.GetStat());
640 FRootDirInfo RootDirectories;
647 int32 DefaultCategory = -1;
656 const FPersistentStorageCategory* GetDefaultCategory()
const {
return DefaultCategory >= 0 ? &Categories[DefaultCategory] :
nullptr; }
658 int32 GetDefaultCategoryIndex()
const {
return DefaultCategory; }
660 FCategoryInfo Categories;
662 static FCategoryInfo InitCategories();
693 if (!TryManageFile())
705 return FileHandle->
Tell();
720 return FileHandle->
Read(Destination, BytesToRead);
725 return FileHandle->
ReadAt(Destination, BytesToRead,
Offset);
730 if (!TryManageFile())
764 return FileHandle->
Size();
770 if (!TryManageFile())
793 if (!TryManageFile())
795 return FileHandle->
Truncate(NewSize);
804 if (NewSize <= FileSize)
807 FileSize = FileHandle->
Size();
820 FileSize = FileHandle->
Size();
840template<
class BaseClass>
844 static bool IsReady()
877 return BaseClass::DeleteFile(Filename);
886 bool bSuccess = BaseClass::DeleteFile(Filename);
899 return BaseClass::DeleteFiles(
Filenames);
917 if (!BaseClass::FileExists(
Filenames[i]))
935 return BaseClass::MoveFile(To, From);
959 bool bSuccess = BaseClass::MoveFile(To, From);
977 if (!this->FileExists(To))
1080 if (!this->FileExists(To))
constexpr auto MakeArrayView(OtherRangeType &&Other)
Definition ArrayView.h:873
#define ensureAlways( InExpression)
Definition AssertionMacros.h:466
#define check(expr)
Definition AssertionMacros.h:314
#define LowLevelFatalError(Format,...)
Definition AssertionMacros.h:554
#define verify(expr)
Definition AssertionMacros.h:319
void AsyncTask(ENamedThreads::Type Thread, TUniqueFunction< void()> Function)
Definition Async.cpp:54
bool bSuccess
Definition ConvexDecomposition3.cpp:819
FConfigCacheIni * GConfig
Definition CoreGlobals.cpp:54
@ INDEX_NONE
Definition CoreMiscDefines.h:150
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
DIRECTLINK_API Display
Definition DirectLinkLog.h:8
constexpr bool EnumHasAnyFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:35
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
void Init()
Definition LockFreeList.h:4
#define DECLARE_LOG_CATEGORY_EXTERN(CategoryName, DefaultVerbosity, CompileTimeVerbosity)
Definition LogMacros.h:361
#define UE_LOG(CategoryName, Verbosity, Format,...)
Definition LogMacros.h:270
const bool
Definition NetworkReplayStreaming.h:178
#define MAX_int64
Definition NumericLimits.h:26
decltype(auto) Visit(Func &&Callable, Variants &&... Args)
Definition TVariant.h:271
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
FRWLock Lock
Definition UnversionedPropertySerialization.cpp:921
uint32 Offset
Definition VulkanMemory.cpp:4033
bool IsReadyForUse()
Definition ConfigCacheIni.h:1268
Definition IPlatformFileManagedStorageWrapper.h:68
Definition IPlatformFileManagedStorageWrapper.h:667
virtual int64 Tell() override
Definition IPlatformFileManagedStorageWrapper.h:703
virtual int64 Size() override
Definition IPlatformFileManagedStorageWrapper.h:762
virtual ~FManagedStorageFileWriteHandle()
Definition IPlatformFileManagedStorageWrapper.h:691
virtual void ShrinkBuffers() override
Definition IPlatformFileManagedStorageWrapper.h:828
virtual bool SeekFromEnd(int64 NewPositionRelativeToEnd=0) override
Definition IPlatformFileManagedStorageWrapper.h:713
virtual bool Write(const uint8 *Source, int64 BytesToWrite) override
Definition IPlatformFileManagedStorageWrapper.h:728
virtual bool ReadAt(uint8 *Destination, int64 BytesToRead, int64 Offset) override
Definition IPlatformFileManagedStorageWrapper.h:723
FManagedStorageFileWriteHandle(IFileHandle *InFileHandle, FPersistentManagedFile InFile)
Definition IPlatformFileManagedStorageWrapper.h:685
virtual bool Truncate(int64 NewSize) override
Definition IPlatformFileManagedStorageWrapper.h:791
virtual bool Flush(const bool bFullFlush=false) override
Definition IPlatformFileManagedStorageWrapper.h:767
virtual bool Seek(int64 NewPosition) override
Definition IPlatformFileManagedStorageWrapper.h:708
virtual bool Read(uint8 *Destination, int64 BytesToRead) override
Definition IPlatformFileManagedStorageWrapper.h:718
Definition IPlatformFileManagedStorageWrapper.h:114
FManagedStorageScopeFileLock(FPersistentManagedFile InManagedFile)
Definition IPlatformFileManagedStorageWrapper.h:116
FManagedStorageScopeFileLock(const FManagedStorageScopeFileLock &)=delete
~FManagedStorageScopeFileLock()
Definition IPlatformFileManagedStorageWrapper.h:122
FManagedStorageScopeFileLock & operator=(const FManagedStorageScopeFileLock &)=delete
CORE_API void Unlock()
Definition IPlatformFileManagedStorageWrapper.cpp:181
FManagedStorageScopeFileLock & operator=(FManagedStorageScopeFileLock &&InOther)=delete
FManagedStorageScopeFileLock(FManagedStorageScopeFileLock &&InOther)=delete
static CORE_API FString ConvertRelativePathToFull(const FString &InPath)
Definition Paths.cpp:1586
Definition IPlatformFileManagedStorageWrapper.h:350
FPersistentManagedFile TryManageFile(FString &&Filename)
Definition IPlatformFileManagedStorageWrapper.h:438
int64 GetTotalUsedSize() const
Definition IPlatformFileManagedStorageWrapper.h:503
bool IsInitialized() const
Definition IPlatformFileManagedStorageWrapper.h:578
EPersistentStorageManagerFileSizeFlags AddOrUpdateFile(const FPersistentManagedFile &File, const int64 FileSize, EPersistentStorageManagerFileSizeFlags Flags=EPersistentStorageManagerFileSizeFlags::None)
Definition IPlatformFileManagedStorageWrapper.h:482
static bool IsReady()
Definition IPlatformFileManagedStorageWrapper.h:352
TMap< FString, FPersistentStorageCategory::CategoryStat > GenerateCategoryStats() const
Definition IPlatformFileManagedStorageWrapper.h:593
void Initialize()
Definition IPlatformFileManagedStorageWrapper.h:366
static CORE_API FPersistentStorageManager & Get()
Definition IPlatformFileManagedStorageWrapper.cpp:200
bool GetPersistentStorageUsageByCategory(const FString &InCategory, int64 &UsedSpace, int64 &RemainingSpace, int64 &Quota, int64 *OptionalQuota=nullptr)
Definition IPlatformFileManagedStorageWrapper.h:544
FPersistentStorageManager()
Definition IPlatformFileManagedStorageWrapper.cpp:207
TArrayView< const FString > GetRootDirectories() const
Definition IPlatformFileManagedStorageWrapper.h:622
bool IsCategoryForFileFull(const FPersistentManagedFile &File) const
Definition IPlatformFileManagedStorageWrapper.h:583
FPersistentManagedFile TryManageFile(const FString &Filename)
Definition IPlatformFileManagedStorageWrapper.h:428
TOptional< FPersistentStorageCategory::CategoryStat > GetCategoryStat(const FString &InCategory) const
Definition IPlatformFileManagedStorageWrapper.h:606
bool GetPersistentStorageSize(int64 &UsedSpace, int64 &RequiredSpace, int64 &OptionalSpace) const
Returns any additional required free space and optional free space.
Definition IPlatformFileManagedStorageWrapper.h:567
bool GetPersistentStorageUsage(FString Path, int64 &UsedSpace, int64 &RemainingSpace, int64 &Quota, int64 *OptionalQuota=nullptr)
Definition IPlatformFileManagedStorageWrapper.h:523
bool TryManageFile(FPersistentManagedFile &InOutFile)
Definition IPlatformFileManagedStorageWrapper.h:448
bool RemoveFileFromManager(FPersistentManagedFile &File)
Definition IPlatformFileManagedStorageWrapper.h:493
Definition ScopeRWLock.h:93
Definition ScopeLock.h:141
Definition ScopeRWLock.h:114
Definition GenericPlatformFile.h:117
virtual bool ReadAt(uint8 *Destination, int64 BytesToRead, int64 Offset)=0
virtual void ShrinkBuffers()
Definition GenericPlatformFile.h:179
virtual bool Flush(const bool bFullFlush=false)=0
virtual bool Seek(int64 NewPosition)=0
virtual bool Read(uint8 *Destination, int64 BytesToRead)=0
virtual bool Truncate(int64 NewSize)=0
virtual bool Write(const uint8 *Source, int64 BytesToWrite)=0
virtual bool SeekFromEnd(int64 NewPositionRelativeToEnd=0)=0
virtual CORE_API int64 Size()
Definition GenericPlatformFile.cpp:578
Definition ArrayView.h:139
UE_FORCEINLINE_HINT void Reserve(SizeType Number)
Definition Array.h:3016
Definition UnrealString.h.inl:34
Definition UniquePtr.h:107
UE_REWRITE constexpr auto FindBy(RangeType &&Range, const ValueType &Value, ProjectionType Proj) -> decltype(AlgoImpl::FindBy(Forward< RangeType >(Range), Value, MoveTemp(Proj)))
Definition Find.h:68
UE_REWRITE constexpr auto FindByPredicate(RangeType &&Range, PredicateType Pred) -> decltype(AlgoImpl::FindByPredicate(Forward< RangeType >(Range), MoveTemp(Pred)))
Definition Find.h:83
@ AnyBackgroundThreadNormalTask
Definition TaskGraphInterfaces.h:106
Definition IPlatformFileManagedStorageWrapper.h:42
CORE_API bool IsUnderDirectory(const FString &InPath, const FString &InDirectory)
Definition IPlatformFileManagedStorageWrapper.cpp:163
static CORE_API bool IsInitialized()
Definition CommandLine.cpp:41
Definition GenericPlatformFile.h:195
Definition IPlatformFileManagedStorageWrapper.h:50
int32 Category
Definition IPlatformFileManagedStorageWrapper.h:52
void Clear()
Definition IPlatformFileManagedStorageWrapper.h:61
bool HasFailedTryToManage() const
Definition IPlatformFileManagedStorageWrapper.h:58
FString FullFilename
Definition IPlatformFileManagedStorageWrapper.h:51
bool IsValid() const
Definition IPlatformFileManagedStorageWrapper.h:54
void SetHasFailedTryToManage()
Definition IPlatformFileManagedStorageWrapper.h:59
Definition IPlatformFileManagedStorageWrapper.h:252
int64 UsedSize
Definition IPlatformFileManagedStorageWrapper.h:266
TMap< FString, int64 > FileSizes
Definition IPlatformFileManagedStorageWrapper.h:269
FString Print() const
Definition IPlatformFileManagedStorageWrapper.h:253
int64 TotalSize
Definition IPlatformFileManagedStorageWrapper.h:267
int64 TotalOptionalSize
Definition IPlatformFileManagedStorageWrapper.h:268
FString CategoryName
Definition IPlatformFileManagedStorageWrapper.h:265
TArray< FString > Directories
Definition IPlatformFileManagedStorageWrapper.h:270
Definition IPlatformFileManagedStorageWrapper.h:152
bool IsInCategory(const FString &Path) const
Definition IPlatformFileManagedStorageWrapper.h:193
const FString & GetCategoryName() const
Definition IPlatformFileManagedStorageWrapper.h:163
int64 GetUsedSize() const
Definition IPlatformFileManagedStorageWrapper.h:178
int64 GetCategoryOptionalQuota() const
Definition IPlatformFileManagedStorageWrapper.h:173
FPersistentStorageCategory(FString InCategoryName, TArray< FString > InDirectories, const int64 InQuota, const int64 InOptionalQuota)
Definition IPlatformFileManagedStorageWrapper.h:154
int64 GetCategoryQuota() const
Definition IPlatformFileManagedStorageWrapper.h:168
FManagedStorageFileLockRegistry & GetLockRegistry()
Definition IPlatformFileManagedStorageWrapper.h:280
CategoryStat GetStat() const
Definition IPlatformFileManagedStorageWrapper.h:274
EPersistentStorageManagerFileSizeFlags AddOrUpdateFile(const FString &Filename, const int64 FileSize, EPersistentStorageManagerFileSizeFlags Flags)
Definition IPlatformFileManagedStorageWrapper.h:203
bool RemoveFile(const FString &Filename)
Definition IPlatformFileManagedStorageWrapper.h:229
const TArray< FString > & GetDirectories() const
Definition IPlatformFileManagedStorageWrapper.h:249
bool IsCategoryFull() const
Definition IPlatformFileManagedStorageWrapper.h:198
int64 GetAvailableSize() const
Definition IPlatformFileManagedStorageWrapper.h:183
Definition Optional.h:131