UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
BufferWriter.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"
7#include "HAL/UnrealMemory.h"
11#include "Logging/LogMacros.h"
12#include "Misc/EnumClassFlags.h"
13#include "CoreGlobals.h"
14
16{
17 None = 0x0, // No Flags
18 TakeOwnership = 0x1, // Archive will take ownership of the passed-in memory and free it on destruction
19 AllowResize = 0x2, // Allow overflow by resizing buffer
20};
21
23
28class FBufferWriter final : public FArchive
29{
30public:
47
49 {
50 Close();
51 }
52 bool Close()
53 {
54 if (bFreeOnClose)
55 {
57 WriterData = nullptr;
58 }
59 return !IsError();
60 }
61 void Serialize(void* Data, int64 Num)
62 {
64 if (NumBytesToAdd > 0)
65 {
66 if (bAllowResize)
67 {
70 {
71 UE_LOG(LogSerialization, Fatal, TEXT("FBufferWriter does not support data larger than 2GB. Archive name: %s."), *GetArchiveName());
72 }
73
74 WriterData = FMemory::Realloc(WriterData, NewArrayCount);
76 }
77 else
78 {
79 UE_LOG(LogSerialization, Fatal, TEXT("FBufferWriter overflowed. Archive name: %s."), *GetArchiveName());
80 }
81 }
82
83 check(WriterPos >= 0);
86 WriterPos += Num;
87 }
89 {
90 return WriterPos;
91 }
93 {
94 return WriterSize;
95 }
97 {
98 check(InPos >= 0);
101 }
102 bool AtEnd()
103 {
104 return WriterPos >= WriterSize;
105 }
106 template <typename Type>
108 {
109 check(WriterPos >= 0);
110 check((WriterPos + (int64)sizeof(Type)) <= WriterSize);
111 Type* Data = reinterpret_cast<Type*>((uint8*)WriterData + WriterPos);
112 WriterPos += sizeof(Type);
113 return Data;
114 }
121 virtual FString GetArchiveName() const { return TEXT("FBufferWriter"); }
122
124 {
125 return WriterData;
126 }
127protected:
133};
#define check(expr)
Definition AssertionMacros.h:314
EBufferWriterFlags
Definition BufferWriter.h:16
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
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
#define UE_LOG(CategoryName, Verbosity, Format,...)
Definition LogMacros.h:270
@ Num
Definition MetalRHIPrivate.h:234
#define MAX_int32
Definition NumericLimits.h:25
uint32 Size
Definition VulkanMemory.cpp:4034
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition Archive.h:1208
virtual CORE_API void SetIsSaving(bool bInIsSaving)
Definition Archive.cpp:1523
UE_FORCEINLINE_HINT bool IsError() const
Definition Archive.h:362
Definition BufferWriter.h:29
void * WriterData
Definition BufferWriter.h:128
int64 TotalSize()
Definition BufferWriter.h:92
virtual FString GetArchiveName() const
Definition BufferWriter.h:121
void * GetWriterData()
Definition BufferWriter.h:123
bool AtEnd()
Definition BufferWriter.h:102
void Serialize(void *Data, int64 Num)
Definition BufferWriter.h:61
bool Close()
Definition BufferWriter.h:52
Type * SerializeUninitialized()
Definition BufferWriter.h:107
FBufferWriter(void *Data, int64 Size, EBufferWriterFlags InFlags=EBufferWriterFlags::None)
Definition BufferWriter.h:38
bool bAllowResize
Definition BufferWriter.h:132
bool bFreeOnClose
Definition BufferWriter.h:131
void Seek(int64 InPos)
Definition BufferWriter.h:96
int64 WriterSize
Definition BufferWriter.h:130
int64 Tell()
Definition BufferWriter.h:88
int64 WriterPos
Definition BufferWriter.h:129
~FBufferWriter()
Definition BufferWriter.h:48
static FORCENOINLINE CORE_API void Free(void *Original)
Definition UnrealMemory.cpp:685
static UE_FORCEINLINE_HINT void * Memcpy(void *Dest, const void *Src, SIZE_T Count)
Definition UnrealMemory.h:160