UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
BulkDataWriter.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
12
16class FBulkDataWriter final : public FArchive
17{
18public:
19 FBulkDataWriter( FByteBulkData& InBulkData, bool bIsPersistent = false )
21 , WriterPos( BulkData.GetBulkDataSize() )
23 {
24 SetIsSaving( true );
25 SetIsPersistent( bIsPersistent );
27 }
28
30 {
31 // Remove the slack from the allocated bulk data
34 }
35
36 virtual void Serialize( void* Data, int64 Num )
37 {
38 // Determine if we need to reallocate the buffer to fit the next item
39 const int64 NewPos = WriterPos + Num;
42 {
43 // If so, resize to the new size + 3/8
44 Buffer = BulkData.Realloc( NewPos + 3 * NewPos / 8 + 16 );
45 }
46
47 FMemory::Memcpy( static_cast<unsigned char*>( Buffer ) + WriterPos, Data, Num );
48 WriterPos += Num;
49 WriterSize = FMath::Max( WriterSize, WriterPos );
50 }
51
52 using FArchive::operator<<; // For visibility of the overloads we don't override
53
54 virtual FArchive& operator<<( class FName& Name ) override
55 {
56 // FNames are serialized as strings in BulkData
57 FString StringName = Name.ToString();
58 *this << StringName;
59 return *this;
60 }
61
62 virtual int64 Tell() { return WriterPos; }
63 virtual int64 TotalSize() { return WriterSize; }
64
65 virtual void Seek( int64 InPos )
66 {
67 check( InPos >= 0 );
70 }
71
72 virtual bool AtEnd()
73 {
74 return WriterPos >= WriterSize;
75 }
76
77 virtual FString GetArchiveName() const { return TEXT( "FBulkDataWriter" ); }
78
79protected:
81 void* Buffer;
84};
#define check(expr)
Definition AssertionMacros.h:314
@ LOCK_READ_WRITE
Definition BulkData.h:204
#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
@ Num
Definition MetalRHIPrivate.h:234
Definition Archive.h:1208
virtual CORE_API void SetIsSaving(bool bInIsSaving)
Definition Archive.cpp:1523
virtual CORE_API void SetIsPersistent(bool bInIsPersistent)
Definition Archive.cpp:1553
Definition BulkDataWriter.h:17
int64 WriterPos
Definition BulkDataWriter.h:82
virtual void Seek(int64 InPos)
Definition BulkDataWriter.h:65
virtual FArchive & operator<<(class FName &Name) override
Definition BulkDataWriter.h:54
virtual int64 Tell()
Definition BulkDataWriter.h:62
~FBulkDataWriter()
Definition BulkDataWriter.h:29
virtual int64 TotalSize()
Definition BulkDataWriter.h:63
virtual void Serialize(void *Data, int64 Num)
Definition BulkDataWriter.h:36
FByteBulkData & BulkData
Definition BulkDataWriter.h:80
virtual FString GetArchiveName() const
Definition BulkDataWriter.h:77
FBulkDataWriter(FByteBulkData &InBulkData, bool bIsPersistent=false)
Definition BulkDataWriter.h:19
int64 WriterSize
Definition BulkDataWriter.h:83
virtual bool AtEnd()
Definition BulkDataWriter.h:72
void * Buffer
Definition BulkDataWriter.h:81
COREUOBJECT_API void * Lock(uint32 LockFlags)
Definition BulkData.cpp:958
COREUOBJECT_API int64 GetBulkDataSize() const
Definition BulkData.cpp:770
COREUOBJECT_API void Unlock() const
Definition BulkData.cpp:1031
Definition NameTypes.h:617
ElementType * Realloc(int64 ElementCount)
Definition BulkData.h:1066
static UE_FORCEINLINE_HINT void * Memcpy(void *Dest, const void *Src, SIZE_T Count)
Definition UnrealMemory.h:160