UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ModularFeatureManager.inl
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "uLang/Common/Common.h" // for int32_t
8
11
12namespace uLang
13{
14/* TModularFeatureRegHandle<> -- Definitions
15 ******************************************************************************/
16
17namespace Private
18{
20
22 {
23 private:
26 };
27
30 {
31 public: // intended to be private, to limit access, but clang apparently doesn't follow templatized friend decls
32 template<class FeatureType> friend class TModularFeatureRegHandle;
33
36
39
40 VERSECOMPILER_API static RegistryId GetRegistryId(const char* FeatureName);
41 };
42
46 template<typename T>
47 struct VoidType
48 {
49 using Type = void;
50 };
51 template<typename FeatureType, typename = void>
53 {
54 enum { Value = false };
55 };
56 template<typename FeatureType>
57 struct TFeatureHasUid<FeatureType, typename VoidType<typename FeatureType::CFeatureType>::Type>
58 {
59 using CFeatureType = typename FeatureType::CFeatureType;
60 enum { Value = true };
61 };
62
63 template<class FeatureType>
65 {
67 "Your ModularFeature class is missing its UID -- You must add ULANG_FEATURE_ID_DECL() to the class body.");
68 return CModularFeatureRegistrar::GetRegistryId(FeatureType::FeatureName);
69 }
70}
71
72template<class FeatureType> template<typename... Args_t>
74 : _ModularFeatureRef(TSRef<FeatureType>::New(uLang::ForwardArg<Args_t>(Args)...))
75{
76 Private::CModularFeatureRegistrar::Register(_ModularFeatureRef, Private::GetUidForFeature<FeatureType>());
77}
78
79template<class FeatureType>
84
85/* ModularFeatureManager API -- Definitions
86 ******************************************************************************/
87
88namespace Private
89{
92
93 template<class FeatureType>
95 {
97 static_assert(std::is_same_v<FeatureType, typename FeatureType::CFeatureType>,
98 "You cannot use sub-classes when querying for specific ModularFeatures. You must use the base feature class.");
99 return RegId;
100 }
101}
102
103template<class FeatureType>
105{
106 return Private::GetModularFeatureCount(Private::GetUidForFeatureQuery<FeatureType>());
107}
108
109template<class FeatureType>
111{
113
114 TSPtr<Private::IModularFeature> RegisteredFeature = Private::GetModularFeature(Private::GetUidForFeatureQuery<FeatureType>(), Index);
115 if (RegisteredFeature.IsValid())
116 {
117 // Noteworthy downcast (normally ill advised) -- required since we're storing base IModularFeature pointers
118 // Okay, because we're indexing using a class unique identifier, and we strictly control allocation & registration
119 Result = RegisteredFeature.As<FeatureType>().AsRef();
120 }
121 return Result;
122}
123
124template<class FeatureType>
134
135/* TModularFeatureIterator - Definitions
136 ******************************************************************************/
137
138template<class FeatureType>
143
144template<class FeatureType>
149
150template<class FeatureType>
152{
154 ULANG_ASSERTF(Optional.IsSet(), "Dereferencing an invalid feature iterator -- check validity first.");
155
156 return Optional.GetValue();
157}
158
159template<class FeatureType>
161{
162 return *Get();
163}
164
165template<class FeatureType>
167{
168 return this->Get().Get();
169}
170
171template<class FeatureType>
176
177} // namespace uLang
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
T * New(FMemStackBase &Mem, int32 Count=1, int32 Align=DEFAULT_ALIGNMENT)
Definition MemStack.h:259
const bool
Definition NetworkReplayStreaming.h:178
#define ULANG_FORCEINLINE
Definition Common.h:188
#define ULANG_ASSERTF(expr, format,...)
Definition Common.h:290
Definition SharedPointer.h:28
Definition ModularFeatureManager.inl:30
static VERSECOMPILER_API void SetRegistry(const TSRef< IModularFeatureRegistry > &NewRegistry)
Definition ModularFeatureManager.cpp:123
static VERSECOMPILER_API void Register(const TSRef< IModularFeature > &NewFeature, const RegistryId FeatureId)
Definition ModularFeatureManager.cpp:138
static VERSECOMPILER_API RegistryId GetRegistryId(const char *FeatureName)
Definition ModularFeatureManager.cpp:150
static VERSECOMPILER_API const TSRef< IModularFeatureRegistry > & GetRegistry()
Definition ModularFeatureManager.cpp:118
static VERSECOMPILER_API bool Unregister(const TSRef< IModularFeature > &Feature)
Definition ModularFeatureManager.cpp:144
Definition ModularFeatureManager.cpp:14
Definition ModularFeatureManager.inl:22
Definition ModularFeatureManager.h:91
FeatureType * operator->() const
Definition ModularFeatureManager.inl:166
bool operator!() const
Definition ModularFeatureManager.inl:145
TSRef< FeatureType > Get() const
Definition ModularFeatureManager.inl:151
FeatureType & operator*() const
Definition ModularFeatureManager.inl:160
void operator++()
Definition ModularFeatureManager.inl:172
Definition ModularFeatureManager.h:18
ULANG_FORCEINLINE TModularFeatureRegHandle(Args_t &&... Args)
Definition ModularFeatureManager.inl:73
ULANG_FORCEINLINE ~TModularFeatureRegHandle()
Definition ModularFeatureManager.inl:80
Definition SharedPointerArray.h:21
ULANG_FORCEINLINE int32_t Add(const PointerType &Item)
Definition SharedPointerArray.h:821
Definition SharedPointer.h:77
Definition OverriddenPropertySet.cpp:45
RegistryId GetUidForFeatureQuery()
Definition ModularFeatureManager.inl:94
VERSECOMPILER_API TSPtr< IModularFeature > GetModularFeature(const RegistryId FeatureId, const int32_t Index)
Definition ModularFeatureManager.cpp:175
SymbolId RegistryId
Definition ModularFeatureManager.inl:19
RegistryId GetUidForFeature()
Definition ModularFeatureManager.inl:64
Definition VVMEngineEnvironment.h:23
uint32_t SymbolId
A unique id representing a symbol.
Definition Symbol.h:18
ULANG_FORCEINLINE T && ForwardArg(typename TRemoveReference< T >::Type &Obj)
Definition References.h:115
TSRefArray< FeatureType > GetModularFeaturesOfType()
Definition ModularFeatureManager.inl:125
TOptional< TSRef< FeatureType > > GetModularFeature(const int32_t Index=0)
Definition ModularFeatureManager.inl:110
int32_t GetModularFeatureCount()
Definition ModularFeatureManager.inl:104
U16 Index
Definition radfft.cpp:71
typename FeatureType::CFeatureType CFeatureType
Definition ModularFeatureManager.inl:59
Definition ModularFeatureManager.inl:53
@ Value
Definition ModularFeatureManager.inl:54
Definition ModularFeatureManager.inl:48
void Type
Definition ModularFeatureManager.inl:49
Definition Optional.h:23