UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
CoreRedirectsContext.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4#include "Containers/Map.h"
10
11#define UE_API COREUOBJECT_API
12
21{
22 enum class EFlags : uint32
23 {
24 None = 0,
25 DebugMode = 1 << 0, // Enables extra validation and logging
26 ValidateAddedRedirects = 1 << 1, // Validates CoreRedirects are well-formed before addition
27 UseRedirectionSummary = 1 << 2, // New redirects will be appended to the RedirectionSummary
28
30 };
31
32 /*
33 * Returns the global context used by FCoreRedirects when no new context has been provided as an override.
34 */
36
37 /*
38 * Returns the current context used by FCoreRedirects for the current thread. If no new context has been applied,
39 * a global context is used for all threads.
40 */
42
43 /*
44 * Changes the context for FCoreRedirects calls to use for the current thread. The passed in context must remain
45 * valid until PopThreadContext is called.
46 */
48
53
56
62
64 const bool IsInitialized() const;
65
67 const bool IsInDebugMode() const;
68
70 EFlags GetFlags() const;
71
73 void SetFlags(EFlags Flags);
74
76 const bool HasValidated() const;
77
80
82 FCoreRedirects::FRedirectTypeMap& GetRedirectTypeMap();
83
84#if WITH_EDITOR
85 FRedirectionSummary& GetRedirectionSummary();
86#endif
87
89
90private:
93 void SetHasValidated();
94
101 struct FRWLockWithExclusiveRecursion
102 {
103 void ReadLock();
104
105 void WriteLock();
106
107 void WriteUnlock();
108
109 void ReadUnlock();
110
111 private:
112 uint32 LoadWriteLockOwnerThreadIdRelaxed() const;
113 void StoreWriteLockOwnerThreadId(uint32 ThreadId, std::memory_order Order = std::memory_order_seq_cst);
114
115 FTransactionallySafeRWLock InternalLock;
116 std::atomic<uint32> WriteLockOwnerThreadId = 0;
117 int32 RecursionCount = 0;
118 };
121
122private:
123 std::atomic<bool> bInitialized;
124 std::atomic<EFlags> Flags;
125 bool bValidatedOnce;
127 FCoreRedirects::FRedirectTypeMap RedirectTypeMap;
129 FRWLockWithExclusiveRecursion RWLock;
130
131#if WITH_EDITOR
132 FRedirectionSummary RedirectionSummary;
133#endif
134};
136
150
151
156{
157public:
164
166 {
167 if (NeedsUnlock)
168 {
169 Context.RWLock.ReadUnlock();
170 }
171 }
172
174
175protected:
176 enum class EInitFlag
177 {
179 };
180
185
188};
189
207
209// Inline implementations
211
214{
215 // Use an atomic variable rather than take a read lock because we might already be under a read lock
216 return bInitialized.load(std::memory_order_acquire);
217}
218
221{
222 return Flags.load(std::memory_order_relaxed) == EFlags::DebugMode;
223}
224
227{
228 // Use an atomic variable rather than take a read lock because we might already be under a read lock
229 return Flags.load(std::memory_order_relaxed);
230}
231
234{
235 return Flags.store(NewFlags, std::memory_order_relaxed);
236}
237
239inline const bool FCoreRedirectsContext::HasValidated() const
240{
241 return bValidatedOnce;
242}
243
245inline void FCoreRedirectsContext::SetHasValidated()
246{
247 bValidatedOnce = true;
248}
249
255
257inline FCoreRedirects::FRedirectTypeMap& FCoreRedirectsContext::GetRedirectTypeMap()
258{
259 return RedirectTypeMap;
260}
261
262#if WITH_EDITOR
263inline FRedirectionSummary& FCoreRedirectsContext::GetRedirectionSummary()
264{
265 return RedirectionSummary;
266}
267#endif
268
269#undef UE_API
#define UE_API
Definition CoreRedirectsContext.h:11
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
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
return true
Definition ExternalRpcRegistry.cpp:601
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition UnrealString.h.inl:34
Definition CriticalSection.h:14
@ false
Definition radaudio_common.h:23
Definition CoreRedirectsContext.h:21
UE_API void InitializeContext()
Definition CoreRedirectsContext.cpp:42
EFlags
Definition CoreRedirectsContext.h:23
static UE_API FCoreRedirectsContext & GetThreadContext()
Definition CoreRedirectsContext.cpp:98
FCoreRedirects::FRedirectTypeMap & GetRedirectTypeMap()
Definition CoreRedirectsContext.h:257
UE_API FCoreRedirectsContext()
Definition CoreRedirectsContext.cpp:15
void SetFlags(EFlags Flags)
Definition CoreRedirectsContext.h:233
TMap< FName, ECoreRedirectFlags > & GetConfigKeyMap()
Definition CoreRedirectsContext.h:251
static UE_API void SetThreadContext(FCoreRedirectsContext &NewContext)
Definition CoreRedirectsContext.cpp:104
static UE_API FCoreRedirectsContext & GetGlobalContext()
Definition CoreRedirectsContext.cpp:92
EFlags GetFlags() const
Definition CoreRedirectsContext.h:226
UE_API FCoreRedirectsContext & operator=(const FCoreRedirectsContext &Other)
Definition CoreRedirectsContext.cpp:31
const bool IsInitialized() const
Definition CoreRedirectsContext.h:213
const bool IsInDebugMode() const
Definition CoreRedirectsContext.h:220
const bool HasValidated() const
Definition CoreRedirectsContext.h:239
static COREUOBJECT_API void ValidateAllRedirects()
Definition CoreRedirects.cpp:3074
Definition CoreRedirectsContext.h:142
FCoreRedirectsContext & ContextToRestore
Definition CoreRedirectsContext.h:148
FCoreRedirectsContext ScopeContext
Definition CoreRedirectsContext.h:147
UE_API FScopeCoreRedirectsContext()
Definition CoreRedirectsContext.cpp:110
UE_API ~FScopeCoreRedirectsContext()
Definition CoreRedirectsContext.cpp:125
Definition CoreRedirectsContext.h:156
EInitFlag
Definition CoreRedirectsContext.h:177
bool NeedsUnlock
Definition CoreRedirectsContext.h:187
FScopeCoreRedirectsReadLockedContext(FCoreRedirectsContext &InContext, EInitFlag Unused)
Definition CoreRedirectsContext.h:181
~FScopeCoreRedirectsReadLockedContext()
Definition CoreRedirectsContext.h:165
FCoreRedirectsContext & Context
Definition CoreRedirectsContext.h:186
FCoreRedirectsContext & Get()
Definition CoreRedirectsContext.h:173
FScopeCoreRedirectsReadLockedContext(FCoreRedirectsContext &InContext)
Definition CoreRedirectsContext.h:158
Definition CoreRedirectsContext.h:194
~FScopeCoreRedirectsWriteLockedContext()
Definition CoreRedirectsContext.h:202
FScopeCoreRedirectsWriteLockedContext(FCoreRedirectsContext &InContext)
Definition CoreRedirectsContext.h:196