UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
NetDependencyData.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreTypes.h"
7#include "Containers/Map.h"
10
11namespace UE::Net::Private
12{
15}
16
17namespace UE::Net::Private
18{
19
26
32
34{
35public:
37
42
51
52 template<EArrayType TypeIndex>
54 {
55 static_assert(TypeIndex != EArrayType::Count, "Invalid array type index");
57 };
58
61 {
62 const FDependencyInfo* Entry = DependencyInfos.Find(InternalIndex);
63 const uint32 ArrayIndex = Entry ? Entry->DependentObjectsInfoArrayIndex : FDependencyInfo::InvalidCacheIndex;
64 if (ArrayIndex != FDependencyInfo::InvalidCacheIndex)
65 {
66 return &DependentObjectInfosStorage[ArrayIndex];
67 }
68 return nullptr;
69 }
70
72 {
73 const FDependencyInfo* Entry = DependencyInfos.Find(InternalIndex);
74 const uint32 ArrayIndex = Entry ? Entry->DependentObjectsInfoArrayIndex : FDependencyInfo::InvalidCacheIndex;
75 if (ArrayIndex != FDependencyInfo::InvalidCacheIndex)
76 {
77 return MakeArrayView(DependentObjectInfosStorage[ArrayIndex]);
78 }
80 }
81
83
85
87 {
88 const FDependencyInfo* Entry = DependencyInfos.Find(InternalIndex);
89 const uint32 ArrayIndex = Entry ? Entry->ArrayIndices[ChildSubObjects] : FDependencyInfo::InvalidCacheIndex;
90
91 if (ArrayIndex == FDependencyInfo::InvalidCacheIndex)
92 {
93 return false;
94 }
95
96 OutChildSubObjectsArray = &DependentObjectsStorage[ArrayIndex];
97 OutSubObjectConditionals = Entry->SubObjectConditionalArrayIndex != FDependencyInfo::InvalidCacheIndex ? &SubObjectConditionalsStorage[Entry->SubObjectConditionalArrayIndex] : nullptr;
98 return true;
99 }
100
102 {
103 const FDependencyInfo* Entry = DependencyInfos.Find(InternalIndex);
104 const uint32 ArrayIndex = Entry ? Entry->ArrayIndices[ChildSubObjects] : FDependencyInfo::InvalidCacheIndex;
105 if (ArrayIndex == FDependencyInfo::InvalidCacheIndex)
106 {
107 return false;
108 }
109
110 OutInfo.ChildSubObjects = DependentObjectsStorage[ArrayIndex].GetData();
111 OutInfo.SubObjectLifeTimeConditions = Entry->SubObjectConditionalArrayIndex != FDependencyInfo::InvalidCacheIndex ? SubObjectConditionalsStorage[Entry->SubObjectConditionalArrayIndex].GetData() : nullptr;
112 OutInfo.NumSubObjects = DependentObjectsStorage[ArrayIndex].Num();
113 return true;
114 }
115
118
121
123 {
124 const FDependencyInfo* Entry = DependencyInfos.Find(ChildIndex);
125 const uint32 ArrayIndex = Entry ? Entry->CreationDependencyArrayIndex : FDependencyInfo::InvalidCacheIndex;
126 if (ArrayIndex != FDependencyInfo::InvalidCacheIndex)
127 {
128 return &CreationDependencyInfosStorage[ArrayIndex];
129 }
130 return nullptr;
131 }
132
134 {
135 const FDependencyInfo* Entry = DependencyInfos.Find(ChildIndex);
136 const uint32 ArrayIndex = Entry ? Entry->CreationDependencyArrayIndex : FDependencyInfo::InvalidCacheIndex;
137 if (ArrayIndex != FDependencyInfo::InvalidCacheIndex)
138 {
139 return &CreationDependencyInfosStorage[ArrayIndex];
140 }
141 return nullptr;
142 }
143
144 template<EArrayType TypeIndex>
146 {
147 static_assert(TypeIndex != EArrayType::Count, "Invalid array type index");
148 const FDependencyInfo* Entry = DependencyInfos.Find(InternalIndex);
149 const uint32 ArrayIndex = Entry ? Entry->ArrayIndices[TypeIndex] : FDependencyInfo::InvalidCacheIndex;
150 if (ArrayIndex != FDependencyInfo::InvalidCacheIndex)
151 {
152 return &DependentObjectsStorage[ArrayIndex];
153 }
154 return nullptr;
155 }
156
157 template<EArrayType TypeIndex>
159 {
160 static_assert(TypeIndex != EArrayType::Count, "Invalid array type index");
161
162 const FDependencyInfo* Entry = DependencyInfos.Find(InternalIndex);
163 const uint32 ArrayIndex = Entry ? Entry->ArrayIndices[TypeIndex] : FDependencyInfo::InvalidCacheIndex;
164 if (ArrayIndex != FDependencyInfo::InvalidCacheIndex)
165 {
166 return MakeArrayView(DependentObjectsStorage[ArrayIndex]);
167 }
169 }
170
172
173private:
174
175 struct FDependencyInfo
176 {
177 constexpr static uint32 InvalidCacheIndex = ~(0U);
178 uint32 ArrayIndices[EArrayType::Count] = { InvalidCacheIndex, InvalidCacheIndex, InvalidCacheIndex, InvalidCacheIndex };
179 uint32 SubObjectConditionalArrayIndex = InvalidCacheIndex;
180 uint32 DependentObjectsInfoArrayIndex = InvalidCacheIndex;
181 uint32 CreationDependencyArrayIndex = InvalidCacheIndex;
182 };
183
184private:
186 FDependencyInfo& GetOrCreateCacheEntry(FInternalNetRefIndex InternalIndex);
187
188 // Map to track the replicated objects with subObjects or dependencies
190
191 // Storage for DependentObjects and SubObjects
192 TSparseArray<FInternalNetRefIndexArray> DependentObjectsStorage;
193
194 // Storage for SubObject conditionals
195 TSparseArray<FSubObjectConditionalsArray> SubObjectConditionalsStorage;
196
197 // Storage for DependentObjects traits and info (bound on the Parent)
198 TSparseArray<FDependentObjectInfoArray> DependentObjectInfosStorage;
199
200 // Storage for creation dependency infos (bound on the Child)
201 TSparseArray<FCreationDependencyInfoArray> CreationDependencyInfosStorage;
202
203};
204
205}
constexpr auto MakeArrayView(OtherRangeType &&Other)
Definition ArrayView.h:873
FPlatformTypes::int8 int8
An 8-bit signed integer.
Definition Platform.h:1121
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
int32 InternalIndex
Definition VulkanMemory.cpp:4036
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition ArrayView.h:139
Definition Array.h:670
Definition UnrealString.h.inl:34
Definition SparseArray.h:524
Definition NetDependencyData.h:34
FCreationDependencyInfoArray & GetOrCreateCreationDependencyInfoArray(FInternalNetRefIndex ChildIndex)
Definition NetDependencyData.cpp:125
FInternalNetRefIndexArray & GetOrCreateInternalChildSubObjectsArray(FInternalNetRefIndex InternalIndex, FSubObjectConditionalsArray *&OutSubObjectConditionals)
Definition NetDependencyData.cpp:104
void FreeCreationDependencyInfoArray(FInternalNetRefIndex ChildIndex)
Definition NetDependencyData.cpp:144
bool GetInternalChildSubObjectAndConditionalArrays(FInternalNetRefIndex InternalIndex, FInternalNetRefIndexArray *&OutChildSubObjectsArray, FSubObjectConditionalsArray *&OutSubObjectConditionals)
Definition NetDependencyData.h:86
TArrayView< const FDependentObjectInfo > GetDependentObjectInfoArray(FInternalNetRefIndex InternalIndex) const
Definition NetDependencyData.h:71
FInternalNetRefIndexArray * GetInternalIndexArray(FInternalNetRefIndex InternalIndex)
Definition NetDependencyData.h:145
bool GetChildSubObjects(FInternalNetRefIndex InternalIndex, FChildSubObjectsInfo &OutInfo) const
Definition NetDependencyData.h:101
TArrayView< const FInternalNetRefIndex > GetInternalIndexArray(FInternalNetRefIndex InternalIndex) const
Definition NetDependencyData.h:158
FDependentObjectInfoArray * GetDependentObjectInfoArray(FInternalNetRefIndex InternalIndex)
Definition NetDependencyData.h:60
TArray< FInternalNetRefIndex, TInlineAllocator< 8 > > FInternalNetRefIndexArray
Definition NetDependencyData.h:38
const FCreationDependencyInfoArray * GetCreationDependencyInfoArray(FInternalNetRefIndex ChildIndex) const
Definition NetDependencyData.h:133
TArray< FInternalNetRefIndex, TInlineAllocator< 2 > > FCreationDependencyInfoArray
Definition NetDependencyData.h:41
TArray< FDependentObjectInfo, TInlineAllocator< 8 > > FDependentObjectInfoArray
Definition NetDependencyData.h:40
FSubObjectConditionalsArray & GetOrCreateSubObjectConditionalsArray(FInternalNetRefIndex InternalIndex)
Definition NetDependencyData.cpp:79
void FreeStoredDependencyDataForObject(FInternalNetRefIndex InternalIndex)
Definition NetDependencyData.cpp:15
FDependentObjectInfoArray & GetOrCreateDependentObjectInfoArray(FInternalNetRefIndex InternalIndex)
Definition NetDependencyData.cpp:60
FInternalNetRefIndexArray & GetOrCreateInternalIndexArray(FInternalNetRefIndex InternalIndex)
Definition NetDependencyData.h:53
FNetDependencyData()
Definition NetDependencyData.cpp:11
FCreationDependencyInfoArray * GetCreationDependencyInfoArray(FInternalNetRefIndex ChildIndex)
Definition NetDependencyData.h:122
TArray< FLifeTimeConditionStorage, TInlineAllocator< 8 > > FSubObjectConditionalsArray
Definition NetDependencyData.h:39
EArrayType
Definition NetDependencyData.h:44
@ DependentParentObjects
Definition NetDependencyData.h:47
@ CreationDependencies
Definition NetDependencyData.h:48
@ Count
Definition NetDependencyData.h:49
@ SubObjects
Definition NetDependencyData.h:45
@ ChildSubObjects
Definition NetDependencyData.h:46
Definition NetworkVersion.cpp:28
uint32 FInternalNetRefIndex
Definition ReplicationStateStorage.h:20
int8 FLifeTimeConditionStorage
Definition NetDependencyData.h:14
EDependentObjectSchedulingHint
Definition ReplicationSystemTypes.h:37
Definition NetDependencyData.h:21
uint32 NumSubObjects
Definition NetDependencyData.h:24
const FInternalNetRefIndex * ChildSubObjects
Definition NetDependencyData.h:22
const FLifeTimeConditionStorage * SubObjectLifeTimeConditions
Definition NetDependencyData.h:23
Definition NetDependencyData.h:28
EDependentObjectSchedulingHint SchedulingHint
Definition NetDependencyData.h:30
FInternalNetRefIndex NetRefIndex
Definition NetDependencyData.h:29