From 9929199f31dae87f0e4a3adf64446e9cfb86456a Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Thu, 26 Mar 2026 23:46:20 -0400 Subject: [PATCH] Remove Reflection from DatItem --- .../DatItemTests.cs | 6 +++++ SabreTools.Metadata.DatItems/DatItemT.cs | 23 ++----------------- .../Formats/Adjuster.cs | 3 +++ .../Formats/Analog.cs | 7 ++++++ .../Formats/Archive.cs | 7 ++++++ .../Formats/BiosSet.cs | 7 ++++++ SabreTools.Metadata.DatItems/Formats/Chip.cs | 7 ++++++ .../Formats/Condition.cs | 7 ++++++ .../Formats/ConfLocation.cs | 7 ++++++ .../Formats/ConfSetting.cs | 3 +++ .../Formats/Configuration.cs | 3 +++ .../Formats/Control.cs | 7 ++++++ .../Formats/DataArea.cs | 7 ++++++ .../Formats/Device.cs | 3 +++ .../Formats/DeviceRef.cs | 7 ++++++ .../Formats/DipLocation.cs | 7 ++++++ .../Formats/DipSwitch.cs | 3 +++ .../Formats/DipValue.cs | 3 +++ SabreTools.Metadata.DatItems/Formats/Disk.cs | 3 +++ .../Formats/DiskArea.cs | 7 ++++++ .../Formats/Display.cs | 7 ++++++ .../Formats/Driver.cs | 7 ++++++ .../Formats/Extension.cs | 7 ++++++ .../Formats/Feature.cs | 7 ++++++ SabreTools.Metadata.DatItems/Formats/Info.cs | 7 ++++++ SabreTools.Metadata.DatItems/Formats/Input.cs | 3 +++ .../Formats/Instance.cs | 7 ++++++ SabreTools.Metadata.DatItems/Formats/Media.cs | 3 +++ SabreTools.Metadata.DatItems/Formats/Part.cs | 7 ++++++ .../Formats/PartFeature.cs | 7 ++++++ SabreTools.Metadata.DatItems/Formats/Port.cs | 3 +++ .../Formats/RamOption.cs | 7 ++++++ .../Formats/Release.cs | 7 ++++++ SabreTools.Metadata.DatItems/Formats/Rom.cs | 7 ++++++ .../Formats/Sample.cs | 7 ++++++ .../Formats/SharedFeat.cs | 7 ++++++ SabreTools.Metadata.DatItems/Formats/Slot.cs | 3 +++ .../Formats/SlotOption.cs | 7 ++++++ .../Formats/SoftwareList.cs | 7 ++++++ SabreTools.Metadata.DatItems/Formats/Sound.cs | 7 ++++++ 40 files changed, 230 insertions(+), 21 deletions(-) diff --git a/SabreTools.Metadata.DatItems.Test/DatItemTests.cs b/SabreTools.Metadata.DatItems.Test/DatItemTests.cs index 09b7331b..68b5c664 100644 --- a/SabreTools.Metadata.DatItems.Test/DatItemTests.cs +++ b/SabreTools.Metadata.DatItems.Test/DatItemTests.cs @@ -28,6 +28,12 @@ namespace SabreTools.Metadata.DatItems.Test public TestDatItem(string? nameKey) => _nameKey = nameKey; + /// + public override object Clone() => new TestDatItem() + { + _internal = _internal.Clone() as TestDatItemModel ?? [] + }; + /// public override string? GetName() => _nameKey is not null ? _internal.ReadString(_nameKey) : null; diff --git a/SabreTools.Metadata.DatItems/DatItemT.cs b/SabreTools.Metadata.DatItems/DatItemT.cs index fbc0e596..c24b7094 100644 --- a/SabreTools.Metadata.DatItems/DatItemT.cs +++ b/SabreTools.Metadata.DatItems/DatItemT.cs @@ -1,12 +1,11 @@ using System; -using System.Reflection; namespace SabreTools.Metadata.DatItems { /// /// Base class for all items included in a set that are backed by an internal model /// - public abstract class DatItem : DatItem, IEquatable>, IComparable>, ICloneable where T : Data.Models.Metadata.DatItem + public abstract class DatItem : DatItem, IEquatable>, IComparable>, ICloneable where T : Data.Models.Metadata.DatItem, new() { #region Constructors @@ -15,7 +14,7 @@ namespace SabreTools.Metadata.DatItems /// public DatItem() { - _internal = Activator.CreateInstance(); + _internal = new T(); SetName(string.Empty); Write(Data.Models.Metadata.DatItem.TypeKey, ItemType); @@ -37,24 +36,6 @@ namespace SabreTools.Metadata.DatItems #region Cloning Methods - /// - /// Clone the DatItem - /// - /// Clone of the DatItem - /// - /// Throws an exception if there is a DatItem implementation - /// that is not a part of this library. - /// - public override object Clone() - { - var concrete = Array.Find(Assembly.GetExecutingAssembly().GetTypes(), - t => !t.IsAbstract && t.IsClass && t.BaseType == typeof(DatItem)); - - var clone = Activator.CreateInstance(concrete!); - (clone as DatItem)!._internal = _internal?.Clone() as T ?? Activator.CreateInstance(); - return clone; - } - /// /// Get a clone of the current internal model /// diff --git a/SabreTools.Metadata.DatItems/Formats/Adjuster.cs b/SabreTools.Metadata.DatItems/Formats/Adjuster.cs index de12d320..6112a014 100644 --- a/SabreTools.Metadata.DatItems/Formats/Adjuster.cs +++ b/SabreTools.Metadata.DatItems/Formats/Adjuster.cs @@ -53,6 +53,9 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods + /// + public override object Clone() => new Adjuster(_internal.Clone() as Data.Models.Metadata.Adjuster ?? []); + /// public override Data.Models.Metadata.Adjuster GetInternalClone() { diff --git a/SabreTools.Metadata.DatItems/Formats/Analog.cs b/SabreTools.Metadata.DatItems/Formats/Analog.cs index fd1ee3fa..610dc644 100644 --- a/SabreTools.Metadata.DatItems/Formats/Analog.cs +++ b/SabreTools.Metadata.DatItems/Formats/Analog.cs @@ -29,5 +29,12 @@ namespace SabreTools.Metadata.DatItems.Formats } #endregion + + #region Cloning Methods + + /// + public override object Clone() => new Analog(_internal.Clone() as Data.Models.Metadata.Analog ?? []); + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/Archive.cs b/SabreTools.Metadata.DatItems/Formats/Archive.cs index df1c1321..ba2bed03 100644 --- a/SabreTools.Metadata.DatItems/Formats/Archive.cs +++ b/SabreTools.Metadata.DatItems/Formats/Archive.cs @@ -96,5 +96,12 @@ namespace SabreTools.Metadata.DatItems.Formats } #endregion + + #region Cloning Methods + + /// + public override object Clone() => new Archive(_internal.Clone() as Data.Models.Metadata.Archive ?? []); + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/BiosSet.cs b/SabreTools.Metadata.DatItems/Formats/BiosSet.cs index 429745f3..cb92be6b 100644 --- a/SabreTools.Metadata.DatItems/Formats/BiosSet.cs +++ b/SabreTools.Metadata.DatItems/Formats/BiosSet.cs @@ -35,5 +35,12 @@ namespace SabreTools.Metadata.DatItems.Formats } #endregion + + #region Cloning Methods + + /// + public override object Clone() => new BiosSet(_internal.Clone() as Data.Models.Metadata.BiosSet ?? []); + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/Chip.cs b/SabreTools.Metadata.DatItems/Formats/Chip.cs index 5fcddf7f..18df99e3 100644 --- a/SabreTools.Metadata.DatItems/Formats/Chip.cs +++ b/SabreTools.Metadata.DatItems/Formats/Chip.cs @@ -40,5 +40,12 @@ namespace SabreTools.Metadata.DatItems.Formats } #endregion + + #region Cloning Methods + + /// + public override object Clone() => new Chip(_internal.Clone() as Data.Models.Metadata.Chip ?? []); + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/Condition.cs b/SabreTools.Metadata.DatItems/Formats/Condition.cs index 81c93c97..9d0011bf 100644 --- a/SabreTools.Metadata.DatItems/Formats/Condition.cs +++ b/SabreTools.Metadata.DatItems/Formats/Condition.cs @@ -36,5 +36,12 @@ namespace SabreTools.Metadata.DatItems.Formats } #endregion + + #region Cloning Methods + + /// + public override object Clone() => new Condition(_internal.Clone() as Data.Models.Metadata.Condition ?? []); + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/ConfLocation.cs b/SabreTools.Metadata.DatItems/Formats/ConfLocation.cs index 610a52ec..71e0e90c 100644 --- a/SabreTools.Metadata.DatItems/Formats/ConfLocation.cs +++ b/SabreTools.Metadata.DatItems/Formats/ConfLocation.cs @@ -35,5 +35,12 @@ namespace SabreTools.Metadata.DatItems.Formats } #endregion + + #region Cloning Methods + + /// + public override object Clone() => new ConfLocation(_internal.Clone() as Data.Models.Metadata.ConfLocation ?? []); + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/ConfSetting.cs b/SabreTools.Metadata.DatItems/Formats/ConfSetting.cs index 6768a728..2bf6ee52 100644 --- a/SabreTools.Metadata.DatItems/Formats/ConfSetting.cs +++ b/SabreTools.Metadata.DatItems/Formats/ConfSetting.cs @@ -53,6 +53,9 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods + /// + public override object Clone() => new ConfSetting(_internal.Clone() as Data.Models.Metadata.ConfSetting ?? []); + /// public override Data.Models.Metadata.ConfSetting GetInternalClone() { diff --git a/SabreTools.Metadata.DatItems/Formats/Configuration.cs b/SabreTools.Metadata.DatItems/Formats/Configuration.cs index 9d9e9741..aa1e34e7 100644 --- a/SabreTools.Metadata.DatItems/Formats/Configuration.cs +++ b/SabreTools.Metadata.DatItems/Formats/Configuration.cs @@ -83,6 +83,9 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods + /// + public override object Clone() => new Configuration(_internal.Clone() as Data.Models.Metadata.Configuration ?? []); + /// public override Data.Models.Metadata.Configuration GetInternalClone() { diff --git a/SabreTools.Metadata.DatItems/Formats/Control.cs b/SabreTools.Metadata.DatItems/Formats/Control.cs index bdc8adce..ca837969 100644 --- a/SabreTools.Metadata.DatItems/Formats/Control.cs +++ b/SabreTools.Metadata.DatItems/Formats/Control.cs @@ -68,5 +68,12 @@ namespace SabreTools.Metadata.DatItems.Formats } #endregion + + #region Cloning Methods + + /// + public override object Clone() => new Control(_internal.Clone() as Data.Models.Metadata.Control ?? []); + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/DataArea.cs b/SabreTools.Metadata.DatItems/Formats/DataArea.cs index 32a6d55e..f436a9db 100644 --- a/SabreTools.Metadata.DatItems/Formats/DataArea.cs +++ b/SabreTools.Metadata.DatItems/Formats/DataArea.cs @@ -45,5 +45,12 @@ namespace SabreTools.Metadata.DatItems.Formats } #endregion + + #region Cloning Methods + + /// + public override object Clone() => new DataArea(_internal.Clone() as Data.Models.Metadata.DataArea ?? []); + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/Device.cs b/SabreTools.Metadata.DatItems/Formats/Device.cs index 64884aea..80c8e92e 100644 --- a/SabreTools.Metadata.DatItems/Formats/Device.cs +++ b/SabreTools.Metadata.DatItems/Formats/Device.cs @@ -76,6 +76,9 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods + /// + public override object Clone() => new Device(_internal.Clone() as Data.Models.Metadata.Device ?? []); + /// public override Data.Models.Metadata.Device GetInternalClone() { diff --git a/SabreTools.Metadata.DatItems/Formats/DeviceRef.cs b/SabreTools.Metadata.DatItems/Formats/DeviceRef.cs index 071dd5be..656ffd97 100644 --- a/SabreTools.Metadata.DatItems/Formats/DeviceRef.cs +++ b/SabreTools.Metadata.DatItems/Formats/DeviceRef.cs @@ -29,5 +29,12 @@ namespace SabreTools.Metadata.DatItems.Formats } #endregion + + #region Cloning Methods + + /// + public override object Clone() => new DeviceRef(_internal.Clone() as Data.Models.Metadata.DeviceRef ?? []); + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/DipLocation.cs b/SabreTools.Metadata.DatItems/Formats/DipLocation.cs index 5ef31dc9..da5beb4d 100644 --- a/SabreTools.Metadata.DatItems/Formats/DipLocation.cs +++ b/SabreTools.Metadata.DatItems/Formats/DipLocation.cs @@ -35,5 +35,12 @@ namespace SabreTools.Metadata.DatItems.Formats } #endregion + + #region Cloning Methods + + /// + public override object Clone() => new DipLocation(_internal.Clone() as Data.Models.Metadata.DipLocation ?? []); + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs b/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs index dc7e36e9..71f0e90a 100644 --- a/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs +++ b/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs @@ -109,6 +109,9 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods + /// + public override object Clone() => new DipSwitch(_internal.Clone() as Data.Models.Metadata.DipSwitch ?? []); + /// public override Data.Models.Metadata.DipSwitch GetInternalClone() { diff --git a/SabreTools.Metadata.DatItems/Formats/DipValue.cs b/SabreTools.Metadata.DatItems/Formats/DipValue.cs index b1495ab4..86b2df6e 100644 --- a/SabreTools.Metadata.DatItems/Formats/DipValue.cs +++ b/SabreTools.Metadata.DatItems/Formats/DipValue.cs @@ -53,6 +53,9 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods + /// + public override object Clone() => new DipValue(_internal.Clone() as Data.Models.Metadata.DipValue ?? []); + /// public override Data.Models.Metadata.DipValue GetInternalClone() { diff --git a/SabreTools.Metadata.DatItems/Formats/Disk.cs b/SabreTools.Metadata.DatItems/Formats/Disk.cs index 44f4400a..fe9e3243 100644 --- a/SabreTools.Metadata.DatItems/Formats/Disk.cs +++ b/SabreTools.Metadata.DatItems/Formats/Disk.cs @@ -100,6 +100,9 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods + /// + public override object Clone() => new Disk(_internal.Clone() as Data.Models.Metadata.Disk ?? []); + /// /// Convert a disk to the closest Rom approximation /// diff --git a/SabreTools.Metadata.DatItems/Formats/DiskArea.cs b/SabreTools.Metadata.DatItems/Formats/DiskArea.cs index f93f5b84..ba8679eb 100644 --- a/SabreTools.Metadata.DatItems/Formats/DiskArea.cs +++ b/SabreTools.Metadata.DatItems/Formats/DiskArea.cs @@ -30,5 +30,12 @@ namespace SabreTools.Metadata.DatItems.Formats } #endregion + + #region Cloning Methods + + /// + public override object Clone() => new DiskArea(_internal.Clone() as Data.Models.Metadata.DiskArea ?? []); + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/Display.cs b/SabreTools.Metadata.DatItems/Formats/Display.cs index df36e334..8b8b836e 100644 --- a/SabreTools.Metadata.DatItems/Formats/Display.cs +++ b/SabreTools.Metadata.DatItems/Formats/Display.cs @@ -140,5 +140,12 @@ namespace SabreTools.Metadata.DatItems.Formats } #endregion + + #region Cloning Methods + + /// + public override object Clone() => new Display(_internal.Clone() as Data.Models.Metadata.Display ?? []); + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/Driver.cs b/SabreTools.Metadata.DatItems/Formats/Driver.cs index fb4695fe..47a01f39 100644 --- a/SabreTools.Metadata.DatItems/Formats/Driver.cs +++ b/SabreTools.Metadata.DatItems/Formats/Driver.cs @@ -76,5 +76,12 @@ namespace SabreTools.Metadata.DatItems.Formats } #endregion + + #region Cloning Methods + + /// + public override object Clone() => new Driver(_internal.Clone() as Data.Models.Metadata.Driver ?? []); + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/Extension.cs b/SabreTools.Metadata.DatItems/Formats/Extension.cs index a1568d27..a5954714 100644 --- a/SabreTools.Metadata.DatItems/Formats/Extension.cs +++ b/SabreTools.Metadata.DatItems/Formats/Extension.cs @@ -29,5 +29,12 @@ namespace SabreTools.Metadata.DatItems.Formats } #endregion + + #region Cloning Methods + + /// + public override object Clone() => new Extension(_internal.Clone() as Data.Models.Metadata.Extension ?? []); + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/Feature.cs b/SabreTools.Metadata.DatItems/Formats/Feature.cs index 5ca812ee..34defc68 100644 --- a/SabreTools.Metadata.DatItems/Formats/Feature.cs +++ b/SabreTools.Metadata.DatItems/Formats/Feature.cs @@ -44,5 +44,12 @@ namespace SabreTools.Metadata.DatItems.Formats } #endregion + + #region Cloning Methods + + /// + public override object Clone() => new Feature(_internal.Clone() as Data.Models.Metadata.Feature ?? []); + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/Info.cs b/SabreTools.Metadata.DatItems/Formats/Info.cs index 26513be4..29cd1c44 100644 --- a/SabreTools.Metadata.DatItems/Formats/Info.cs +++ b/SabreTools.Metadata.DatItems/Formats/Info.cs @@ -29,5 +29,12 @@ namespace SabreTools.Metadata.DatItems.Formats } #endregion + + #region Cloning Methods + + /// + public override object Clone() => new Info(_internal.Clone() as Data.Models.Metadata.Info ?? []); + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/Input.cs b/SabreTools.Metadata.DatItems/Formats/Input.cs index ed29ab64..2517eef2 100644 --- a/SabreTools.Metadata.DatItems/Formats/Input.cs +++ b/SabreTools.Metadata.DatItems/Formats/Input.cs @@ -73,6 +73,9 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods + /// + public override object Clone() => new Input(_internal.Clone() as Data.Models.Metadata.Input ?? []); + /// public override Data.Models.Metadata.Input GetInternalClone() { diff --git a/SabreTools.Metadata.DatItems/Formats/Instance.cs b/SabreTools.Metadata.DatItems/Formats/Instance.cs index 0de20bf4..2f5892da 100644 --- a/SabreTools.Metadata.DatItems/Formats/Instance.cs +++ b/SabreTools.Metadata.DatItems/Formats/Instance.cs @@ -29,5 +29,12 @@ namespace SabreTools.Metadata.DatItems.Formats } #endregion + + #region Cloning Methods + + /// + public override object Clone() => new Instance(_internal.Clone() as Data.Models.Metadata.Instance ?? []); + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/Media.cs b/SabreTools.Metadata.DatItems/Formats/Media.cs index 69154cbf..7ab8144d 100644 --- a/SabreTools.Metadata.DatItems/Formats/Media.cs +++ b/SabreTools.Metadata.DatItems/Formats/Media.cs @@ -53,6 +53,9 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods + /// + public override object Clone() => new Media(_internal.Clone() as Data.Models.Metadata.Media ?? []); + /// /// Convert a media to the closest Rom approximation /// diff --git a/SabreTools.Metadata.DatItems/Formats/Part.cs b/SabreTools.Metadata.DatItems/Formats/Part.cs index a6b409e7..b5dd61c3 100644 --- a/SabreTools.Metadata.DatItems/Formats/Part.cs +++ b/SabreTools.Metadata.DatItems/Formats/Part.cs @@ -40,5 +40,12 @@ namespace SabreTools.Metadata.DatItems.Formats } #endregion + + #region Cloning Methods + + /// + public override object Clone() => new Part(_internal.Clone() as Data.Models.Metadata.Part ?? []); + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/PartFeature.cs b/SabreTools.Metadata.DatItems/Formats/PartFeature.cs index 945f2f7c..ae4ff5ba 100644 --- a/SabreTools.Metadata.DatItems/Formats/PartFeature.cs +++ b/SabreTools.Metadata.DatItems/Formats/PartFeature.cs @@ -53,5 +53,12 @@ namespace SabreTools.Metadata.DatItems.Formats } #endregion + + #region Cloning Methods + + /// + public override object Clone() => new PartFeature(_internal.Clone() as Data.Models.Metadata.Feature ?? []); + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/Port.cs b/SabreTools.Metadata.DatItems/Formats/Port.cs index c809ed4c..168c5f55 100644 --- a/SabreTools.Metadata.DatItems/Formats/Port.cs +++ b/SabreTools.Metadata.DatItems/Formats/Port.cs @@ -52,6 +52,9 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods + /// + public override object Clone() => new Port(_internal.Clone() as Data.Models.Metadata.Port ?? []); + /// public override Data.Models.Metadata.Port GetInternalClone() { diff --git a/SabreTools.Metadata.DatItems/Formats/RamOption.cs b/SabreTools.Metadata.DatItems/Formats/RamOption.cs index dca4d71d..6c90c80b 100644 --- a/SabreTools.Metadata.DatItems/Formats/RamOption.cs +++ b/SabreTools.Metadata.DatItems/Formats/RamOption.cs @@ -35,5 +35,12 @@ namespace SabreTools.Metadata.DatItems.Formats } #endregion + + #region Cloning Methods + + /// + public override object Clone() => new RamOption(_internal.Clone() as Data.Models.Metadata.RamOption ?? []); + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/Release.cs b/SabreTools.Metadata.DatItems/Formats/Release.cs index c0da36c5..5a50584a 100644 --- a/SabreTools.Metadata.DatItems/Formats/Release.cs +++ b/SabreTools.Metadata.DatItems/Formats/Release.cs @@ -35,5 +35,12 @@ namespace SabreTools.Metadata.DatItems.Formats } #endregion + + #region Cloning Methods + + /// + public override object Clone() => new Release(_internal.Clone() as Data.Models.Metadata.Release ?? []); + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/Rom.cs b/SabreTools.Metadata.DatItems/Formats/Rom.cs index 246b0657..f7b20fa0 100644 --- a/SabreTools.Metadata.DatItems/Formats/Rom.cs +++ b/SabreTools.Metadata.DatItems/Formats/Rom.cs @@ -374,6 +374,13 @@ namespace SabreTools.Metadata.DatItems.Formats #endregion + #region Cloning Methods + + /// + public override object Clone() => new Rom(_internal.Clone() as Data.Models.Metadata.Rom ?? []); + + #endregion + #region Comparision Methods /// diff --git a/SabreTools.Metadata.DatItems/Formats/Sample.cs b/SabreTools.Metadata.DatItems/Formats/Sample.cs index 9cb1e7a5..2fe98f31 100644 --- a/SabreTools.Metadata.DatItems/Formats/Sample.cs +++ b/SabreTools.Metadata.DatItems/Formats/Sample.cs @@ -29,5 +29,12 @@ namespace SabreTools.Metadata.DatItems.Formats } #endregion + + #region Cloning Methods + + /// + public override object Clone() => new Sample(_internal.Clone() as Data.Models.Metadata.Sample ?? []); + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/SharedFeat.cs b/SabreTools.Metadata.DatItems/Formats/SharedFeat.cs index a978d966..e7bf6d93 100644 --- a/SabreTools.Metadata.DatItems/Formats/SharedFeat.cs +++ b/SabreTools.Metadata.DatItems/Formats/SharedFeat.cs @@ -29,5 +29,12 @@ namespace SabreTools.Metadata.DatItems.Formats } #endregion + + #region Cloning Methods + + /// + public override object Clone() => new SharedFeat(_internal.Clone() as Data.Models.Metadata.SharedFeat ?? []); + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/Slot.cs b/SabreTools.Metadata.DatItems/Formats/Slot.cs index c363baeb..d666df9b 100644 --- a/SabreTools.Metadata.DatItems/Formats/Slot.cs +++ b/SabreTools.Metadata.DatItems/Formats/Slot.cs @@ -52,6 +52,9 @@ namespace SabreTools.Metadata.DatItems.Formats #region Cloning Methods + /// + public override object Clone() => new Slot(_internal.Clone() as Data.Models.Metadata.Slot ?? []); + /// public override Data.Models.Metadata.Slot GetInternalClone() { diff --git a/SabreTools.Metadata.DatItems/Formats/SlotOption.cs b/SabreTools.Metadata.DatItems/Formats/SlotOption.cs index c8aa219c..f36080b1 100644 --- a/SabreTools.Metadata.DatItems/Formats/SlotOption.cs +++ b/SabreTools.Metadata.DatItems/Formats/SlotOption.cs @@ -35,5 +35,12 @@ namespace SabreTools.Metadata.DatItems.Formats } #endregion + + #region Cloning Methods + + /// + public override object Clone() => new SlotOption(_internal.Clone() as Data.Models.Metadata.SlotOption ?? []); + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/SoftwareList.cs b/SabreTools.Metadata.DatItems/Formats/SoftwareList.cs index e9d67a9e..ddf1ab95 100644 --- a/SabreTools.Metadata.DatItems/Formats/SoftwareList.cs +++ b/SabreTools.Metadata.DatItems/Formats/SoftwareList.cs @@ -39,5 +39,12 @@ namespace SabreTools.Metadata.DatItems.Formats } #endregion + + #region Cloning Methods + + /// + public override object Clone() => new SoftwareList(_internal.Clone() as Data.Models.Metadata.SoftwareList ?? []); + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/Sound.cs b/SabreTools.Metadata.DatItems/Formats/Sound.cs index b1ffa6d8..85649293 100644 --- a/SabreTools.Metadata.DatItems/Formats/Sound.cs +++ b/SabreTools.Metadata.DatItems/Formats/Sound.cs @@ -35,5 +35,12 @@ namespace SabreTools.Metadata.DatItems.Formats } #endregion + + #region Cloning Methods + + /// + public override object Clone() => new Sound(_internal.Clone() as Data.Models.Metadata.Sound ?? []); + + #endregion } }