* Push an untyped set (same memory layout with TSet). see PushArray */
| 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 |
no test coverage detected