UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
CompressedBuffer.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "HAL/Platform.h"
8#include "Memory/MemoryFwd.h"
10#include "Misc/EnumClassFlags.h"
13
14class FArchive;
15struct FIoHash;
16
17namespace FOodleDataCompression { enum class ECompressionLevel : int8; }
18namespace FOodleDataCompression { enum class ECompressor : uint8; }
19
20namespace UE::CompressedBuffer::Private { struct FHeader; }
21
24
26{
27 None = 0,
28
34 IntermediateBuffer = 1 << 0,
35};
36
38
50{
51public:
59
76 ECompressedBufferCompressionLevel CompressionLevel,
77 uint64 BlockSize = 0);
81 ECompressedBufferCompressionLevel CompressionLevel,
82 uint64 BlockSize = 0);
83
89 [[nodiscard]] CORE_API static FCompressedBuffer FromCompressed(const FCompositeBuffer& CompressedData);
91 [[nodiscard]] CORE_API static FCompressedBuffer FromCompressed(const FSharedBuffer& CompressedData);
93
104
106 CORE_API void Save(FArchive& Ar) const;
107
109 inline void Reset() { CompressedData.Reset(); }
110
112 [[nodiscard]] inline explicit operator bool() const { return !IsNull(); }
113
115 [[nodiscard]] inline bool IsNull() const { return CompressedData.IsNull(); }
116
118 [[nodiscard]] inline bool IsOwned() const { return CompressedData.IsOwned(); }
119
121 [[nodiscard]] inline FCompressedBuffer MakeOwned() const & { return FromCompressed(CompressedData.MakeOwned()); }
122 [[nodiscard]] inline FCompressedBuffer MakeOwned() && { return FromCompressed(MoveTemp(CompressedData).MakeOwned()); }
123
125 [[nodiscard]] inline const FCompositeBuffer& GetCompressed() const & { return CompressedData; }
126 [[nodiscard]] inline FCompositeBuffer GetCompressed() && { return MoveTemp(CompressedData); }
127
130
133
136
149 uint64& OutBlockSize) const;
150
158
166
169
170private:
171 FCompositeBuffer CompressedData;
172};
173
175
177{
178
180struct FDecoderContext
181{
183 uint64 HeaderOffset = MAX_uint64;
185 uint64 HeaderSize = 0;
187 uint32 HeaderCrc32 = 0;
189 uint32 RawBlockIndex = MAX_uint32;
190
192 FUniqueBuffer Header;
194 FUniqueBuffer RawBlock;
196 FUniqueBuffer CompressedBlock;
197};
198
199} // UE::CompressedBuffer::Private
200
214{
215public:
218
220 CORE_API explicit FCompressedBufferReader(FArchive& Archive);
221
224
226 CORE_API void ResetBuffers();
227
229 CORE_API void ResetSource();
230
231 CORE_API void SetSource(FArchive& Archive);
233
234 [[nodiscard]] inline bool HasSource() const { return SourceArchive || SourceBuffer; }
235
238
241
244
258
268
279 [[nodiscard]] CORE_API FSharedBuffer Decompress(uint64 RawOffset = 0, uint64 RawSize = MAX_uint64);
281
282private:
284
285 FArchive* SourceArchive = nullptr;
286 const FCompressedBuffer* SourceBuffer = nullptr;
287 UE::CompressedBuffer::Private::FDecoderContext Context;
288};
289
CORE_API FArchive & operator<<(FArchive &Ar, FCompressedBuffer &Buffer)
Definition CompressedBuffer.cpp:1171
ECompressedBufferDecompressFlags
Definition CompressedBuffer.h:26
FPlatformTypes::int8 int8
An 8-bit signed integer.
Definition Platform.h:1121
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
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
const bool
Definition NetworkReplayStreaming.h:178
#define MAX_uint32
Definition NumericLimits.h:21
#define MAX_uint64
Definition NumericLimits.h:22
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
Definition CompositeBuffer.h:27
CORE_API void Reset()
Definition CompositeBuffer.cpp:18
CORE_API FCompositeBuffer MakeOwned() const &
Definition CompositeBuffer.cpp:33
CORE_API bool IsOwned() const
Definition CompositeBuffer.cpp:28
bool IsNull() const
Definition CompositeBuffer.h:68
Definition CompressedBuffer.h:292
~FCompressedBufferReaderSourceScope()
Definition CompressedBuffer.h:306
FCompressedBufferReaderSourceScope(FCompressedBufferReader &InReader, const FCompressedBuffer &InBuffer)
Definition CompressedBuffer.h:300
FCompressedBufferReaderSourceScope(FCompressedBufferReader &InReader, FArchive &InArchive)
Definition CompressedBuffer.h:294
Definition CompressedBuffer.h:214
CORE_API void ResetBuffers()
Definition CompressedBuffer.cpp:1196
CORE_API bool TryGetCompressParameters(ECompressedBufferCompressor &OutCompressor, ECompressedBufferCompressionLevel &OutCompressionLevel, uint64 &OutBlockSize)
Definition CompressedBuffer.cpp:1271
CORE_API FCompositeBuffer DecompressToComposite(uint64 RawOffset=0, uint64 RawSize=MAX_uint64)
Definition CompressedBuffer.cpp:1340
CORE_API bool TryDecompressTo(FMutableMemoryView RawView, uint64 RawOffset=0, ECompressedBufferDecompressFlags Flags=ECompressedBufferDecompressFlags::None)
Definition CompressedBuffer.cpp:1286
bool HasSource() const
Definition CompressedBuffer.h:234
CORE_API uint64 GetCompressedSize()
Definition CompressedBuffer.cpp:1235
CORE_API void ResetSource()
Definition CompressedBuffer.cpp:1206
CORE_API uint64 GetRawSize()
Definition CompressedBuffer.cpp:1247
CORE_API void SetSource(FArchive &Archive)
Definition CompressedBuffer.cpp:1213
FCompressedBufferReader()=default
CORE_API FIoHash GetRawHash()
Definition CompressedBuffer.cpp:1259
Definition CompressedBuffer.h:50
const FCompositeBuffer & GetCompressed() const &
Definition CompressedBuffer.h:125
CORE_API uint64 GetCompressedSize() const
Definition CompressedBuffer.cpp:1114
CORE_API FIoHash GetRawHash() const
Definition CompressedBuffer.cpp:1124
FCompressedBuffer MakeOwned() const &
Definition CompressedBuffer.h:121
bool IsNull() const
Definition CompressedBuffer.h:115
static CORE_API const FCompressedBuffer Null
Definition CompressedBuffer.h:168
static CORE_API FCompressedBuffer FromCompressed(const FCompositeBuffer &CompressedData)
Definition CompressedBuffer.cpp:1047
FCompressedBuffer MakeOwned() &&
Definition CompressedBuffer.h:122
FCompositeBuffer GetCompressed() &&
Definition CompressedBuffer.h:126
void Reset()
Definition CompressedBuffer.h:109
CORE_API FSharedBuffer Decompress() const
Definition CompressedBuffer.cpp:1151
CORE_API uint64 GetRawSize() const
Definition CompressedBuffer.cpp:1119
CORE_API bool TryGetCompressParameters(ECompressedBufferCompressor &OutCompressor, ECompressedBufferCompressionLevel &OutCompressionLevel, uint64 &OutBlockSize) const
Definition CompressedBuffer.cpp:1129
bool IsOwned() const
Definition CompressedBuffer.h:118
CORE_API bool TryDecompressTo(FMutableMemoryView RawView, ECompressedBufferDecompressFlags Flags=ECompressedBufferDecompressFlags::None) const
Definition CompressedBuffer.cpp:1142
CORE_API FCompositeBuffer DecompressToComposite() const
Definition CompressedBuffer.cpp:1160
Definition SharedBuffer.h:341
Definition SharedBuffer.h:218
Definition OodleDataCompression.cpp:28
ECompressor
Definition OodleDataCompression.h:49
ECompressionLevel
Definition OodleDataCompression.h:94
Definition CompressedBuffer.cpp:25
Definition IoHash.h:33
Definition CompressedBuffer.cpp:51