UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
CompositeBuffer.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Containers/Array.h"
8#include "HAL/Platform.h"
10#include "Memory/MemoryFwd.h"
11#include "Memory/MemoryView.h"
12#include "Memory/SharedBuffer.h"
15
16#include <type_traits>
17
27{
28 template <typename BufferType>
29 using CanAppendBufferType = std::bool_constant<
30 std::is_same_v<FCompositeBuffer, BufferType> ||
31 std::is_same_v<FSharedBuffer, BufferType> ||
33
34public:
40 template <typename... BufferTypes,
41 std::enable_if_t<std::conjunction_v<CanAppendBufferType<std::decay_t<BufferTypes>>...>>* = nullptr>
42 inline explicit FCompositeBuffer(BufferTypes&&... Buffers)
43 {
44 if constexpr (sizeof...(Buffers) > 0)
45 {
46 Segments.Reserve((GetBufferCount(Forward<BufferTypes>(Buffers)) + ...));
47 (AppendBuffers(Forward<BufferTypes>(Buffers)), ...);
48 Segments.RemoveAll(&FSharedBuffer::IsNull);
49 }
50 }
51
54
56 CORE_API void Reset();
57
59 [[nodiscard]] CORE_API uint64 GetSize() const;
60
62 [[nodiscard]] inline TConstArrayView<FSharedBuffer> GetSegments() const { return Segments; }
63
65 [[nodiscard]] inline explicit operator bool() const { return !IsNull(); }
66
68 [[nodiscard]] inline bool IsNull() const { return Segments.IsEmpty(); }
69
71 [[nodiscard]] CORE_API bool IsOwned() const;
72
76
80
83
97 FUniqueBuffer& CopyBuffer) const;
100 uint64 Size,
101 FUniqueBuffer& CopyBuffer,
103
110 CORE_API void CopyTo(FMutableMemoryView Target, uint64 Offset = 0) const;
111
120 TFunctionRef<void (FMemoryView View)> Visitor) const;
122 TFunctionRef<void (FMemoryView View, const FSharedBuffer& ViewOuter)> Visitor) const;
123
125 [[nodiscard]] CORE_API bool EqualBytes(const FCompositeBuffer& Other) const;
126
129
130private:
131 static inline int32 GetBufferCount(const FCompositeBuffer& Buffer) { return Buffer.Segments.Num(); }
132 inline void AppendBuffers(const FCompositeBuffer& Buffer) { Segments.Append(Buffer.Segments); }
133 inline void AppendBuffers(FCompositeBuffer&& Buffer) { Segments.Append(MoveTemp(Buffer.Segments)); }
134
135 static inline int32 GetBufferCount(const FSharedBuffer& Buffer) { return 1; }
136 inline void AppendBuffers(const FSharedBuffer& Buffer) { Segments.Add(Buffer); }
137 inline void AppendBuffers(FSharedBuffer&& Buffer) { Segments.Add(MoveTemp(Buffer)); }
138
139 template <typename BufferType, decltype(std::declval<TArray<FSharedBuffer>>().Append(std::declval<BufferType>()))* = nullptr>
140 static inline int32 GetBufferCount(BufferType&& Buffer) { return GetNum(Buffer); }
141 template <typename BufferType, decltype(std::declval<TArray<FSharedBuffer>>().Append(std::declval<BufferType>()))* = nullptr>
142 inline void AppendBuffers(BufferType&& Buffer) { Segments.Append(Forward<BufferType>(Buffer)); }
143
144private:
146};
147
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
const bool
Definition NetworkReplayStreaming.h:178
#define MAX_uint64
Definition NumericLimits.h:22
auto GetNum(const TStringConversion< Converter, DefaultConversionSize > &Conversion) -> decltype(Conversion.Length())
Definition StringConv.h:808
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint32 Offset
Definition VulkanMemory.cpp:4033
uint32 Size
Definition VulkanMemory.cpp:4034
Definition CompositeBuffer.h:27
CORE_API ~FCompositeBuffer()
CORE_API FCompositeBuffer Mid(uint64 Offset, uint64 Size=MAX_uint64) const
Definition CompositeBuffer.cpp:71
TConstArrayView< FSharedBuffer > GetSegments() const
Definition CompositeBuffer.h:62
CORE_API void Reset()
Definition CompositeBuffer.cpp:18
CORE_API void IterateRange(uint64 Offset, uint64 Size, TFunctionRef< void(FMemoryView View)> Visitor) const
Definition CompositeBuffer.cpp:129
CORE_API uint64 GetSize() const
Definition CompositeBuffer.cpp:23
CORE_API bool EqualBytes(const FCompositeBuffer &Other) const
Definition CompositeBuffer.cpp:162
static CORE_API const FCompositeBuffer Null
Definition CompositeBuffer.h:128
FCompositeBuffer(BufferTypes &&... Buffers)
Definition CompositeBuffer.h:42
CORE_API FSharedBuffer ToShared() const &
Definition CompositeBuffer.cpp:47
CORE_API void CopyTo(FMutableMemoryView Target, uint64 Offset=0) const
Definition CompositeBuffer.cpp:121
CORE_API FCompositeBuffer MakeOwned() const &
Definition CompositeBuffer.cpp:33
CORE_API bool IsOwned() const
Definition CompositeBuffer.cpp:28
CORE_API FMemoryView ViewOrCopyRange(uint64 Offset, uint64 Size, FUniqueBuffer &CopyBuffer) const
Definition CompositeBuffer.cpp:84
bool IsNull() const
Definition CompositeBuffer.h:68
Definition SharedBuffer.h:341
bool IsNull() const
Definition SharedBuffer.h:402
Definition SharedBuffer.h:218
Definition Array.h:670
Definition AssetRegistryState.h:50