From 1e27b5d720319cdb19dec9b710ee567127131a7a Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Thu, 2 Apr 2026 15:49:06 -0400 Subject: [PATCH] Make "simple" metadata items cloneable --- SabreTools.Data.Models/Metadata/Analog.cs | 15 +++++++++++++-- SabreTools.Data.Models/Metadata/BiosSet.cs | 15 ++++++++++++++- SabreTools.Data.Models/Metadata/Blank.cs | 6 +++++- SabreTools.Data.Models/Metadata/Condition.cs | 16 +++++++++++++++- SabreTools.Data.Models/Metadata/DeviceRef.cs | 13 ++++++++++++- SabreTools.Data.Models/Metadata/Extension.cs | 13 ++++++++++++- SabreTools.Data.Models/Metadata/Feature.cs | 17 ++++++++++++++++- SabreTools.Data.Models/Metadata/Info.cs | 14 +++++++++++++- SabreTools.Data.Models/Metadata/Instance.cs | 14 +++++++++++++- SabreTools.Data.Models/Metadata/RamOption.cs | 15 ++++++++++++++- SabreTools.Data.Models/Metadata/Sample.cs | 13 ++++++++++++- SabreTools.Data.Models/Metadata/SharedFeat.cs | 14 +++++++++++++- SabreTools.Data.Models/Metadata/SlotOption.cs | 15 ++++++++++++++- 13 files changed, 166 insertions(+), 14 deletions(-) diff --git a/SabreTools.Data.Models/Metadata/Analog.cs b/SabreTools.Data.Models/Metadata/Analog.cs index 4b274e21..f8b06d45 100644 --- a/SabreTools.Data.Models/Metadata/Analog.cs +++ b/SabreTools.Data.Models/Metadata/Analog.cs @@ -1,10 +1,11 @@ -using System.Xml.Serialization; +using System; +using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("analog"), XmlRoot("analog")] - public class Analog : DatItem + public class Analog : DatItem, ICloneable { #region Properties @@ -13,5 +14,15 @@ namespace SabreTools.Data.Models.Metadata #endregion public Analog() => ItemType = ItemType.Analog; + + /// + public object Clone() + { + var obj = new Analog(); + + obj.Mask = Mask; + + return obj; + } } } diff --git a/SabreTools.Data.Models/Metadata/BiosSet.cs b/SabreTools.Data.Models/Metadata/BiosSet.cs index ecd1104f..b3885fba 100644 --- a/SabreTools.Data.Models/Metadata/BiosSet.cs +++ b/SabreTools.Data.Models/Metadata/BiosSet.cs @@ -1,10 +1,11 @@ +using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("biosset"), XmlRoot("biosset")] - public class BiosSet : DatItem + public class BiosSet : DatItem, ICloneable { #region Properties @@ -18,5 +19,17 @@ namespace SabreTools.Data.Models.Metadata #endregion public BiosSet() => ItemType = ItemType.BiosSet; + + /// + public object Clone() + { + var obj = new BiosSet(); + + obj.Default = Default; + obj.Description = Description; + obj.Name = Name; + + return obj; + } } } diff --git a/SabreTools.Data.Models/Metadata/Blank.cs b/SabreTools.Data.Models/Metadata/Blank.cs index 45b1284d..679bc352 100644 --- a/SabreTools.Data.Models/Metadata/Blank.cs +++ b/SabreTools.Data.Models/Metadata/Blank.cs @@ -1,11 +1,15 @@ +using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("blank"), XmlRoot("blank")] - public class Blank : DatItem + public class Blank : DatItem, ICloneable { public Blank() => ItemType = ItemType.Blank; + + /// + public object Clone() => new Blank(); } } diff --git a/SabreTools.Data.Models/Metadata/Condition.cs b/SabreTools.Data.Models/Metadata/Condition.cs index 22cede77..7c06f776 100644 --- a/SabreTools.Data.Models/Metadata/Condition.cs +++ b/SabreTools.Data.Models/Metadata/Condition.cs @@ -1,10 +1,11 @@ +using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("condition"), XmlRoot("condition")] - public class Condition : DatItem + public class Condition : DatItem, ICloneable { #region Properties @@ -20,5 +21,18 @@ namespace SabreTools.Data.Models.Metadata #endregion public Condition() => ItemType = ItemType.Condition; + + /// + public object Clone() + { + var obj = new Condition(); + + obj.Mask = Mask; + obj.Relation = Relation; + obj.Tag = Tag; + obj.Value = Value; + + return obj; + } } } diff --git a/SabreTools.Data.Models/Metadata/DeviceRef.cs b/SabreTools.Data.Models/Metadata/DeviceRef.cs index edfdf54d..a6989c93 100644 --- a/SabreTools.Data.Models/Metadata/DeviceRef.cs +++ b/SabreTools.Data.Models/Metadata/DeviceRef.cs @@ -1,10 +1,11 @@ +using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("device_ref"), XmlRoot("device_ref")] - public class DeviceRef : DatItem + public class DeviceRef : DatItem, ICloneable { #region Properties @@ -13,5 +14,15 @@ namespace SabreTools.Data.Models.Metadata #endregion public DeviceRef() => ItemType = ItemType.DeviceRef; + + /// + public object Clone() + { + var obj = new DeviceRef(); + + obj.Name = Name; + + return obj; + } } } diff --git a/SabreTools.Data.Models/Metadata/Extension.cs b/SabreTools.Data.Models/Metadata/Extension.cs index ff5f9808..e61009c7 100644 --- a/SabreTools.Data.Models/Metadata/Extension.cs +++ b/SabreTools.Data.Models/Metadata/Extension.cs @@ -1,10 +1,11 @@ +using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("extension"), XmlRoot("extension")] - public class Extension : DatItem + public class Extension : DatItem, ICloneable { #region Properties @@ -13,5 +14,15 @@ namespace SabreTools.Data.Models.Metadata #endregion public Extension() => ItemType = ItemType.Extension; + + /// + public object Clone() + { + var obj = new Extension(); + + obj.Name = Name; + + return obj; + } } } diff --git a/SabreTools.Data.Models/Metadata/Feature.cs b/SabreTools.Data.Models/Metadata/Feature.cs index ee62f094..1162791a 100644 --- a/SabreTools.Data.Models/Metadata/Feature.cs +++ b/SabreTools.Data.Models/Metadata/Feature.cs @@ -1,10 +1,11 @@ +using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("feature"), XmlRoot("feature")] - public class Feature : DatItem + public class Feature : DatItem, ICloneable { #region Properties @@ -24,5 +25,19 @@ namespace SabreTools.Data.Models.Metadata #endregion public Feature() => ItemType = ItemType.Feature; + + /// + public object Clone() + { + var obj = new Feature(); + + obj.FeatureType = FeatureType; + obj.Name = Name; + obj.Overall = Overall; + obj.Status = Status; + obj.Value = Value; + + return obj; + } } } diff --git a/SabreTools.Data.Models/Metadata/Info.cs b/SabreTools.Data.Models/Metadata/Info.cs index 70032b49..4e073bfe 100644 --- a/SabreTools.Data.Models/Metadata/Info.cs +++ b/SabreTools.Data.Models/Metadata/Info.cs @@ -1,10 +1,11 @@ +using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("info"), XmlRoot("info")] - public class Info : DatItem + public class Info : DatItem, ICloneable { #region Properties @@ -15,5 +16,16 @@ namespace SabreTools.Data.Models.Metadata #endregion public Info() => ItemType = ItemType.Info; + + /// + public object Clone() + { + var obj = new Info(); + + obj.Name = Name; + obj.Value = Value; + + return obj; + } } } diff --git a/SabreTools.Data.Models/Metadata/Instance.cs b/SabreTools.Data.Models/Metadata/Instance.cs index c5fb42f4..4ca57882 100644 --- a/SabreTools.Data.Models/Metadata/Instance.cs +++ b/SabreTools.Data.Models/Metadata/Instance.cs @@ -1,10 +1,11 @@ +using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("instance"), XmlRoot("instance")] - public class Instance : DatItem + public class Instance : DatItem, ICloneable { #region Properties @@ -15,5 +16,16 @@ namespace SabreTools.Data.Models.Metadata #endregion public Instance() => ItemType = ItemType.Instance; + + /// + public object Clone() + { + var obj = new Instance(); + + obj.BriefName = BriefName; + obj.Name = Name; + + return obj; + } } } diff --git a/SabreTools.Data.Models/Metadata/RamOption.cs b/SabreTools.Data.Models/Metadata/RamOption.cs index 345ff641..5ff841a7 100644 --- a/SabreTools.Data.Models/Metadata/RamOption.cs +++ b/SabreTools.Data.Models/Metadata/RamOption.cs @@ -1,10 +1,11 @@ +using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("ramoption"), XmlRoot("ramoption")] - public class RamOption : DatItem + public class RamOption : DatItem, ICloneable { #region Properties @@ -18,5 +19,17 @@ namespace SabreTools.Data.Models.Metadata #endregion public RamOption() => ItemType = ItemType.RamOption; + + /// + public object Clone() + { + var obj = new RamOption(); + + obj.Content = Content; + obj.Default = Default; + obj.Name = Name; + + return obj; + } } } diff --git a/SabreTools.Data.Models/Metadata/Sample.cs b/SabreTools.Data.Models/Metadata/Sample.cs index 3570b3aa..604a3def 100644 --- a/SabreTools.Data.Models/Metadata/Sample.cs +++ b/SabreTools.Data.Models/Metadata/Sample.cs @@ -1,10 +1,11 @@ +using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("sample"), XmlRoot("sample")] - public class Sample : DatItem + public class Sample : DatItem, ICloneable { #region Properties @@ -13,5 +14,15 @@ namespace SabreTools.Data.Models.Metadata #endregion public Sample() => ItemType = ItemType.Sample; + + /// + public object Clone() + { + var obj = new Sample(); + + obj.Name = Name; + + return obj; + } } } diff --git a/SabreTools.Data.Models/Metadata/SharedFeat.cs b/SabreTools.Data.Models/Metadata/SharedFeat.cs index b42c1967..4eac6bf1 100644 --- a/SabreTools.Data.Models/Metadata/SharedFeat.cs +++ b/SabreTools.Data.Models/Metadata/SharedFeat.cs @@ -1,10 +1,11 @@ +using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("sharedfeat"), XmlRoot("sharedfeat")] - public class SharedFeat : DatItem + public class SharedFeat : DatItem, ICloneable { #region Properties @@ -15,5 +16,16 @@ namespace SabreTools.Data.Models.Metadata #endregion public SharedFeat() => ItemType = ItemType.SharedFeat; + + /// + public object Clone() + { + var obj = new SharedFeat(); + + obj.Name = Name; + obj.Value = Value; + + return obj; + } } } diff --git a/SabreTools.Data.Models/Metadata/SlotOption.cs b/SabreTools.Data.Models/Metadata/SlotOption.cs index 18059ea3..a1ac2c13 100644 --- a/SabreTools.Data.Models/Metadata/SlotOption.cs +++ b/SabreTools.Data.Models/Metadata/SlotOption.cs @@ -1,10 +1,11 @@ +using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("slotoption"), XmlRoot("slotoption")] - public class SlotOption : DatItem + public class SlotOption : DatItem, ICloneable { #region Properties @@ -18,5 +19,17 @@ namespace SabreTools.Data.Models.Metadata #endregion public SlotOption() => ItemType = ItemType.SlotOption; + + /// + public object Clone() + { + var obj = new SlotOption(); + + obj.Default = Default; + obj.DevName = DevName; + obj.Name = Name; + + return obj; + } } }