UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ManagedArrayAccessor.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
4
13
18template <typename T>
20{
21public:
23 : ConstCollection(InCollection)
24 , Collection(&InCollection)
25 , Name(InAttributeName)
26 , Group(InAttributeGroup)
27 , DefaultGroupDependency(InDefaultGroupDependency)
28 , AttributeArray(InCollection.FindAttributeTyped<T>(InAttributeName, InAttributeGroup))
29 , ConstAttributeArray(AttributeArray)
30 {}
31
33 : ConstCollection(InCollection)
34 , Collection(nullptr)
35 , Name(InAttributeName)
36 , Group(InAttributeGroup)
37 , DefaultGroupDependency(InDefaultGroupDependency)
38 , AttributeArray(nullptr)
39 , ConstAttributeArray(InCollection.FindAttributeTyped<T>(InAttributeName, InAttributeGroup))
40 {}
41
42 const FManagedArrayCollection& GetConstCollection() const { return ConstCollection; }
43 FManagedArrayCollection* GetCollection() { check(!IsConst()); return Collection; }
44
45 FName GetName() const { return Name; }
46
47 FName GetGroup() const { return Group; }
48
49 FName GetGroupDependency() const { return IsValid() ? ConstCollection.GetDependency(Name, Group) : DefaultGroupDependency; }
50
51 bool IsConst() const { return Collection == nullptr; }
52
53 bool IsValid() const { return ConstAttributeArray != nullptr; }
54
55 bool IsPersistent() const { return ConstCollection.IsAttributePersistent(Name, Group); }
56
58 {
59 check(IsValid());
60 return (Index >= 0) && (Index < ConstAttributeArray->Num());
61 }
62
63 int32 AddElements(int32 NumElements) const
64 {
65 check(!IsConst());
66 return Collection->AddElements(NumElements, Group);
67 }
68
70 {
71 check(!IsConst());
72 return Collection->RemoveElements(Group, NumElements, Position);
73 }
74
76 {
77 check(!IsConst());
78 check(InNumElements >= 0);
79 const int32 NumElements = Num();
80 if (const int32 Delta = InNumElements - NumElements)
81 {
82 if (Delta > 0)
83 {
84 Collection->AddElements(Delta, Group);
85 }
86 else
87 {
88 Collection->RemoveElements(Group, -Delta, InNumElements);
89 }
90 }
91 }
92
94 const T& operator[](int32 Index) const
95 {
96 check(IsValid());
97 return (*ConstAttributeArray)[Index];
98 }
99
101 const TManagedArray<T>& Get() const
102 {
103 check(IsValid());
104 return *ConstAttributeArray;
105 }
106
108 const TManagedArray<T>* Find() const
109 {
110 return ConstAttributeArray;
111 }
112
115 {
116 check(AttributeArray!=nullptr && !IsConst());
117 AttributeArray->MarkDirty();
118 return *AttributeArray;
119 }
120
122 void ModifyAt(int32 Index, const T& NewValue)
123 {
124 check(AttributeArray != nullptr && !IsConst());
125 AttributeArray->MarkDirty();
126 (*AttributeArray)[Index] = NewValue;
127 }
128
132 {
133 check(!IsConst());
135 {
136 Remove();
137 }
138
139 if (!Collection->HasGroup(Group))
140 {
141 Collection->AddGroup(Group);
142 }
143
144 FName LocalGroupDependency = DefaultGroupDependency;
145 if (!InGroupDependency.IsNone())
146 {
148 }
149
152 ConstAttributeArray = AttributeArray = &Collection->AddAttribute<T>(Name, Group, Params);
153 return *AttributeArray;
154 }
155
168
170 void Fill(const T& Value)
171 {
172 check(!IsConst());
173 if (AttributeArray)
174 {
175 AttributeArray->Fill(Value);
176 }
177 }
178
181 {
182 check(!IsConst());
183 Collection->CopyAttribute(FromAttribute.ConstCollection, FromAttribute.Name, Name, Group);
184 // update attribute array if necessary
185 AttributeArray = Collection->FindAttributeTyped<T>(Name, Group);
186 ConstAttributeArray = AttributeArray;
187 }
188
189 void Remove()
190 {
191 check(!IsConst());
192 Collection->RemoveAttribute(Name, Group);
193 ConstAttributeArray = AttributeArray = nullptr;
194 }
195
196 int32 Num() const
197 {
198 return ConstAttributeArray
199 ? ConstAttributeArray->Num()
200 : ConstCollection.NumElements(Group); // more expensive to fetch
201 }
202
203private:
204
205 // the non-const Collection will be null if the accessor is const, while ConstCollection is always set
206 const FManagedArrayCollection& ConstCollection;
207 FManagedArrayCollection* Collection = nullptr;
208
209 FName Name;
210 FName Group;
211 const FName DefaultGroupDependency; // Will be used by Add if a non-NAME_None group dependency is specified by that method.
212 TManagedArray<T>* AttributeArray;
213 const TManagedArray<T>* ConstAttributeArray;
214};
#define check(expr)
Definition AssertionMacros.h:314
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
uint8_t uint8
Definition binka_ue_file_header.h:8
FORCEINLINE_DEBUGGABLE void MarkDirty()
Definition ManagedArray.h:220
Definition NameTypes.h:617
FORCEINLINE int32 Num() const override
Definition ManagedArray.h:519
void Fill(const ElementType &Value)
Definition ManagedArray.h:428
Definition ManagedArray.h:1099
Definition ManagedArrayAccessor.h:6
EPersistencePolicy
Definition ManagedArrayAccessor.h:8
U16 Index
Definition radfft.cpp:71
Definition ManagedArrayCollection.h:78
Definition ManagedArrayCollection.h:56
CHAOS_API bool HasAttribute(FName Name, FName Group) const
Definition ManagedArrayCollection.cpp:171
CHAOS_API void AddGroup(FName Group)
Definition ManagedArrayCollection.cpp:64
CHAOS_API int32 NumElements(FName Group) const
Definition ManagedArrayCollection.cpp:236
CHAOS_API FName GetDependency(FName Name, FName Group) const
Definition ManagedArrayCollection.cpp:509
CHAOS_API int32 AddElements(int32 NumberElements, FName Group)
Definition ManagedArrayCollection.cpp:246
TManagedArray< T > * FindAttributeTyped(FName Name, FName Group)
Definition ManagedArrayCollection.h:321
CHAOS_API void RemoveAttribute(FName Name, FName Group)
Definition ManagedArrayCollection.cpp:385
CHAOS_API void CopyAttribute(const FManagedArrayCollection &InCollection, FName Name, FName Group)
Definition ManagedArrayCollection.cpp:621
virtual CHAOS_API void RemoveElements(const FName &Group, const TArray< int32 > &SortedDeletionList, FProcessingParameters Params=FProcessingParameters())
Definition ManagedArrayCollection.cpp:86
TManagedArray< T > & AddAttribute(FName Name, FName Group, FConstructionParameters Parameters=FConstructionParameters())
Definition ManagedArrayCollection.h:139
FORCEINLINE bool HasGroup(FName Group) const
Definition ManagedArrayCollection.h:463
CHAOS_API bool IsAttributePersistent(FName Name, FName Group) const
Definition ManagedArrayCollection.cpp:214
Definition ManagedArrayAccessor.h:20
void Fill(const T &Value)
Definition ManagedArrayAccessor.h:170
bool IsConst() const
Definition ManagedArrayAccessor.h:51
TManagedArray< T > & Add(ManageArrayAccessor::EPersistencePolicy PersistencePolicy=ManageArrayAccessor::EPersistencePolicy::MakePersistent, FName InGroupDependency=FName(NAME_None))
Definition ManagedArrayAccessor.h:130
TManagedArrayAccessor(const FManagedArrayCollection &InCollection, const FName &InAttributeName, const FName &InAttributeGroup, const FName &InDefaultGroupDependency=NAME_None)
Definition ManagedArrayAccessor.h:32
const T & operator[](int32 Index) const
Definition ManagedArrayAccessor.h:94
FName GetGroup() const
Definition ManagedArrayAccessor.h:47
bool IsValidIndex(int32 Index) const
Definition ManagedArrayAccessor.h:57
TManagedArray< T > & Modify()
Definition ManagedArrayAccessor.h:114
const FManagedArrayCollection & GetConstCollection() const
Definition ManagedArrayAccessor.h:42
int32 AddElements(int32 NumElements) const
Definition ManagedArrayAccessor.h:63
FName GetGroupDependency() const
Definition ManagedArrayAccessor.h:49
FManagedArrayCollection * GetCollection()
Definition ManagedArrayAccessor.h:43
bool IsValid() const
Definition ManagedArrayAccessor.h:53
void AddAndFill(const T &Value, ManageArrayAccessor::EPersistencePolicy PersistencePolicy=ManageArrayAccessor::EPersistencePolicy::MakePersistent, FName InGroupDependency=FName(NAME_None))
Definition ManagedArrayAccessor.h:157
void Copy(const TManagedArrayAccessor< T > &FromAttribute)
Definition ManagedArrayAccessor.h:180
bool IsPersistent() const
Definition ManagedArrayAccessor.h:55
void Remove()
Definition ManagedArrayAccessor.h:189
void RemoveElements(int32 NumElements, int32 Position)
Definition ManagedArrayAccessor.h:69
int32 Num() const
Definition ManagedArrayAccessor.h:196
TManagedArrayAccessor(FManagedArrayCollection &InCollection, const FName &InAttributeName, const FName &InAttributeGroup, const FName &InDefaultGroupDependency=NAME_None)
Definition ManagedArrayAccessor.h:22
void SetNumElements(int32 InNumElements)
Definition ManagedArrayAccessor.h:75
void ModifyAt(int32 Index, const T &NewValue)
Definition ManagedArrayAccessor.h:122
FName GetName() const
Definition ManagedArrayAccessor.h:45
const TManagedArray< T > & Get() const
Definition ManagedArrayAccessor.h:101
const TManagedArray< T > * Find() const
Definition ManagedArrayAccessor.h:108