Files
2025-07-14 22:24:27 +08:00

47 lines
988 B
C++

#include "UnrealArchiveFileSource.h"
UnrealArchiveFileSource::UnrealArchiveFileSource(
const TSharedRef<FArchive, ESPMode::ThreadSafe> inArchive)
: archive(inArchive)
{
}
int64_t UnrealArchiveFileSource::getAvailableSize(uint64_t offset)
{
FScopeLock lockCS(&threadLock);
return getSize() - offset;
}
int64_t UnrealArchiveFileSource::getSize()
{
FScopeLock lockCS(&threadLock);
return archive->TotalSize();
}
int64_t UnrealArchiveFileSource::readAt(uint64_t position, void *buffer, uint64_t readSize)
{
FScopeLock lockCS(&threadLock);
int64_t fileSize = archive->TotalSize();
if (fileSize < position)
{
return -1; // EOF
}
int64_t curPos = archive->Tell();
if (curPos != position)
{
archive->Seek(position);
}
if (position + readSize > fileSize)
{
readSize = fileSize - position;
}
if (readSize > 0)
{
archive->Serialize(buffer, readSize);
}
return readSize;
}