UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
InstancedStructContainer.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
8
9#include "InstancedStructContainer.generated.h"
10
11#define UE_API COREUOBJECT_API
12
13struct FInstancedStruct;
15
34USTRUCT()
36{
38
39private:
40
42 struct FItem
43 {
44 FItem() = default;
45 FItem(const UScriptStruct* InScriptStruct, const int32 InOffset) : ScriptStruct(InScriptStruct), Offset(InOffset) {}
46
47 int32 GetStructureSize() const
48 {
49 return ScriptStruct != nullptr ? ScriptStruct->GetStructureSize() : 0;
50 }
51
52 int32 GetMinAlignment() const
53 {
54 return ScriptStruct != nullptr ? ScriptStruct->GetMinAlignment() : 1;
55 }
56
57 int32 GetEndOffset() const
58 {
59 return Offset + GetStructureSize();
60 }
61
62 TObjectPtr<const UScriptStruct> ScriptStruct = nullptr;
63 int32 Offset = 0;
64 };
65
66public:
67
69 static constexpr int32 OverheadPerItem = sizeof(FItem);
70
74
76
82
87
89 UE_API void InsertAt(const int32 InsertAtIndex, const FInstancedStructContainer& Other);
93
95 UE_API void RemoveAt(const int32 RemoveAtIndex, const int32 Count);
96
98 UE_API void ReserveBytes(const int32 NumBytes, const int32 MinAlignment = DefaultMinAlignment);
99
101 UE_API void SetNum(const int32 NewNum);
102
104 int32 GetAllocatedMemory() const { return AllocatedSize; }
105
107 UE_API void Reset();
108
110 UE_API void Empty();
111
113 bool IsValid() const { return NumItems > 0; }
114
116 int32 Num() const { return NumItems; }
117
119 bool IsValidIndex(const int32 Index) const { return Index >= 0 && Index < NumItems; }
120
123 {
124 check(IsValid() && IsValidIndex(Index));
125 const FItem& Item = GetItem(Index);
126 return FConstStructView(Item.ScriptStruct, Memory + Item.Offset);
127 }
128
131 {
132 check(IsValid() && IsValidIndex(Index));
133 const FItem& Item = GetItem(Index);
134 return FStructView(Item.ScriptStruct, Memory + Item.Offset);
135 }
136
152 template<typename T>
154 {
155 using StructViewType = std::conditional_t<std::is_const_v<T>, FConstStructView, FStructView>;
156
159 {
160 const FItem& Item = Container.GetItem(Index);
161 return StructViewType(Item.ScriptStruct, Container.Memory + Item.Offset);
162 }
163
165 {
166 Index++;
167 return *this;
168 }
169
171 {
172 Index--;
173 return *this;
174 }
175
177 bool operator!=(const TIterator& RHS) const
178 {
179 return Index != RHS.Index;
180 }
181
183 explicit operator bool() const
184 {
185 return Container.IsValidIndex(Index);
186 }
187
190 {
191 return Index;
192 }
193
196 {
197 static_assert(!std::is_const_v<T>, "Cannot remove on const container.");
198 Container.RemoveAt(Index, 1);
199 Index--;
200 }
201
202 private:
203 explicit TIterator(T& InContainer, const int32 InIndex = 0)
205 , Index(InIndex)
206 {
207 }
208
209 T& Container;
210 int32 Index = 0;
211
213 };
214
217
219 FIterator CreateIterator() { return FIterator(*this, 0); }
222
224 FIterator begin() { return FIterator(*this, 0); }
225 FIterator end() { return FIterator(*this, NumItems); }
226
227 FConstIterator begin() const { return FConstIterator(*this, 0); }
228 FConstIterator end() const { return FConstIterator(*this, NumItems); }
229
231 UE_API void AddStructReferencedObjects(FReferenceCollector& Collector);
232 UE_API bool Identical(const FInstancedStructContainer* Other, uint32 PortFlags) const;
233 UE_API bool Serialize(FArchive& Ar);
234 UE_API void GetPreloadDependencies(TArray<UObject*>& OutDeps) const;
235 UE_API bool ExportTextItem(FString& ValueStr, FInstancedStructContainer const& DefaultValue, UObject* Parent, int32 PortFlags, UObject* ExportRootScope) const;
236 UE_API bool ImportTextItem(const TCHAR*& Buffer, int32 PortFlags, UObject* Parent, FOutputDevice* ErrorText, FArchive* InSerializingArchive = nullptr);
237
238private:
239
241 static constexpr int32 DefaultMinAlignment = alignof(void*);
242
244 static constexpr int32 ItemStride = static_cast<int32>(Align(sizeof(FItem), alignof(FItem)));
245
247 int32 GetItemOffset(const int32 Index) const
248 {
249 check(NumItems > 0 && Index < NumItems);
250 return AllocatedSize - ((Index + 1) * ItemStride);
251 }
252
254 FItem& GetItem(const int32 Index) const
255 {
256 check(NumItems > 0 && Index < NumItems);
257 const int32 Offset = AllocatedSize - ((Index + 1) * ItemStride);
258 return *(FItem*)(Memory + Offset);
259 }
260
262 uint8* Memory = nullptr;
263
265 int32 AllocatedSize = 0;
266
268 int32 NumItems = 0;
269
270 friend FIterator;
271 friend FConstIterator;
272};
273
274template<>
287
288#undef UE_API
constexpr T Align(T Val, uint64 Alignment)
Definition AlignmentTemplates.h:18
#define check(expr)
Definition AssertionMacros.h:314
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
const bool
Definition NetworkReplayStreaming.h:178
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define USTRUCT(...)
Definition ObjectMacros.h:746
TIndexedContainerIterator< TArray< FPreviewAttachedObjectPair >, FPreviewAttachedObjectPair, int32 > TIterator
Definition PreviewAssetAttachComponent.h:68
#define UE_API
Definition InstancedStructContainer.h:11
uint32 Offset
Definition VulkanMemory.cpp:4033
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 OutputDevice.h:133
Definition UObjectGlobals.h:2492
Definition Array.h:670
Definition Object.h:95
Definition Class.h:1720
U16 Index
Definition radfft.cpp:71
Definition StructView.h:217
Definition InstancedStructContainer.h:154
int32 GetIndex() const
Definition InstancedStructContainer.h:189
bool operator!=(const TIterator &RHS) const
Definition InstancedStructContainer.h:177
TIterator & operator++()
Definition InstancedStructContainer.h:164
void RemoveCurrent()
Definition InstancedStructContainer.h:195
TIterator & operator--()
Definition InstancedStructContainer.h:170
std::conditional_t< std::is_const_v< T >, FConstStructView, FStructView > StructViewType
Definition InstancedStructContainer.h:155
StructViewType operator*()
Definition InstancedStructContainer.h:158
Definition InstancedStructContainer.h:36
FConstIterator end() const
Definition InstancedStructContainer.h:228
int32 GetAllocatedMemory() const
Definition InstancedStructContainer.h:104
bool IsValidIndex(const int32 Index) const
Definition InstancedStructContainer.h:119
FConstIterator CreateConstIterator() const
Definition InstancedStructContainer.h:221
FConstStructView operator[](const int32 Index) const
Definition InstancedStructContainer.h:122
~FInstancedStructContainer()
Definition InstancedStructContainer.h:75
FStructView operator[](const int32 Index)
Definition InstancedStructContainer.h:130
FIterator begin()
Definition InstancedStructContainer.h:224
int32 Num() const
Definition InstancedStructContainer.h:116
FConstIterator begin() const
Definition InstancedStructContainer.h:227
FIterator end()
Definition InstancedStructContainer.h:225
FIterator CreateIterator()
Definition InstancedStructContainer.h:219
bool IsValid() const
Definition InstancedStructContainer.h:113
Definition InstancedStruct.h:32
Definition StructView.h:24
Definition ObjectPtr.h:488
Definition StructOpsTypeTraits.h:11
@ WithGetPreloadDependencies
Definition StructOpsTypeTraits.h:32
@ WithAddStructReferencedObjects
Definition StructOpsTypeTraits.h:22
@ WithExportTextItem
Definition StructOpsTypeTraits.h:20
@ WithSerializer
Definition StructOpsTypeTraits.h:23
@ WithImportTextItem
Definition StructOpsTypeTraits.h:21
@ WithIdentical
Definition StructOpsTypeTraits.h:19
Definition StructOpsTypeTraits.h:46