MCPcopy Create free account
hub / github.com/FlaxEngine/FlaxEngine / GetClass

Function GetClass

Source/Engine/Scripting/Internal/ManagedDictionary.h:157–192  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

155 }
156
157 static MTypeObject* GetClass(MType* keyType, MType* valueType)
158 {
159 // Check if the generic type was generated earlier
160 KeyValueType cacheKey = { keyType, valueType };
161 MTypeObject* dictionaryType;
162 if (CachedTypes.TryGet(cacheKey, dictionaryType))
163 return dictionaryType;
164
165 MTypeObject* genericType = MUtils::GetType(StdTypesContainer::Instance()->DictionaryClass);
166#if USE_NETCORE
167 MArray* genericArgs = MCore::Array::New(MCore::TypeCache::IntPtr, 2);
168#else
169 MArray* genericArgs = MCore::Array::New(MCore::TypeCache::Object, 2);
170#endif
171 MTypeObject** genericArgsPtr = MCore::Array::GetAddress<MTypeObject*>(genericArgs);
172 genericArgsPtr[0] = INTERNAL_TYPE_GET_OBJECT(keyType);
173 genericArgsPtr[1] = INTERNAL_TYPE_GET_OBJECT(valueType);
174
175 MObject* exception = nullptr;
176#if !USE_MONO_AOT
177 dictionaryType = MakeGenericType(nullptr, genericType, genericArgs, &exception);
178#else
179 void* params[2];
180 params[0] = genericType;
181 params[1] = genericArgs;
182 dictionaryType = (MTypeObject*)MakeGenericType->Invoke(nullptr, params, &exception);
183#endif
184 if (exception)
185 {
186 MException ex(exception);
187 ex.Log(LogType::Error, TEXT(""));
188 return nullptr;
189 }
190 CachedTypes.Add(cacheKey, dictionaryType);
191 return dictionaryType;
192 }
193
194 static ManagedDictionary New(MType* keyType, MType* valueType)
195 {

Callers 5

ToManagedFunction · 0.70
NewFunction · 0.70
GetValueFunction · 0.70

Calls 7

GetTypeFunction · 0.85
NewFunction · 0.70
InstanceClass · 0.50
TryGetMethod · 0.45
InvokeMethod · 0.45
LogMethod · 0.45
AddMethod · 0.45

Tested by

no test coverage detected