UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MemoryReader.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreTypes.h"
6#include "HAL/UnrealMemory.h"
8#include "Memory/MemoryView.h"
12
17{
18public:
25 virtual FString GetArchiveName() const override
26 {
27 return TEXT("FMemoryReader");
28 }
29
30 virtual int64 TotalSize() override
31 {
32 return FMath::Min((int64)Bytes.Num(), LimitSize);
33 }
34
35 void Serialize( void* Data, int64 Num )
36 {
37 if (Num && !IsError())
38 {
39 // Only serialize if we have the requested amount of data
40 if (Offset + Num <= TotalSize())
41 {
42 FMemory::Memcpy( Data, &Bytes[(int32)Offset], Num );
43 Offset += Num;
44 }
45 else
46 {
47 SetError();
48 }
49 }
50 }
51
52 explicit FMemoryReader( const TArray<uint8>& InBytes, bool bIsPersistent = false )
53 : Bytes (InBytes)
54 , LimitSize(INT64_MAX)
55 {
56 this->SetIsLoading(true);
57 this->SetIsPersistent(bIsPersistent);
58 }
59
62 {
63 LimitSize = NewLimitSize;
64 }
65
66private:
67 const TArray<uint8>& Bytes;
68 int64 LimitSize;
69};
70
75{
76public:
83 virtual FString GetArchiveName() const override
84 {
85 return TEXT("FMemoryReaderView");
86 }
87
88 virtual int64 TotalSize() override
89 {
90 return FMath::Min(static_cast<int64>(Bytes.GetSize()), LimitSize);
91 }
92
93 void Serialize(void* Data, int64 Num)
94 {
95 if (Num && !IsError())
96 {
97 // Only serialize if we have the requested amount of data
98 if (Offset + Num <= TotalSize())
99 {
100 FMutableMemoryView(Data, static_cast<uint64>(Num)).CopyFrom(Bytes.Mid(Offset, Num));
101 Offset += Num;
102 }
103 else
104 {
105 SetError();
106 }
107 }
108 }
109
110 explicit FMemoryReaderView(TArrayView<const uint8> InBytes, bool bIsPersistent = false)
111 : FMemoryReaderView(MakeMemoryView(InBytes), bIsPersistent)
112 {
113 }
114
115 explicit FMemoryReaderView(FMemoryView InBytes, bool bIsPersistent = false)
116 : Bytes(InBytes)
117 , LimitSize(INT64_MAX)
118 {
119 this->SetIsLoading(true);
120 this->SetIsPersistent(bIsPersistent);
121 }
122
125 {
126 LimitSize = NewLimitSize;
127 }
128
129private:
130 FMemoryView Bytes;
131 int64 LimitSize;
132};
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
TMemoryView< void > FMutableMemoryView
Definition MemoryFwd.h:14
constexpr TMemoryView< void > MakeMemoryView(void *Data, uint64 Size)
Definition MemoryView.h:257
@ Num
Definition MetalRHIPrivate.h:234
virtual CORE_API void SetIsPersistent(bool bInIsPersistent)
Definition Archive.cpp:1553
virtual CORE_API void SetIsLoading(bool bInIsLoading)
Definition Archive.cpp:1513
CORE_API void SetError()
Definition Archive.cpp:314
UE_FORCEINLINE_HINT bool IsError() const
Definition Archive.h:362
Definition MemoryArchive.h:15
int64 Offset
Definition MemoryArchive.h:68
Definition MemoryReader.h:75
virtual int64 TotalSize() override
Definition MemoryReader.h:88
void SetLimitSize(int64 NewLimitSize)
Definition MemoryReader.h:124
FMemoryReaderView(FMemoryView InBytes, bool bIsPersistent=false)
Definition MemoryReader.h:115
void Serialize(void *Data, int64 Num)
Definition MemoryReader.h:93
virtual FString GetArchiveName() const override
Definition MemoryReader.h:83
FMemoryReaderView(TArrayView< const uint8 > InBytes, bool bIsPersistent=false)
Definition MemoryReader.h:110
Definition MemoryReader.h:17
void SetLimitSize(int64 NewLimitSize)
Definition MemoryReader.h:61
FMemoryReader(const TArray< uint8 > &InBytes, bool bIsPersistent=false)
Definition MemoryReader.h:52
virtual int64 TotalSize() override
Definition MemoryReader.h:30
void Serialize(void *Data, int64 Num)
Definition MemoryReader.h:35
virtual FString GetArchiveName() const override
Definition MemoryReader.h:25
Definition ArrayView.h:139
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
TMemoryView Mid(uint64 InOffset, uint64 InSize=TNumericLimits< uint64 >::Max()) const
Definition MemoryView.h:115
TMemoryView CopyFrom(FMemoryView InView) const
Definition MemoryView.h:216
constexpr uint64 GetSize() const
Definition MemoryView.h:74
static UE_FORCEINLINE_HINT void * Memcpy(void *Dest, const void *Src, SIZE_T Count)
Definition UnrealMemory.h:160