@@ -57,25 +57,40 @@ namespace UnLua
5757
5858 void FContainerRegistry::FindOrAdd (lua_State* L, FScriptArray* ContainerPtr, TSharedPtr<ITypeInterface> ElementType)
5959 {
60- void * Userdata = CacheScriptContainer (L, ContainerPtr, FScriptContainerDesc::Array);
60+ void * Userdata = CacheScriptContainer (L, ContainerPtr, FScriptContainerDesc::Array, [&](void * Cached)
61+ {
62+ const auto Array = (FLuaArray*)Cached;
63+ return Array->Inner == ElementType;
64+ });
65+
6166 if (Userdata)
6267 new (Userdata) FLuaArray (ContainerPtr, ElementType, FLuaArray::OwnedByOther);
6368 }
6469
6570 void FContainerRegistry::FindOrAdd (lua_State* L, FScriptSet* ContainerPtr, TSharedPtr<ITypeInterface> ElementType)
6671 {
67- void * Userdata = CacheScriptContainer (L, ContainerPtr, FScriptContainerDesc::Set);
72+ void * Userdata = CacheScriptContainer (L, ContainerPtr, FScriptContainerDesc::Set, [&](void * Cached)
73+ {
74+ const auto Set = (FLuaSet*)Cached;
75+ return Set->ElementInterface == ElementType;
76+ });
77+
6878 if (Userdata)
6979 new (Userdata) FLuaSet (ContainerPtr, ElementType, FLuaSet::OwnedByOther);
7080 }
7181
7282 void FContainerRegistry::FindOrAdd (lua_State* L, FScriptMap* ContainerPtr, TSharedPtr<ITypeInterface> KeyType, TSharedPtr<ITypeInterface> ValueType)
7383 {
74- void * Userdata = CacheScriptContainer (L, ContainerPtr, FScriptContainerDesc::Map);
84+ void * Userdata = CacheScriptContainer (L, ContainerPtr, FScriptContainerDesc::Map, [&](void * Cached)
85+ {
86+ const auto Map = (FLuaMap*)Cached;
87+ return Map->KeyInterface == KeyType && Map->ValueInterface == ValueType;
88+ });
89+
7590 if (Userdata)
7691 new (Userdata) FLuaMap (ContainerPtr, KeyType, ValueType, FLuaMap::OwnedByOther);
7792 }
78-
93+
7994 void FContainerRegistry::Remove (const FLuaArray* Container)
8095 {
8196 const auto L = Env->GetMainState ();
0 commit comments