mirror of
https://github.com/SabreTools/SabreTools.Serialization.git
synced 2026-04-05 22:01:33 +00:00
Remove Reflection from DatItem<T>
This commit is contained in:
@@ -28,6 +28,12 @@ namespace SabreTools.Metadata.DatItems.Test
|
||||
|
||||
public TestDatItem(string? nameKey) => _nameKey = nameKey;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new TestDatItem()
|
||||
{
|
||||
_internal = _internal.Clone() as TestDatItemModel ?? []
|
||||
};
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override string? GetName() => _nameKey is not null ? _internal.ReadString(_nameKey) : null;
|
||||
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
namespace SabreTools.Metadata.DatItems
|
||||
{
|
||||
/// <summary>
|
||||
/// Base class for all items included in a set that are backed by an internal model
|
||||
/// </summary>
|
||||
public abstract class DatItem<T> : DatItem, IEquatable<DatItem<T>>, IComparable<DatItem<T>>, ICloneable where T : Data.Models.Metadata.DatItem
|
||||
public abstract class DatItem<T> : DatItem, IEquatable<DatItem<T>>, IComparable<DatItem<T>>, ICloneable where T : Data.Models.Metadata.DatItem, new()
|
||||
{
|
||||
#region Constructors
|
||||
|
||||
@@ -15,7 +14,7 @@ namespace SabreTools.Metadata.DatItems
|
||||
/// </summary>
|
||||
public DatItem()
|
||||
{
|
||||
_internal = Activator.CreateInstance<T>();
|
||||
_internal = new T();
|
||||
|
||||
SetName(string.Empty);
|
||||
Write(Data.Models.Metadata.DatItem.TypeKey, ItemType);
|
||||
@@ -37,24 +36,6 @@ namespace SabreTools.Metadata.DatItems
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <summary>
|
||||
/// Clone the DatItem
|
||||
/// </summary>
|
||||
/// <returns>Clone of the DatItem</returns>
|
||||
/// <remarks>
|
||||
/// Throws an exception if there is a DatItem implementation
|
||||
/// that is not a part of this library.
|
||||
/// </remarks>
|
||||
public override object Clone()
|
||||
{
|
||||
var concrete = Array.Find(Assembly.GetExecutingAssembly().GetTypes(),
|
||||
t => !t.IsAbstract && t.IsClass && t.BaseType == typeof(DatItem<T>));
|
||||
|
||||
var clone = Activator.CreateInstance(concrete!);
|
||||
(clone as DatItem<T>)!._internal = _internal?.Clone() as T ?? Activator.CreateInstance<T>();
|
||||
return clone;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get a clone of the current internal model
|
||||
/// </summary>
|
||||
|
||||
@@ -53,6 +53,9 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new Adjuster(_internal.Clone() as Data.Models.Metadata.Adjuster ?? []);
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override Data.Models.Metadata.Adjuster GetInternalClone()
|
||||
{
|
||||
|
||||
@@ -29,5 +29,12 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new Analog(_internal.Clone() as Data.Models.Metadata.Analog ?? []);
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -96,5 +96,12 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new Archive(_internal.Clone() as Data.Models.Metadata.Archive ?? []);
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,5 +35,12 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new BiosSet(_internal.Clone() as Data.Models.Metadata.BiosSet ?? []);
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,5 +40,12 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new Chip(_internal.Clone() as Data.Models.Metadata.Chip ?? []);
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,5 +36,12 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new Condition(_internal.Clone() as Data.Models.Metadata.Condition ?? []);
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,5 +35,12 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new ConfLocation(_internal.Clone() as Data.Models.Metadata.ConfLocation ?? []);
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,6 +53,9 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new ConfSetting(_internal.Clone() as Data.Models.Metadata.ConfSetting ?? []);
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override Data.Models.Metadata.ConfSetting GetInternalClone()
|
||||
{
|
||||
|
||||
@@ -83,6 +83,9 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new Configuration(_internal.Clone() as Data.Models.Metadata.Configuration ?? []);
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override Data.Models.Metadata.Configuration GetInternalClone()
|
||||
{
|
||||
|
||||
@@ -68,5 +68,12 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new Control(_internal.Clone() as Data.Models.Metadata.Control ?? []);
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,5 +45,12 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new DataArea(_internal.Clone() as Data.Models.Metadata.DataArea ?? []);
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -76,6 +76,9 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new Device(_internal.Clone() as Data.Models.Metadata.Device ?? []);
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override Data.Models.Metadata.Device GetInternalClone()
|
||||
{
|
||||
|
||||
@@ -29,5 +29,12 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new DeviceRef(_internal.Clone() as Data.Models.Metadata.DeviceRef ?? []);
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,5 +35,12 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new DipLocation(_internal.Clone() as Data.Models.Metadata.DipLocation ?? []);
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,6 +109,9 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new DipSwitch(_internal.Clone() as Data.Models.Metadata.DipSwitch ?? []);
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override Data.Models.Metadata.DipSwitch GetInternalClone()
|
||||
{
|
||||
|
||||
@@ -53,6 +53,9 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new DipValue(_internal.Clone() as Data.Models.Metadata.DipValue ?? []);
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override Data.Models.Metadata.DipValue GetInternalClone()
|
||||
{
|
||||
|
||||
@@ -100,6 +100,9 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new Disk(_internal.Clone() as Data.Models.Metadata.Disk ?? []);
|
||||
|
||||
/// <summary>
|
||||
/// Convert a disk to the closest Rom approximation
|
||||
/// </summary>
|
||||
|
||||
@@ -30,5 +30,12 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new DiskArea(_internal.Clone() as Data.Models.Metadata.DiskArea ?? []);
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -140,5 +140,12 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new Display(_internal.Clone() as Data.Models.Metadata.Display ?? []);
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -76,5 +76,12 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new Driver(_internal.Clone() as Data.Models.Metadata.Driver ?? []);
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,5 +29,12 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new Extension(_internal.Clone() as Data.Models.Metadata.Extension ?? []);
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,5 +44,12 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new Feature(_internal.Clone() as Data.Models.Metadata.Feature ?? []);
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,5 +29,12 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new Info(_internal.Clone() as Data.Models.Metadata.Info ?? []);
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,6 +73,9 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new Input(_internal.Clone() as Data.Models.Metadata.Input ?? []);
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override Data.Models.Metadata.Input GetInternalClone()
|
||||
{
|
||||
|
||||
@@ -29,5 +29,12 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new Instance(_internal.Clone() as Data.Models.Metadata.Instance ?? []);
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,6 +53,9 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new Media(_internal.Clone() as Data.Models.Metadata.Media ?? []);
|
||||
|
||||
/// <summary>
|
||||
/// Convert a media to the closest Rom approximation
|
||||
/// </summary>
|
||||
|
||||
@@ -40,5 +40,12 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new Part(_internal.Clone() as Data.Models.Metadata.Part ?? []);
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,5 +53,12 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new PartFeature(_internal.Clone() as Data.Models.Metadata.Feature ?? []);
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,6 +52,9 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new Port(_internal.Clone() as Data.Models.Metadata.Port ?? []);
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override Data.Models.Metadata.Port GetInternalClone()
|
||||
{
|
||||
|
||||
@@ -35,5 +35,12 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new RamOption(_internal.Clone() as Data.Models.Metadata.RamOption ?? []);
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,5 +35,12 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new Release(_internal.Clone() as Data.Models.Metadata.Release ?? []);
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -374,6 +374,13 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new Rom(_internal.Clone() as Data.Models.Metadata.Rom ?? []);
|
||||
|
||||
#endregion
|
||||
|
||||
#region Comparision Methods
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -29,5 +29,12 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new Sample(_internal.Clone() as Data.Models.Metadata.Sample ?? []);
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,5 +29,12 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new SharedFeat(_internal.Clone() as Data.Models.Metadata.SharedFeat ?? []);
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,6 +52,9 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new Slot(_internal.Clone() as Data.Models.Metadata.Slot ?? []);
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override Data.Models.Metadata.Slot GetInternalClone()
|
||||
{
|
||||
|
||||
@@ -35,5 +35,12 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new SlotOption(_internal.Clone() as Data.Models.Metadata.SlotOption ?? []);
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,5 +39,12 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new SoftwareList(_internal.Clone() as Data.Models.Metadata.SoftwareList ?? []);
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,5 +35,12 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new Sound(_internal.Clone() as Data.Models.Metadata.Sound ?? []);
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user