Files
RobustToolbox/Robust.Shared/Serialization/Manager/Result/DeserializedArray.cs
T
DrSmugleafandGitHub 5f31036ab2 Cleanup serialization code (#1735)
* Cleanup serialization code

* Merge fixes

* american codebase
2021-05-02 14:23:39 +02:00

73 lines
2.1 KiB
C#

using System;
using System.Collections.Generic;
namespace Robust.Shared.Serialization.Manager.Result
{
public class DeserializedArray : DeserializationResult
{
public DeserializedArray(Array array, IEnumerable<DeserializationResult> mappings)
{
Value = array;
Mappings = mappings;
}
public Array Value { get; }
public IEnumerable<DeserializationResult> Mappings { get; }
public override object RawValue => Value;
public override DeserializationResult PushInheritanceFrom(DeserializationResult source)
{
var sourceCollection = source.Cast<DeserializedArray>();
var valueList = (Array) Activator.CreateInstance(Value.GetType(), Value.Length)!;
var resList = new List<DeserializationResult>();
var i = 0;
foreach (var oldRes in sourceCollection.Mappings)
{
var newRes = oldRes.Copy();
valueList.SetValue(newRes.RawValue, i);
resList.Add(newRes);
i++;
}
i = 0;
foreach (var oldRes in Mappings)
{
var newRes = oldRes.Copy();
valueList.SetValue(newRes.RawValue, i);
resList.Add(newRes);
i++;
}
return new DeserializedArray(valueList, resList);
}
public override DeserializationResult Copy()
{
var valueList = (Array) Activator.CreateInstance(Value.GetType(), Value.Length)!;
var resList = new List<DeserializationResult>();
var i = 0;
foreach (var oldRes in Mappings)
{
var newRes = oldRes.Copy();
valueList.SetValue(newRes.RawValue, i);
resList.Add(newRes);
i++;
}
return new DeserializedArray(valueList, resList);
}
public override void CallAfterDeserializationHook()
{
foreach (var elem in Mappings)
{
elem.CallAfterDeserializationHook();
}
}
}
}