UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ContainerItemHandle.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "Chaos/Core.h"
5
6namespace Chaos
7{
19 template<typename T_CONTAINER, typename T_ITEM>
21 {
22 public:
24 using FItem = T_ITEM;
26
28 : Container(nullptr)
30 {
31 }
32
34 : Container(&InContainer)
35 , Index(InIndex)
36 {
37 }
38
39 inline const FItem* TryGet() const
40 {
41 if (Container != nullptr)
42 {
43 return Container->TryGetItem(Index);
44 }
45 return nullptr;
46 }
47
48 inline const FItem& Get() const
49 {
50 check(Container != nullptr);
51 return Container->GetItem(Index);
52 }
53
54 inline const FItem* operator->() const
55 {
56 return &Get();
57 }
58
59 inline const FItem& operator*() const
60 {
61 return Get();
62 }
63
64 inline bool IsValid() const
65 {
66 return (Container != nullptr) && Container->IsValid(Index);
67 }
68
69 inline void Reset()
70 {
71 Container = nullptr;
73 }
74
75 inline const FContainer* GetContainer() const
76 {
77 return Container;
78 }
79
80 inline int GetIndex() const
81 {
82 return Index;
83 }
84
85 friend inline bool operator==(const FHandle& L, const FHandle& R)
86 {
87 return (L.GetContainer() == R.GetContainer()) && (L.GetIndex() == R.GetIndex());
88 }
89
90 friend inline bool operator!=(const FHandle& L, const FHandle& R)
91 {
92 return !(L == R);
93 }
94
95 friend inline bool operator<(const FHandle& L, const FHandle& R)
96 {
97 check(L.IsValid());
98 check(R.IsValid());
99 return L.GetIndex() < R.GetIndex();
100 }
101
102 private:
103 const FContainer* Container;
104 int Index;
105 };
106
110 template<typename T_CONTAINER, typename T_ITEM>
111 class TContainerItemHandle : private TConstContainerItemHandle<T_CONTAINER, T_ITEM>
112 {
113 public:
116 using FItem = T_ITEM;
118
120 {
121 }
122
127
128 // Auto-cast to const handle reference
130 {
131 return *reinterpret_cast<const TConstContainerItemHandle<T_CONTAINER, T_ITEM>*>(this);
132 }
133
134 inline FItem* TryGet() const
135 {
136 return const_cast<FItem*>(Base::TryGet());
137 }
138
139 inline FItem& Get() const
140 {
141 return const_cast<FItem&>(Base::Get());
142 }
143
144 inline FItem* operator->() const
145 {
146 return &const_cast<FItem&>(Base::Get());
147 }
148
149 inline FItem& operator*() const
150 {
151 return const_cast<FItem&>(Base::Get());
152 }
153
154 using Base::IsValid;
155
156 using Base::Reset;
157
158 inline FContainer* GetContainer() const
159 {
160 return const_cast<FContainer*>(Base::GetContainer());
161 }
162
163 using Base::GetIndex;
164
165 friend inline bool operator==(const FHandle& L, const FHandle& R)
166 {
167 return (L.GetContainer() == R.GetContainer()) && (L.GetIndex() == R.GetIndex());
168 }
169
170 friend inline bool operator!=(const FHandle& L, const FHandle& R)
171 {
172 return !(L == R);
173 }
174
175 friend inline bool operator<(const FHandle& L, const FHandle& R)
176 {
177 check(L.IsValid());
178 check(R.IsValid());
179 return L.GetIndex() < R.GetIndex();
180 }
181 };
182
183
184}
#define check(expr)
Definition AssertionMacros.h:314
@ INDEX_NONE
Definition CoreMiscDefines.h:150
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
Definition ContainerItemHandle.h:21
const FItem & operator*() const
Definition ContainerItemHandle.h:59
const FItem * TryGet() const
Definition ContainerItemHandle.h:39
const FContainer * GetContainer() const
Definition ContainerItemHandle.h:75
int GetIndex() const
Definition ContainerItemHandle.h:80
friend bool operator!=(const FHandle &L, const FHandle &R)
Definition ContainerItemHandle.h:90
TConstContainerItemHandle(const T_CONTAINER &InContainer, int InIndex)
Definition ContainerItemHandle.h:33
void Reset()
Definition ContainerItemHandle.h:69
TConstContainerItemHandle()
Definition ContainerItemHandle.h:27
bool IsValid() const
Definition ContainerItemHandle.h:64
friend bool operator==(const FHandle &L, const FHandle &R)
Definition ContainerItemHandle.h:85
T_CONTAINER FContainer
Definition ContainerItemHandle.h:23
friend bool operator<(const FHandle &L, const FHandle &R)
Definition ContainerItemHandle.h:95
const FItem * operator->() const
Definition ContainerItemHandle.h:54
T_ITEM FItem
Definition ContainerItemHandle.h:24
const FItem & Get() const
Definition ContainerItemHandle.h:48
Definition ContainerItemHandle.h:112
FItem & operator*() const
Definition ContainerItemHandle.h:149
T_CONTAINER FContainer
Definition ContainerItemHandle.h:115
FItem * TryGet() const
Definition ContainerItemHandle.h:134
FItem * operator->() const
Definition ContainerItemHandle.h:144
TContainerItemHandle()
Definition ContainerItemHandle.h:119
T_ITEM FItem
Definition ContainerItemHandle.h:116
int GetIndex() const
Definition ContainerItemHandle.h:80
friend bool operator!=(const FHandle &L, const FHandle &R)
Definition ContainerItemHandle.h:170
TContainerItemHandle(T_CONTAINER &InContainer, int InIndex)
Definition ContainerItemHandle.h:123
bool IsValid() const
Definition ContainerItemHandle.h:64
friend bool operator==(const FHandle &L, const FHandle &R)
Definition ContainerItemHandle.h:165
friend bool operator<(const FHandle &L, const FHandle &R)
Definition ContainerItemHandle.h:175
FItem & Get() const
Definition ContainerItemHandle.h:139
FContainer * GetContainer() const
Definition ContainerItemHandle.h:158
Definition SkeletalMeshComponent.h:307
U16 Index
Definition radfft.cpp:71