MCPcopy Create free account
hub / github.com/Tencent/UnLua / PushSet

Function PushSet

Plugins/UnLua/Source/UnLua/Private/UnLuaBase.cpp:400–432  ·  view source on GitHub ↗

* Push an untyped set (same memory layout with TSet). see PushArray */

Source from the content-addressed store, hash-verified

398 * Push an untyped set (same memory layout with TSet). see PushArray
399 */
400 int32 PushSet(lua_State *L, const FScriptSet *ScriptSet, TSharedPtr<ITypeInterface> TypeInterface, bool bCreateCopy)
401 {
402 if (!L || !ScriptSet || !TypeInterface)
403 {
404 return 0;
405 }
406
407 const auto Registry = FLuaEnv::FindEnvChecked(L).GetContainerRegistry();
408 if (bCreateCopy)
409 {
410 int32 Num = ScriptSet->Num();
411 FLuaSet SrcSet(ScriptSet, TypeInterface, FLuaSet::OwnedByOther);
412 FLuaSet* DestSet = Registry->NewSet(L, TypeInterface, FLuaSet::OwnedBySelf);
413 DestSet->Clear(Num);
414 for (int32 SrcIndex = 0; Num; ++SrcIndex)
415 {
416 if (ScriptSet->IsValidIndex(SrcIndex))
417 {
418 const int32 DestIndex = DestSet->AddDefaultValue_Invalid_NeedsRehash();
419 uint8 *SrcData = SrcSet.GetData(SrcIndex);
420 uint8 *DestData = DestSet->GetData(DestIndex);
421 TypeInterface->Copy(DestData, SrcData);
422 --Num;
423 }
424 }
425 DestSet->Rehash();
426 }
427 else
428 {
429 Registry->FindOrAdd(L, (FScriptSet*)ScriptSet, TypeInterface);
430 }
431 return 1;
432 }
433
434 /**
435 * Push an untyped map (same memory layout with TMap). see PushArray

Callers 1

PushFunction · 0.85

Calls 9

NewSetMethod · 0.80
FindOrAddMethod · 0.80
NumMethod · 0.45
ClearMethod · 0.45
IsValidIndexMethod · 0.45
GetDataMethod · 0.45
CopyMethod · 0.45
RehashMethod · 0.45

Tested by

no test coverage detected