UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SharedPointerSet.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
8
9namespace uLang
10{
11
16template<typename InElementType, bool AllowNull, typename InKeyType, typename InElementAllocatorType, typename... RawAllocatorArgsType>
18 : protected TSPtrArrayG<InElementType, AllowNull, InElementAllocatorType, RawAllocatorArgsType...>
19{
20 template <typename OtherElementType, bool OtherAllowNull, typename OtherKeyType, typename OtherElementAllocatorType, typename... OtherRawAllocatorArgsType>
21 friend class TSPtrSetG;
22
26
27public:
28
33
40
50
59 : Super(Other, ExtraSlack)
60 {
61 }
62
72
81 : Super(ForwardArg<Super>(Other), ExtraSlack)
82 {
83 }
84
90
91 // Use these superclass methods as-is:
92 using Super::GetSlack;
94 using Super::Num;
95 using Super::Max;
96 using Super::IsEmpty;
97 using Super::IsFilled;
98 using Super::operator[];
101 using Super::Shrink;
102 using Super::RemoveAt;
103 using Super::ReplaceAt;
104 using Super::Reset;
105 using Super::Empty;
106 using Super::Reserve;
107 using typename Super::Iterator;
108 using Super::begin;
109 using Super::end;
110
118 int32_t IndexOf(const KeyType& Key) const
119 {
121 return (UpperBound < Num() && KeyType(*_PointerStorage[UpperBound]) == Key) ? UpperBound : IndexNone;
122 }
123
133 {
135 if (UpperBound < Num())
136 {
137 ElementType* Item = _PointerStorage[UpperBound];
138 if (KeyType(*Item) == Key)
139 {
141 }
142 }
143 return TOptional<PointerType>();
144 }
145
152 bool Contains(const KeyType& Key) const
153 {
155 return UpperBound < Num() && KeyType(*_PointerStorage[UpperBound]) == Key;
156 }
157
166 void Append(const TSPtrSetG& Other)
167 {
168 Other.ReferenceAll();
169 Merge(_PointerStorage, Other._PointerStorage);
171 }
172
180 {
181 Merge(_PointerStorage, Other._PointerStorage);
182 Other.Empty();
184 }
185
195 {
197 return *this;
198 }
199
207 {
208 Append(Other);
209 return *this;
210 }
211
218 template <typename... CtorArgsType>
220 {
221 ElementType * Item = new(_PointerStorage.GetRawAllocator()) ElementType(uLang::ForwardArg<CtorArgsType>(CtorArgs)...);
222 Item->Reference();
224 int32_t UpperBound = Helper::GetUpperBound(_PointerStorage, *Item);
225 ULANG_ASSERTF(UpperBound == Num() || KeyType(*_PointerStorage[UpperBound]) != KeyType(*Item), "Tried to add duplicate item!");
226 _PointerStorage.EmplaceAt(UpperBound, Item);
227 return UpperBound;
228 }
229
240 {
241 int32_t UpperBound = Helper::GetUpperBound(_PointerStorage, *Item);
242 ULANG_ASSERTF(UpperBound == Num() || KeyType(*_PointerStorage[UpperBound]) != KeyType(*Item), "Tried to add duplicate item!");
243 return Super::Insert(Item, UpperBound);
244 }
245
255 {
256 int32_t Count = 0;
258 if (UpperBound < Num() && KeyType(*_PointerStorage[UpperBound]) == Key)
259 {
260 Super::RemoveAt(UpperBound);
261 ++Count;
262 }
263 ULANG_ASSERTF(UpperBound == Num() || KeyType(*_PointerStorage[UpperBound]) != Key, "Matching item still present after Remove()!");
264 return Count;
265 }
266
267};
268
270template<typename ElementType, typename KeyType>
272
274template<typename ElementType, typename KeyType>
276
278template<typename ElementType, typename KeyType>
280
282template<typename ElementType, typename KeyType>
284
285
286template <typename ElementType, bool AllowNull, typename KeyType, typename ElementAllocatorType, typename... RawAllocatorArgsType>
287struct TIsZeroConstructType<TSPtrSetG<ElementType, AllowNull, KeyType, ElementAllocatorType, RawAllocatorArgsType...>>
288{
290};
291
292template <typename ElementType, bool AllowNull, typename KeyType, typename ElementAllocatorType, typename... RawAllocatorArgsType>
293struct TContainerTraits<TSPtrSetG<ElementType, AllowNull, KeyType, ElementAllocatorType, RawAllocatorArgsType...>> : public TContainerTraitsBase<TSPtrSetG<ElementType, AllowNull, ElementAllocatorType, RawAllocatorArgsType...>>
294{
295 static_assert(TAllocatorTraits<ElementAllocatorType>::SupportsMove, "TSPtrArray no longer supports move-unaware allocators");
297};
298
299template <typename ElementType, bool AllowNull, typename KeyType, typename ElementAllocatorType, typename... RawAllocatorArgsType>
300struct TIsContiguousContainer<TSPtrSetG<ElementType, AllowNull, KeyType, ElementAllocatorType, RawAllocatorArgsType...>>
301{
302 enum { Value = true };
303};
304
305}
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define ULANG_FORCEINLINE
Definition Common.h:188
#define ULANG_ASSERTF(expr, format,...)
Definition Common.h:290
Definition Allocator.h:35
ULANG_FORCEINLINE void EmplaceAt(int32_t Index, ArgsType &&... Args)
Definition Array.h:1556
ULANG_FORCEINLINE const ElementAllocatorType::RawAllocatorType & GetRawAllocator() const
Definition Array.h:419
Definition PointerSetHelper.h:15
static int32_t GetUpperBound(const PointerStorageType &This, const KeyType &Key)
Definition PointerSetHelper.h:21
Definition SharedPointerArray.h:21
int32_t IndexOfByPredicate(Predicate Pred) const
Definition SharedPointerArray.h:455
ULANG_FORCEINLINE int32_t GetSlack() const
Definition SharedPointerArray.h:210
ULANG_FORCEINLINE int32_t Num() const
Definition SharedPointerArray.h:232
TSPtrArrayG & operator=(const TSPtrArrayG< OtherElementType, OtherAllowNull, InElementAllocatorType, RawAllocatorArgsType... > &Other)
Definition SharedPointerArray.h:101
int32_t ReplaceAt(const PointerType &Item, int32_t Index)
Definition SharedPointerArray.h:680
ULANG_FORCEINLINE Iterator end()
Definition SharedPointerArray.h:1058
ULANG_FORCEINLINE void EnableDereference()
Definition SharedPointerArray.h:1064
TSPtrG< ElementType, AllowNull, typename InElementAllocatorType::RawAllocatorType, RawAllocatorArgsType... > PointerType
Definition SharedPointerArray.h:29
ULANG_FORCEINLINE TOptional< PointerType > FindByPredicate(Predicate Pred) const
Definition SharedPointerArray.h:488
ULANG_FORCEINLINE Iterator begin()
Definition SharedPointerArray.h:1056
ULANG_FORCEINLINE PointerType RemoveAt(int32_t Index)
Definition SharedPointerArray.h:608
ULANG_FORCEINLINE bool IsEmpty() const
Definition SharedPointerArray.h:254
ULANG_FORCEINLINE void Reserve(int32_t Number)
Definition SharedPointerArray.h:874
int32_t Insert(const TSPtrArrayG &Items, const int32_t InIndex)
Definition SharedPointerArray.h:560
ULANG_FORCEINLINE int32_t Max() const
Definition SharedPointerArray.h:243
ULANG_FORCEINLINE bool IsFilled() const
Definition SharedPointerArray.h:265
ULANG_FORCEINLINE bool IsValidIndex(int32_t Index) const
Definition SharedPointerArray.h:221
Definition SharedPointer.h:77
Definition SharedPointerSet.h:19
TSPtrSetG & operator=(TSPtrSetG &&Other)
Definition SharedPointerSet.h:89
TSPtrSetG & operator+=(TSPtrSetG &&Other)
Definition SharedPointerSet.h:194
ULANG_FORCEINLINE TSPtrSetG(const TSPtrSetG &Other)
Definition SharedPointerSet.h:46
ULANG_FORCEINLINE TSPtrSetG(const TSPtrSetG &Other, int32_t ExtraSlack)
Definition SharedPointerSet.h:58
bool Contains(const KeyType &Key) const
Definition SharedPointerSet.h:152
ULANG_FORCEINLINE TSPtrSetG(TSPtrSetG &&Other)
Definition SharedPointerSet.h:68
TSPtrSetG(TSPtrSetG &&Other, int32_t ExtraSlack)
Definition SharedPointerSet.h:80
int32_t Remove(const KeyType &Key)
Definition SharedPointerSet.h:254
TSPtrSetG & operator=(const TSPtrSetG &Other)
Definition SharedPointerSet.h:88
TSPtrSetG & operator+=(const TSPtrSetG &Other)
Definition SharedPointerSet.h:206
int32_t IndexOf(const KeyType &Key) const
Definition SharedPointerSet.h:118
ULANG_FORCEINLINE TSPtrSetG(RawAllocatorArgsType &&... RawAllocatorArgs)
Definition SharedPointerSet.h:37
ULANG_FORCEINLINE TOptional< PointerType > Find(const KeyType &Key) const
Definition SharedPointerSet.h:132
void Append(TSPtrSetG &&Other)
Definition SharedPointerSet.h:179
ULANG_FORCEINLINE int32_t AddNew(CtorArgsType &&... CtorArgs)
Definition SharedPointerSet.h:219
void Append(const TSPtrSetG &Other)
Definition SharedPointerSet.h:166
InKeyType KeyType
Definition SharedPointerSet.h:29
ULANG_FORCEINLINE int32_t Add(const PointerType &Item)
Definition SharedPointerSet.h:239
Definition VVMEngineEnvironment.h:23
@ IndexNone
Definition Common.h:381
ULANG_FORCEINLINE T && ForwardArg(typename TRemoveReference< T >::Type &Obj)
Definition References.h:115
ULANG_FORCEINLINE TRemoveReference< T >::Type && Move(T &&Obj)
Definition References.h:86
Definition Allocator.h:238
Definition TypeTraits.h:451
@ MoveWillEmptyContainer
Definition TypeTraits.h:453
Definition TypeTraits.h:456
Definition TypeTraits.h:263
@ Value
Definition TypeTraits.h:264
Definition TypeTraits.h:325
Definition Optional.h:23