44 lines
1.1 KiB
C
44 lines
1.1 KiB
C
|
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
||
|
|
|
||
|
|
#pragma once
|
||
|
|
|
||
|
|
#include "CoreTypes.h"
|
||
|
|
#include "Misc/AssertionMacros.h"
|
||
|
|
#include "HAL/UnrealMemory.h"
|
||
|
|
#include "Serialization/BufferReader.h"
|
||
|
|
#include "Serialization/BulkData.h"
|
||
|
|
#include "Containers/UnrealString.h"
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Custom archive class for reading directly from bulk data.
|
||
|
|
*/
|
||
|
|
class FBulkDataReader final: public FBufferReaderBase
|
||
|
|
{
|
||
|
|
public:
|
||
|
|
FBulkDataReader(FByteBulkData& InBulkData, bool bIsPersistent = false)
|
||
|
|
: FBufferReaderBase(InBulkData.Lock(LOCK_READ_ONLY), InBulkData.GetBulkDataSize(), false, bIsPersistent), BulkData(InBulkData)
|
||
|
|
{
|
||
|
|
}
|
||
|
|
|
||
|
|
~FBulkDataReader()
|
||
|
|
{
|
||
|
|
BulkData.Unlock();
|
||
|
|
}
|
||
|
|
|
||
|
|
using FArchive::operator<<; // For visibility of the overloads we don't override
|
||
|
|
|
||
|
|
virtual FArchive& operator<<(class FName& Name) override
|
||
|
|
{
|
||
|
|
// FNames are serialized as strings in BulkData
|
||
|
|
FString StringName;
|
||
|
|
*this << StringName;
|
||
|
|
Name = FName(*StringName);
|
||
|
|
return *this;
|
||
|
|
}
|
||
|
|
|
||
|
|
virtual FString GetArchiveName() const { return TEXT("FBulkDataReader"); }
|
||
|
|
|
||
|
|
protected:
|
||
|
|
FByteBulkData& BulkData;
|
||
|
|
};
|