diff --git a/SabreTools.Core/DictionaryBaseExtensions.cs b/SabreTools.Core/DictionaryBaseExtensions.cs index d0f0c1df..05475976 100644 --- a/SabreTools.Core/DictionaryBaseExtensions.cs +++ b/SabreTools.Core/DictionaryBaseExtensions.cs @@ -70,10 +70,27 @@ namespace SabreTools.Core #region Conversion + /// + /// Convert a DatItem to a Rom + /// + public static Rom? ConvertToRom(this DatItem? self) + { + // If the DatItem is missing, we can't do anything + if (self == null) + return null; + + return self switch + { + Disk diskSelf => ConvertToRom(diskSelf), + Media mediaSelf => ConvertToRom(mediaSelf), + _ => null, + }; + } + /// /// Convert a Disk to a Rom /// - public static Rom? ConvertToRom(this Disk? disk) + private static Rom? ConvertToRom(this Disk? disk) { // If the Disk is missing, we can't do anything if (disk == null) @@ -94,7 +111,7 @@ namespace SabreTools.Core /// /// Convert a Media to a Rom /// - public static Rom? ConvertToRom(this Media? media) + private static Rom? ConvertToRom(this Media? media) { // If the Media is missing, we can't do anything if (media == null) @@ -338,104 +355,29 @@ namespace SabreTools.Core /// /// Returns if any hashes exist /// - public static bool HasHashes(this Disk disk) + public static bool HasHashes(this DatItem self) { - bool md5Null = string.IsNullOrWhiteSpace(disk.ReadString(Disk.MD5Key)); - bool sha1Null = string.IsNullOrWhiteSpace(disk.ReadString(Disk.SHA1Key)); - - return !md5Null || !sha1Null; - } - - /// - /// Returns if any hashes exist - /// - public static bool HasHashes(this Media media) - { - bool md5Null = string.IsNullOrWhiteSpace(media.ReadString(Media.MD5Key)); - bool sha1Null = string.IsNullOrWhiteSpace(media.ReadString(Media.SHA1Key)); - bool sha256Null = string.IsNullOrWhiteSpace(media.ReadString(Media.SHA256Key)); - bool spamsumNull = string.IsNullOrWhiteSpace(media.ReadString(Media.SpamSumKey)); - - return !md5Null || !sha1Null || !sha256Null || !spamsumNull; - } - - /// - /// Returns if any hashes exist - /// - public static bool HasHashes(this Rom rom) - { - bool crcNull = string.IsNullOrWhiteSpace(rom.ReadString(Rom.CRCKey)); - bool md5Null = string.IsNullOrWhiteSpace(rom.ReadString(Rom.MD5Key)); - bool sha1Null = string.IsNullOrWhiteSpace(rom.ReadString(Rom.SHA1Key)); - bool sha256Null = string.IsNullOrWhiteSpace(rom.ReadString(Rom.SHA256Key)); - bool sha384Null = string.IsNullOrWhiteSpace(rom.ReadString(Rom.SHA384Key)); - bool sha512Null = string.IsNullOrWhiteSpace(rom.ReadString(Rom.SHA512Key)); - bool spamsumNull = string.IsNullOrWhiteSpace(rom.ReadString(Rom.SpamSumKey)); - - return !crcNull || !md5Null || !sha1Null || !sha256Null || !sha384Null || !sha512Null || !spamsumNull; + return self switch + { + Disk diskSelf => diskSelf.HasHashes(), + Media mediaSelf => mediaSelf.HasHashes(), + Rom romSelf => romSelf.HasHashes(), + _ => false, + }; } /// /// Returns if all of the hashes are set to their 0-byte values or null /// - public static bool HasZeroHash(this Disk disk) + public static bool HasZeroHash(this DatItem self) { - string? md5 = disk.ReadString(Disk.MD5Key); - bool md5Null = string.IsNullOrWhiteSpace(md5) || string.Equals(md5, Constants.MD5Zero, StringComparison.OrdinalIgnoreCase); - - string? sha1 = disk.ReadString(Disk.SHA1Key); - bool sha1Null = string.IsNullOrWhiteSpace(sha1) || string.Equals(sha1, Constants.SHA1Zero, StringComparison.OrdinalIgnoreCase); - - return md5Null && sha1Null; - } - - /// - /// Returns if all of the hashes are set to their 0-byte values or null - /// - public static bool HasZeroHash(this Media media) - { - string? md5 = media.ReadString(Media.MD5Key); - bool md5Null = string.IsNullOrWhiteSpace(md5) || string.Equals(md5, Constants.MD5Zero, StringComparison.OrdinalIgnoreCase); - - string? sha1 = media.ReadString(Media.SHA1Key); - bool sha1Null = string.IsNullOrWhiteSpace(sha1) || string.Equals(sha1, Constants.SHA1Zero, StringComparison.OrdinalIgnoreCase); - - string? sha256 = media.ReadString(Media.SHA256Key); - bool sha256Null = string.IsNullOrWhiteSpace(sha256) || string.Equals(sha256, Constants.SHA256Zero, StringComparison.OrdinalIgnoreCase); - - string? spamsum = media.ReadString(Media.SpamSumKey); - bool spamsumNull = string.IsNullOrWhiteSpace(spamsum) || string.Equals(spamsum, Constants.SpamSumZero, StringComparison.OrdinalIgnoreCase); - - return md5Null && sha1Null && sha256Null && spamsumNull; - } - - /// - /// Returns if all of the hashes are set to their 0-byte values or null - /// - public static bool HasZeroHash(this Rom rom) - { - string? crc = rom.ReadString(Rom.CRCKey); - bool crcNull = string.IsNullOrWhiteSpace(crc) || string.Equals(crc, Constants.CRCZero, StringComparison.OrdinalIgnoreCase); - - string? md5 = rom.ReadString(Rom.MD5Key); - bool md5Null = string.IsNullOrWhiteSpace(md5) || string.Equals(md5, Constants.MD5Zero, StringComparison.OrdinalIgnoreCase); - - string? sha1 = rom.ReadString(Rom.SHA1Key); - bool sha1Null = string.IsNullOrWhiteSpace(sha1) || string.Equals(sha1, Constants.SHA1Zero, StringComparison.OrdinalIgnoreCase); - - string? sha256 = rom.ReadString(Rom.SHA256Key); - bool sha256Null = string.IsNullOrWhiteSpace(sha256) || string.Equals(sha256, Constants.SHA256Zero, StringComparison.OrdinalIgnoreCase); - - string? sha384 = rom.ReadString(Rom.SHA384Key); - bool sha384Null = string.IsNullOrWhiteSpace(sha384) || string.Equals(sha384, Constants.SHA384Zero, StringComparison.OrdinalIgnoreCase); - - string? sha512 = rom.ReadString(Rom.SHA512Key); - bool sha512Null = string.IsNullOrWhiteSpace(sha512) || string.Equals(sha512, Constants.SHA512Zero, StringComparison.OrdinalIgnoreCase); - - string? spamsum = rom.ReadString(Rom.SpamSumKey); - bool spamsumNull = string.IsNullOrWhiteSpace(spamsum) || string.Equals(spamsum, Constants.SpamSumZero, StringComparison.OrdinalIgnoreCase); - - return crcNull && md5Null && sha1Null && sha256Null && sha384Null && sha512Null && spamsumNull; + return self switch + { + Disk diskSelf => diskSelf.HasZeroHash(), + Media mediaSelf => mediaSelf.HasZeroHash(), + Rom romSelf => romSelf.HasZeroHash(), + _ => false, + }; } /// @@ -501,14 +443,139 @@ namespace SabreTools.Core return !crcNull || !md5Null || !sha1Null || !sha256Null || !sha384Null || !sha512Null || !spamsumNull; } + /// + /// Returns if any hashes exist + /// + private static bool HasHashes(this Disk disk) + { + bool md5Null = string.IsNullOrWhiteSpace(disk.ReadString(Disk.MD5Key)); + bool sha1Null = string.IsNullOrWhiteSpace(disk.ReadString(Disk.SHA1Key)); + + return !md5Null || !sha1Null; + } + + /// + /// Returns if any hashes exist + /// + private static bool HasHashes(this Media media) + { + bool md5Null = string.IsNullOrWhiteSpace(media.ReadString(Media.MD5Key)); + bool sha1Null = string.IsNullOrWhiteSpace(media.ReadString(Media.SHA1Key)); + bool sha256Null = string.IsNullOrWhiteSpace(media.ReadString(Media.SHA256Key)); + bool spamsumNull = string.IsNullOrWhiteSpace(media.ReadString(Media.SpamSumKey)); + + return !md5Null || !sha1Null || !sha256Null || !spamsumNull; + } + + /// + /// Returns if any hashes exist + /// + private static bool HasHashes(this Rom rom) + { + bool crcNull = string.IsNullOrWhiteSpace(rom.ReadString(Rom.CRCKey)); + bool md5Null = string.IsNullOrWhiteSpace(rom.ReadString(Rom.MD5Key)); + bool sha1Null = string.IsNullOrWhiteSpace(rom.ReadString(Rom.SHA1Key)); + bool sha256Null = string.IsNullOrWhiteSpace(rom.ReadString(Rom.SHA256Key)); + bool sha384Null = string.IsNullOrWhiteSpace(rom.ReadString(Rom.SHA384Key)); + bool sha512Null = string.IsNullOrWhiteSpace(rom.ReadString(Rom.SHA512Key)); + bool spamsumNull = string.IsNullOrWhiteSpace(rom.ReadString(Rom.SpamSumKey)); + + return !crcNull || !md5Null || !sha1Null || !sha256Null || !sha384Null || !sha512Null || !spamsumNull; + } + + /// + /// Returns if all of the hashes are set to their 0-byte values or null + /// + private static bool HasZeroHash(this Disk disk) + { + string? md5 = disk.ReadString(Disk.MD5Key); + bool md5Null = string.IsNullOrWhiteSpace(md5) || string.Equals(md5, Constants.MD5Zero, StringComparison.OrdinalIgnoreCase); + + string? sha1 = disk.ReadString(Disk.SHA1Key); + bool sha1Null = string.IsNullOrWhiteSpace(sha1) || string.Equals(sha1, Constants.SHA1Zero, StringComparison.OrdinalIgnoreCase); + + return md5Null && sha1Null; + } + + /// + /// Returns if all of the hashes are set to their 0-byte values or null + /// + private static bool HasZeroHash(this Media media) + { + string? md5 = media.ReadString(Media.MD5Key); + bool md5Null = string.IsNullOrWhiteSpace(md5) || string.Equals(md5, Constants.MD5Zero, StringComparison.OrdinalIgnoreCase); + + string? sha1 = media.ReadString(Media.SHA1Key); + bool sha1Null = string.IsNullOrWhiteSpace(sha1) || string.Equals(sha1, Constants.SHA1Zero, StringComparison.OrdinalIgnoreCase); + + string? sha256 = media.ReadString(Media.SHA256Key); + bool sha256Null = string.IsNullOrWhiteSpace(sha256) || string.Equals(sha256, Constants.SHA256Zero, StringComparison.OrdinalIgnoreCase); + + string? spamsum = media.ReadString(Media.SpamSumKey); + bool spamsumNull = string.IsNullOrWhiteSpace(spamsum) || string.Equals(spamsum, Constants.SpamSumZero, StringComparison.OrdinalIgnoreCase); + + return md5Null && sha1Null && sha256Null && spamsumNull; + } + + /// + /// Returns if all of the hashes are set to their 0-byte values or null + /// + private static bool HasZeroHash(this Rom rom) + { + string? crc = rom.ReadString(Rom.CRCKey); + bool crcNull = string.IsNullOrWhiteSpace(crc) || string.Equals(crc, Constants.CRCZero, StringComparison.OrdinalIgnoreCase); + + string? md5 = rom.ReadString(Rom.MD5Key); + bool md5Null = string.IsNullOrWhiteSpace(md5) || string.Equals(md5, Constants.MD5Zero, StringComparison.OrdinalIgnoreCase); + + string? sha1 = rom.ReadString(Rom.SHA1Key); + bool sha1Null = string.IsNullOrWhiteSpace(sha1) || string.Equals(sha1, Constants.SHA1Zero, StringComparison.OrdinalIgnoreCase); + + string? sha256 = rom.ReadString(Rom.SHA256Key); + bool sha256Null = string.IsNullOrWhiteSpace(sha256) || string.Equals(sha256, Constants.SHA256Zero, StringComparison.OrdinalIgnoreCase); + + string? sha384 = rom.ReadString(Rom.SHA384Key); + bool sha384Null = string.IsNullOrWhiteSpace(sha384) || string.Equals(sha384, Constants.SHA384Zero, StringComparison.OrdinalIgnoreCase); + + string? sha512 = rom.ReadString(Rom.SHA512Key); + bool sha512Null = string.IsNullOrWhiteSpace(sha512) || string.Equals(sha512, Constants.SHA512Zero, StringComparison.OrdinalIgnoreCase); + + string? spamsum = rom.ReadString(Rom.SpamSumKey); + bool spamsumNull = string.IsNullOrWhiteSpace(spamsum) || string.Equals(spamsum, Constants.SpamSumZero, StringComparison.OrdinalIgnoreCase); + + return crcNull && md5Null && sha1Null && sha256Null && sha384Null && sha512Null && spamsumNull; + } + #endregion #region Information Filling + /// + /// Fill any missing size and hash information from another DatItem + /// + public static void FillMissingHashes(this DatItem? self, DatItem? other) + { + if (self == null || other == null) + return; + + switch (self, other) + { + case (Disk diskSelf, Disk diskOther): + FillMissingHashes(diskSelf, diskOther); + break; + case (Media mediaSelf, Media mediaOther): + FillMissingHashes(mediaSelf, mediaOther); + break; + case (Rom romSelf, Rom romOther): + FillMissingHashes(romSelf, romOther); + break; + }; + } + /// /// Fill any missing size and hash information from another Disk /// - public static void FillMissingHashes(this Disk? self, Disk? other) + private static void FillMissingHashes(this Disk? self, Disk? other) { if (self == null || other == null) return; @@ -527,7 +594,7 @@ namespace SabreTools.Core /// /// Fill any missing size and hash information from another Media /// - public static void FillMissingHashes(this Media? self, Media? other) + private static void FillMissingHashes(this Media? self, Media? other) { if (self == null || other == null) return; @@ -556,7 +623,7 @@ namespace SabreTools.Core /// /// Fill any missing size and hash information from another Rom /// - public static void FillMissingHashes(this Rom? self, Rom? other) + private static void FillMissingHashes(this Rom? self, Rom? other) { if (self == null || other == null) return; @@ -609,7 +676,24 @@ namespace SabreTools.Core /// /// Get unique duplicate suffix on name collision /// - public static string GetDuplicateSuffix(this Disk? self) + public static string GetDuplicateSuffix(this DatItem? self) + { + if (self == null) + return string.Empty; + + return self switch + { + Disk diskSelf => GetDuplicateSuffix(diskSelf), + Media mediaSelf => GetDuplicateSuffix(mediaSelf), + Rom romSelf => GetDuplicateSuffix(romSelf), + _ => "_1", + }; + } + + /// + /// Get unique duplicate suffix on name collision + /// + private static string GetDuplicateSuffix(this Disk? self) { if (self == null) return string.Empty; @@ -628,7 +712,7 @@ namespace SabreTools.Core /// /// Get unique duplicate suffix on name collision /// - public static string GetDuplicateSuffix(this Media? self) + private static string GetDuplicateSuffix(this Media? self) { if (self == null) return string.Empty; @@ -655,7 +739,7 @@ namespace SabreTools.Core /// /// Get unique duplicate suffix on name collision /// - public static string GetDuplicateSuffix(this Rom? self) + private static string GetDuplicateSuffix(this Rom? self) { if (self == null) return string.Empty; diff --git a/SabreTools.DatItems/DatItem.cs b/SabreTools.DatItems/DatItem.cs index 392367ef..24ce3eb3 100644 --- a/SabreTools.DatItems/DatItem.cs +++ b/SabreTools.DatItems/DatItem.cs @@ -70,13 +70,28 @@ namespace SabreTools.DatItems [JsonProperty("itemtype")] [JsonConverter(typeof(StringEnumConverter))] [XmlElement("itemtype")] - public ItemType ItemType { get; set; } + public ItemType ItemType + { + get => _internal.ReadString(Models.Internal.DatItem.TypeKey).AsItemType(); + set => _internal[Models.Internal.DatItem.TypeKey] = value.FromItemType(); + } /// /// Duplicate type when compared to another item /// + /// Hack on top of internal model [JsonIgnore, XmlIgnore] - public DupeType DupeType { get; set; } + public DupeType DupeType + { + get => _internal.Read("DUPETYPE") ?? 0; + set => _internal["DUPETYPE"] = value; + } + + /// + /// Internal model wrapped by this DatItem + /// + [JsonIgnore, XmlIgnore] + protected Models.Internal.DatItem _internal; #endregion @@ -85,8 +100,13 @@ namespace SabreTools.DatItems /// /// Machine values /// + /// Hack on top of internal model [JsonIgnore, XmlIgnore] - public Machine? Machine { get; set; } = new Machine(); + public Machine? Machine + { + get => _internal.Read("MACHINE") ?? new Machine(); + set => _internal["MACHINE"] = value; + } #endregion @@ -95,14 +115,24 @@ namespace SabreTools.DatItems /// /// Source information /// + /// Hack on top of internal model [JsonIgnore, XmlIgnore] - public Source? Source { get; set; } = new Source(); + public Source? Source + { + get => _internal.Read("SOURCE") ?? new Source(); + set => _internal["SOURCE"] = value; + } /// /// Flag if item should be removed /// + /// Hack on top of internal model [JsonIgnore, XmlIgnore] - public bool Remove { get; set; } + public bool Remove + { + get => _internal.ReadBool("REMOVE") ?? false; + set => _internal["REMOVE"] = value; + } #endregion // Metadata information @@ -149,6 +179,7 @@ namespace SabreTools.DatItems /// public DatItem() { + _internal = new Models.Internal.Blank(); logger = new Logger(this); } @@ -286,7 +317,15 @@ namespace SabreTools.DatItems /// /// DatItem to use as a baseline /// True if the items are duplicates, false otherwise - public abstract bool Equals(DatItem? other); + public virtual bool Equals(DatItem? other) + { + // If we don't have a matched type, return false + if (ItemType != other?.ItemType) + return false; + + // Compare the internal models + return _internal.EqualTo(other._internal); + } /// /// Return the duplicate status of two items diff --git a/SabreTools.DatItems/Formats/Adjuster.cs b/SabreTools.DatItems/Formats/Adjuster.cs index d3a47d6f..d16df1e9 100644 --- a/SabreTools.DatItems/Formats/Adjuster.cs +++ b/SabreTools.DatItems/Formats/Adjuster.cs @@ -20,8 +20,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("name"), XmlElement("name")] public string? Name { - get => _adjuster.ReadString(Models.Internal.Adjuster.NameKey); - set => _adjuster[Models.Internal.Adjuster.NameKey] = value; + get => _internal.ReadString(Models.Internal.Adjuster.NameKey); + set => _internal[Models.Internal.Adjuster.NameKey] = value; } /// @@ -30,8 +30,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("default", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("default")] public bool? Default { - get => _adjuster.ReadBool(Models.Internal.Adjuster.DefaultKey); - set => _adjuster[Models.Internal.Adjuster.DefaultKey] = value; + get => _internal.ReadBool(Models.Internal.Adjuster.DefaultKey); + set => _internal[Models.Internal.Adjuster.DefaultKey] = value; } [JsonIgnore] @@ -43,19 +43,13 @@ namespace SabreTools.DatItems.Formats [JsonProperty("conditions", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("conditions")] public List? Conditions { - get => _adjuster.Read(Models.Internal.Adjuster.ConditionKey)?.ToList(); - set => _adjuster[Models.Internal.Adjuster.ConditionKey] = value?.ToArray(); + get => _internal.Read(Models.Internal.Adjuster.ConditionKey)?.ToList(); + set => _internal[Models.Internal.Adjuster.ConditionKey] = value?.ToArray(); } [JsonIgnore] public bool ConditionsSpecified { get { return Conditions != null && Conditions.Count > 0; } } - /// - /// Internal Adjuster model - /// - [JsonIgnore] - private Models.Internal.Adjuster _adjuster = new(); - #endregion #region Accessors @@ -75,6 +69,7 @@ namespace SabreTools.DatItems.Formats /// public Adjuster() { + _internal = new Models.Internal.Adjuster(); Name = string.Empty; ItemType = ItemType.Adjuster; } @@ -95,25 +90,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _adjuster = this._adjuster?.Clone() as Models.Internal.Adjuster ?? new Models.Internal.Adjuster(), + _internal = this._internal?.Clone() as Models.Internal.Adjuster ?? new Models.Internal.Adjuster(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a Adjuster, return false - if (ItemType != other?.ItemType || other is not Adjuster otherInternal) - return false; - - // Compare the internal models - return _adjuster.EqualTo(otherInternal._adjuster); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/Analog.cs b/SabreTools.DatItems/Formats/Analog.cs index b1c1cb93..7878ff60 100644 --- a/SabreTools.DatItems/Formats/Analog.cs +++ b/SabreTools.DatItems/Formats/Analog.cs @@ -18,16 +18,10 @@ namespace SabreTools.DatItems.Formats [JsonProperty("mask", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("mask")] public string? Mask { - get => _analog.ReadString(Models.Internal.Analog.MaskKey); - set => _analog[Models.Internal.Analog.MaskKey] = value; + get => _internal.ReadString(Models.Internal.Analog.MaskKey); + set => _internal[Models.Internal.Analog.MaskKey] = value; } - /// - /// Internal Analog model - /// - [JsonIgnore] - private Models.Internal.Analog _analog = new(); - #endregion #region Constructors @@ -37,6 +31,7 @@ namespace SabreTools.DatItems.Formats /// public Analog() { + _internal = new Models.Internal.Analog(); ItemType = ItemType.Analog; } @@ -56,25 +51,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _analog = this._analog?.Clone() as Models.Internal.Analog ?? new Models.Internal.Analog(), + _internal = this._internal?.Clone() as Models.Internal.Analog ?? new Models.Internal.Analog(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a Analog, return false - if (ItemType != other?.ItemType || other is not Analog otherInternal) - return false; - - // Compare the internal models - return _analog.EqualTo(otherInternal._analog); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/Archive.cs b/SabreTools.DatItems/Formats/Archive.cs index 0c946f5e..e12a96aa 100644 --- a/SabreTools.DatItems/Formats/Archive.cs +++ b/SabreTools.DatItems/Formats/Archive.cs @@ -18,8 +18,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("name"), XmlElement("name")] public string? Name { - get => _archive.ReadString(Models.Internal.Archive.NameKey); - set => _archive[Models.Internal.Archive.NameKey] = value; + get => _internal.ReadString(Models.Internal.Archive.NameKey); + set => _internal[Models.Internal.Archive.NameKey] = value; } /// @@ -87,12 +87,6 @@ namespace SabreTools.DatItems.Formats [JsonProperty("categories"), XmlElement("categories")] public string? Categories { get; set; } - /// - /// Internal Archive model - /// - [JsonIgnore] - private Models.Internal.Archive _archive = new(); - #endregion #region Accessors @@ -112,6 +106,7 @@ namespace SabreTools.DatItems.Formats /// public Archive() { + _internal = new Models.Internal.Archive(); Name = string.Empty; ItemType = ItemType.Archive; } @@ -132,25 +127,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _archive = this._archive?.Clone() as Models.Internal.Archive ?? new Models.Internal.Archive(), + _internal = this._internal?.Clone() as Models.Internal.Archive ?? new Models.Internal.Archive(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a Archive, return false - if (ItemType != other?.ItemType || other is not Archive otherInternal) - return false; - - // Compare the internal models - return _archive.EqualTo(otherInternal._archive); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/Auxiliary.cs b/SabreTools.DatItems/Formats/Auxiliary.cs index fed1f72a..120d2759 100644 --- a/SabreTools.DatItems/Formats/Auxiliary.cs +++ b/SabreTools.DatItems/Formats/Auxiliary.cs @@ -19,22 +19,22 @@ namespace SabreTools.DatItems.Formats [JsonProperty("value"), XmlElement("value")] public bool? Value { - get => _original.ReadBool(Models.Internal.Original.ValueKey); - set => _original[Models.Internal.Original.ValueKey] = value; + get => _internal.ReadBool(Models.Internal.Original.ValueKey); + set => _internal[Models.Internal.Original.ValueKey] = value; } [JsonProperty("content"), XmlElement("content")] public string? Content { - get => _original.ReadString(Models.Internal.Original.ContentKey); - set => _original[Models.Internal.Original.ContentKey] = value; + get => _internal.ReadString(Models.Internal.Original.ContentKey); + set => _internal[Models.Internal.Original.ContentKey] = value; } /// /// Internal Original model /// [JsonIgnore] - private readonly Models.Internal.Original _original = new(); + private readonly Models.Internal.Original _internal = new(); } #endregion diff --git a/SabreTools.DatItems/Formats/BiosSet.cs b/SabreTools.DatItems/Formats/BiosSet.cs index 8bf80800..dfd0123b 100644 --- a/SabreTools.DatItems/Formats/BiosSet.cs +++ b/SabreTools.DatItems/Formats/BiosSet.cs @@ -18,8 +18,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("name"), XmlElement("name")] public string? Name { - get => _biosSet.ReadString(Models.Internal.BiosSet.NameKey); - set => _biosSet[Models.Internal.BiosSet.NameKey] = value; + get => _internal.ReadString(Models.Internal.BiosSet.NameKey); + set => _internal[Models.Internal.BiosSet.NameKey] = value; } /// @@ -28,8 +28,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("description", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("description")] public string? Description { - get => _biosSet.ReadString(Models.Internal.BiosSet.DescriptionKey); - set => _biosSet[Models.Internal.BiosSet.DescriptionKey] = value; + get => _internal.ReadString(Models.Internal.BiosSet.DescriptionKey); + set => _internal[Models.Internal.BiosSet.DescriptionKey] = value; } /// @@ -38,19 +38,13 @@ namespace SabreTools.DatItems.Formats [JsonProperty("default", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("default")] public bool? Default { - get => _biosSet.ReadBool(Models.Internal.BiosSet.DefaultKey); - set => _biosSet[Models.Internal.BiosSet.DefaultKey] = value; + get => _internal.ReadBool(Models.Internal.BiosSet.DefaultKey); + set => _internal[Models.Internal.BiosSet.DefaultKey] = value; } [JsonIgnore] public bool DefaultSpecified { get { return Default != null; } } - /// - /// Internal BiosSet model - /// - [JsonIgnore] - private Models.Internal.BiosSet _biosSet = new(); - #endregion #region Accessors @@ -70,6 +64,7 @@ namespace SabreTools.DatItems.Formats /// public BiosSet() { + _internal = new Models.Internal.BiosSet(); Name = string.Empty; ItemType = ItemType.BiosSet; } @@ -90,25 +85,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _biosSet = this._biosSet?.Clone() as Models.Internal.BiosSet ?? new Models.Internal.BiosSet(), + _internal = this._internal?.Clone() as Models.Internal.BiosSet ?? new Models.Internal.BiosSet(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a BiosSet, return false - if (ItemType != other?.ItemType || other is not BiosSet otherInternal) - return false; - - // Compare the internal models - return _biosSet.EqualTo(otherInternal._biosSet); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/Chip.cs b/SabreTools.DatItems/Formats/Chip.cs index 85237c70..e3902a6d 100644 --- a/SabreTools.DatItems/Formats/Chip.cs +++ b/SabreTools.DatItems/Formats/Chip.cs @@ -20,8 +20,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("name"), XmlElement("name")] public string? Name { - get => _chip.ReadString(Models.Internal.Chip.NameKey); - set => _chip[Models.Internal.Chip.NameKey] = value; + get => _internal.ReadString(Models.Internal.Chip.NameKey); + set => _internal[Models.Internal.Chip.NameKey] = value; } /// @@ -30,8 +30,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("tag", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("tag")] public string? Tag { - get => _chip.ReadString(Models.Internal.Chip.TagKey); - set => _chip[Models.Internal.Chip.TagKey] = value; + get => _internal.ReadString(Models.Internal.Chip.TagKey); + set => _internal[Models.Internal.Chip.TagKey] = value; } /// @@ -41,8 +41,8 @@ namespace SabreTools.DatItems.Formats [JsonConverter(typeof(StringEnumConverter))] public ChipType ChipType { - get => _chip.ReadString(Models.Internal.Chip.ChipTypeKey).AsChipType(); - set => _chip[Models.Internal.Chip.ChipTypeKey] = value.FromChipType(); + get => _internal.ReadString(Models.Internal.Chip.ChipTypeKey).AsChipType(); + set => _internal[Models.Internal.Chip.ChipTypeKey] = value.FromChipType(); } [JsonIgnore] @@ -54,19 +54,13 @@ namespace SabreTools.DatItems.Formats [JsonProperty("clock", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("clock")] public long? Clock { - get => _chip.ReadLong(Models.Internal.Chip.ClockKey); - set => _chip[Models.Internal.Chip.ClockKey] = value; + get => _internal.ReadLong(Models.Internal.Chip.ClockKey); + set => _internal[Models.Internal.Chip.ClockKey] = value; } [JsonIgnore] public bool ClockSpecified { get { return Clock != null; } } - /// - /// Internal Chip model - /// - [JsonIgnore] - private Models.Internal.Chip _chip = new(); - #endregion #region Accessors @@ -86,6 +80,7 @@ namespace SabreTools.DatItems.Formats /// public Chip() { + _internal = new Models.Internal.Chip(); Name = string.Empty; ItemType = ItemType.Chip; } @@ -106,25 +101,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _chip = this._chip?.Clone() as Models.Internal.Chip ?? new Models.Internal.Chip(), + _internal = this._internal?.Clone() as Models.Internal.Chip ?? new Models.Internal.Chip(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a Chip, return false - if (ItemType != other?.ItemType || other is not Chip otherInternal) - return false; - - // Compare the internal models - return _chip.EqualTo(otherInternal._chip); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/Condition.cs b/SabreTools.DatItems/Formats/Condition.cs index 7a452542..ca340dbd 100644 --- a/SabreTools.DatItems/Formats/Condition.cs +++ b/SabreTools.DatItems/Formats/Condition.cs @@ -20,8 +20,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("tag", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("tag")] public string? Tag { - get => _condition.ReadString(Models.Internal.Condition.TagKey); - set => _condition[Models.Internal.Condition.TagKey] = value; + get => _internal.ReadString(Models.Internal.Condition.TagKey); + set => _internal[Models.Internal.Condition.TagKey] = value; } /// @@ -30,8 +30,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("mask", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("mask")] public string? Mask { - get => _condition.ReadString(Models.Internal.Condition.MaskKey); - set => _condition[Models.Internal.Condition.MaskKey] = value; + get => _internal.ReadString(Models.Internal.Condition.MaskKey); + set => _internal[Models.Internal.Condition.MaskKey] = value; } /// @@ -41,8 +41,8 @@ namespace SabreTools.DatItems.Formats [JsonConverter(typeof(StringEnumConverter))] public Relation Relation { - get => _condition.ReadString(Models.Internal.Condition.RelationKey).AsRelation(); - set => _condition[Models.Internal.Condition.RelationKey] = value.FromRelation(); + get => _internal.ReadString(Models.Internal.Condition.RelationKey).AsRelation(); + set => _internal[Models.Internal.Condition.RelationKey] = value.FromRelation(); } [JsonIgnore] @@ -54,16 +54,10 @@ namespace SabreTools.DatItems.Formats [JsonProperty("value", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("value")] public string? Value { - get => _condition.ReadString(Models.Internal.Condition.ValueKey); - set => _condition[Models.Internal.Condition.ValueKey] = value; + get => _internal.ReadString(Models.Internal.Condition.ValueKey); + set => _internal[Models.Internal.Condition.ValueKey] = value; } - /// - /// Internal Condition model - /// - [JsonIgnore] - private Models.Internal.Condition _condition = new(); - #endregion #region Constructors @@ -73,6 +67,7 @@ namespace SabreTools.DatItems.Formats /// public Condition() { + _internal = new Models.Internal.Condition(); ItemType = ItemType.Condition; } @@ -92,25 +87,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _condition = this._condition?.Clone() as Models.Internal.Condition ?? new Models.Internal.Condition(), + _internal = this._internal?.Clone() as Models.Internal.Condition ?? new Models.Internal.Condition(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a Condition, return false - if (ItemType != other?.ItemType || other is not Condition otherInternal) - return false; - - // Compare the internal models - return _condition.EqualTo(otherInternal._condition); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/ConfLocation.cs b/SabreTools.DatItems/Formats/ConfLocation.cs index 2400f91e..01d24452 100644 --- a/SabreTools.DatItems/Formats/ConfLocation.cs +++ b/SabreTools.DatItems/Formats/ConfLocation.cs @@ -18,8 +18,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("name"), XmlElement("name")] public string? Name { - get => _confLocation.ReadString(Models.Internal.ConfLocation.NameKey); - set => _confLocation[Models.Internal.ConfLocation.NameKey] = value; + get => _internal.ReadString(Models.Internal.ConfLocation.NameKey); + set => _internal[Models.Internal.ConfLocation.NameKey] = value; } /// @@ -28,8 +28,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("number", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("number")] public long? Number { - get => _confLocation.ReadLong(Models.Internal.ConfLocation.NumberKey); - set => _confLocation[Models.Internal.ConfLocation.NumberKey] = value; + get => _internal.ReadLong(Models.Internal.ConfLocation.NumberKey); + set => _internal[Models.Internal.ConfLocation.NumberKey] = value; } [JsonIgnore] @@ -41,19 +41,13 @@ namespace SabreTools.DatItems.Formats [JsonProperty("inverted", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("inverted")] public bool? Inverted { - get => _confLocation.ReadBool(Models.Internal.ConfLocation.InvertedKey); - set => _confLocation[Models.Internal.ConfLocation.InvertedKey] = value; + get => _internal.ReadBool(Models.Internal.ConfLocation.InvertedKey); + set => _internal[Models.Internal.ConfLocation.InvertedKey] = value; } [JsonIgnore] public bool InvertedSpecified { get { return Inverted != null; } } - /// - /// Internal ConfLocation model - /// - [JsonIgnore] - private Models.Internal.ConfLocation _confLocation = new(); - #endregion #region Accessors @@ -73,6 +67,7 @@ namespace SabreTools.DatItems.Formats /// public ConfLocation() { + _internal = new Models.Internal.ConfLocation(); Name = string.Empty; ItemType = ItemType.ConfLocation; } @@ -93,25 +88,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _confLocation = this._confLocation?.Clone() as Models.Internal.ConfLocation ?? new Models.Internal.ConfLocation(), + _internal = this._internal?.Clone() as Models.Internal.ConfLocation ?? new Models.Internal.ConfLocation(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a v, return false - if (ItemType != other?.ItemType || other is not ConfLocation otherInternal) - return false; - - // Compare the internal models - return _confLocation.EqualTo(otherInternal._confLocation); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/ConfSetting.cs b/SabreTools.DatItems/Formats/ConfSetting.cs index d5b40546..825ffcdb 100644 --- a/SabreTools.DatItems/Formats/ConfSetting.cs +++ b/SabreTools.DatItems/Formats/ConfSetting.cs @@ -20,8 +20,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("name"), XmlElement("name")] public string? Name { - get => _confSetting.ReadString(Models.Internal.ConfSetting.NameKey); - set => _confSetting[Models.Internal.ConfSetting.NameKey] = value; + get => _internal.ReadString(Models.Internal.ConfSetting.NameKey); + set => _internal[Models.Internal.ConfSetting.NameKey] = value; } /// @@ -30,8 +30,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("value", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("value")] public string? Value { - get => _confSetting.ReadString(Models.Internal.ConfSetting.ValueKey); - set => _confSetting[Models.Internal.ConfSetting.ValueKey] = value; + get => _internal.ReadString(Models.Internal.ConfSetting.ValueKey); + set => _internal[Models.Internal.ConfSetting.ValueKey] = value; } /// @@ -40,8 +40,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("default", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("default")] public bool? Default { - get => _confSetting.ReadBool(Models.Internal.ConfSetting.DefaultKey); - set => _confSetting[Models.Internal.ConfSetting.DefaultKey] = value; + get => _internal.ReadBool(Models.Internal.ConfSetting.DefaultKey); + set => _internal[Models.Internal.ConfSetting.DefaultKey] = value; } [JsonIgnore] @@ -53,19 +53,13 @@ namespace SabreTools.DatItems.Formats [JsonProperty("conditions", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("conditions")] public List? Conditions { - get => _confSetting.Read(Models.Internal.ConfSetting.ConditionKey)?.ToList(); - set => _confSetting[Models.Internal.ConfSetting.ConditionKey] = value?.ToArray(); + get => _internal.Read(Models.Internal.ConfSetting.ConditionKey)?.ToList(); + set => _internal[Models.Internal.ConfSetting.ConditionKey] = value?.ToArray(); } [JsonIgnore] public bool ConditionsSpecified { get { return Conditions != null && Conditions.Count > 0; } } - /// - /// Internal ConfSetting model - /// - [JsonIgnore] - private Models.Internal.ConfSetting _confSetting = new(); - #endregion #region Accessors @@ -85,6 +79,7 @@ namespace SabreTools.DatItems.Formats /// public ConfSetting() { + _internal = new Models.Internal.ConfSetting(); Name = string.Empty; ItemType = ItemType.ConfSetting; } @@ -105,25 +100,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _confSetting = this._confSetting?.Clone() as Models.Internal.ConfSetting ?? new Models.Internal.ConfSetting(), + _internal = this._internal?.Clone() as Models.Internal.ConfSetting ?? new Models.Internal.ConfSetting(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a ConfSetting, return false - if (ItemType != other?.ItemType || other is not ConfSetting otherInternal) - return false; - - // Compare the internal models - return _confSetting.EqualTo(otherInternal._confSetting); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/Configuration.cs b/SabreTools.DatItems/Formats/Configuration.cs index dc0e2f41..d237de43 100644 --- a/SabreTools.DatItems/Formats/Configuration.cs +++ b/SabreTools.DatItems/Formats/Configuration.cs @@ -20,8 +20,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("name"), XmlElement("name")] public string? Name { - get => _configuration.ReadString(Models.Internal.Configuration.NameKey); - set => _configuration[Models.Internal.Configuration.NameKey] = value; + get => _internal.ReadString(Models.Internal.Configuration.NameKey); + set => _internal[Models.Internal.Configuration.NameKey] = value; } /// @@ -30,8 +30,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("tag", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("tag")] public string? Tag { - get => _configuration.ReadString(Models.Internal.Configuration.TagKey); - set => _configuration[Models.Internal.Configuration.TagKey] = value; + get => _internal.ReadString(Models.Internal.Configuration.TagKey); + set => _internal[Models.Internal.Configuration.TagKey] = value; } /// @@ -40,8 +40,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("mask", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("mask")] public string? Mask { - get => _configuration.ReadString(Models.Internal.Configuration.MaskKey); - set => _configuration[Models.Internal.Configuration.MaskKey] = value; + get => _internal.ReadString(Models.Internal.Configuration.MaskKey); + set => _internal[Models.Internal.Configuration.MaskKey] = value; } /// @@ -50,8 +50,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("conditions", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("conditions")] public List? Conditions { - get => _configuration.Read(Models.Internal.Configuration.ConditionKey)?.ToList(); - set => _configuration[Models.Internal.Configuration.ConditionKey] = value?.ToArray(); + get => _internal.Read(Models.Internal.Configuration.ConditionKey)?.ToList(); + set => _internal[Models.Internal.Configuration.ConditionKey] = value?.ToArray(); } [JsonIgnore] @@ -63,8 +63,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("locations", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("locations")] public List? Locations { - get => _configuration.Read(Models.Internal.Configuration.ConfLocationKey)?.ToList(); - set => _configuration[Models.Internal.Configuration.ConfLocationKey] = value?.ToArray(); + get => _internal.Read(Models.Internal.Configuration.ConfLocationKey)?.ToList(); + set => _internal[Models.Internal.Configuration.ConfLocationKey] = value?.ToArray(); } [JsonIgnore] @@ -76,19 +76,13 @@ namespace SabreTools.DatItems.Formats [JsonProperty("settings", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("settings")] public List? Settings { - get => _configuration.Read>(Models.Internal.Configuration.ConfSettingKey); - set => _configuration[Models.Internal.Configuration.ConfSettingKey] = value; + get => _internal.Read>(Models.Internal.Configuration.ConfSettingKey); + set => _internal[Models.Internal.Configuration.ConfSettingKey] = value; } [JsonIgnore] public bool SettingsSpecified { get { return Settings != null && Settings.Count > 0; } } - /// - /// Internal Configuration model - /// - [JsonIgnore] - private Models.Internal.Configuration _configuration = new(); - #endregion #region Accessors @@ -108,6 +102,7 @@ namespace SabreTools.DatItems.Formats /// public Configuration() { + _internal = new Models.Internal.Configuration(); Name = string.Empty; ItemType = ItemType.Configuration; } @@ -128,25 +123,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _configuration = this._configuration?.Clone() as Models.Internal.Configuration ?? new Models.Internal.Configuration(), + _internal = this._internal?.Clone() as Models.Internal.Configuration ?? new Models.Internal.Configuration(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a Configuration, return false - if (ItemType != other?.ItemType || other is not Configuration otherInternal) - return false; - - // Compare the internal models - return _configuration.EqualTo(otherInternal._configuration); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/Control.cs b/SabreTools.DatItems/Formats/Control.cs index dd0afb71..e40eceb6 100644 --- a/SabreTools.DatItems/Formats/Control.cs +++ b/SabreTools.DatItems/Formats/Control.cs @@ -21,8 +21,8 @@ namespace SabreTools.DatItems.Formats [JsonConverter(typeof(StringEnumConverter))] public ControlType ControlType { - get => _control.ReadString(Models.Internal.Control.ControlTypeKey).AsControlType(); - set => _control[Models.Internal.Control.ControlTypeKey] = value.FromControlType(); + get => _internal.ReadString(Models.Internal.Control.ControlTypeKey).AsControlType(); + set => _internal[Models.Internal.Control.ControlTypeKey] = value.FromControlType(); } [JsonIgnore] @@ -34,8 +34,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("player", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("player")] public long? Player { - get => _control.ReadLong(Models.Internal.Control.PlayerKey); - set => _control[Models.Internal.Control.PlayerKey] = value; + get => _internal.ReadLong(Models.Internal.Control.PlayerKey); + set => _internal[Models.Internal.Control.PlayerKey] = value; } [JsonIgnore] @@ -47,8 +47,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("buttons", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("buttons")] public long? Buttons { - get => _control.ReadLong(Models.Internal.Control.ButtonsKey); - set => _control[Models.Internal.Control.ButtonsKey] = value; + get => _internal.ReadLong(Models.Internal.Control.ButtonsKey); + set => _internal[Models.Internal.Control.ButtonsKey] = value; } [JsonIgnore] @@ -60,8 +60,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("reqbuttons", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("reqbuttons")] public long? RequiredButtons { - get => _control.ReadLong(Models.Internal.Control.ReqButtonsKey); - set => _control[Models.Internal.Control.ReqButtonsKey] = value; + get => _internal.ReadLong(Models.Internal.Control.ReqButtonsKey); + set => _internal[Models.Internal.Control.ReqButtonsKey] = value; } [JsonIgnore] @@ -73,8 +73,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("minimum", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("minimum")] public long? Minimum { - get => _control.ReadLong(Models.Internal.Control.MinimumKey); - set => _control[Models.Internal.Control.MinimumKey] = value; + get => _internal.ReadLong(Models.Internal.Control.MinimumKey); + set => _internal[Models.Internal.Control.MinimumKey] = value; } [JsonIgnore] @@ -86,8 +86,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("maximum", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("maximum")] public long? Maximum { - get => _control.ReadLong(Models.Internal.Control.MaximumKey); - set => _control[Models.Internal.Control.MaximumKey] = value; + get => _internal.ReadLong(Models.Internal.Control.MaximumKey); + set => _internal[Models.Internal.Control.MaximumKey] = value; } [JsonIgnore] @@ -99,8 +99,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("sensitivity", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("sensitivity")] public long? Sensitivity { - get => _control.ReadLong(Models.Internal.Control.SensitivityKey); - set => _control[Models.Internal.Control.SensitivityKey] = value; + get => _internal.ReadLong(Models.Internal.Control.SensitivityKey); + set => _internal[Models.Internal.Control.SensitivityKey] = value; } [JsonIgnore] @@ -112,8 +112,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("keydelta", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("keydelta")] public long? KeyDelta { - get => _control.ReadLong(Models.Internal.Control.KeyDeltaKey); - set => _control[Models.Internal.Control.KeyDeltaKey] = value; + get => _internal.ReadLong(Models.Internal.Control.KeyDeltaKey); + set => _internal[Models.Internal.Control.KeyDeltaKey] = value; } [JsonIgnore] @@ -125,8 +125,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("reverse", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("reverse")] public bool? Reverse { - get => _control.ReadBool(Models.Internal.Control.ReverseKey); - set => _control[Models.Internal.Control.ReverseKey] = value; + get => _internal.ReadBool(Models.Internal.Control.ReverseKey); + set => _internal[Models.Internal.Control.ReverseKey] = value; } [JsonIgnore] @@ -138,8 +138,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("ways", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("ways")] public string? Ways { - get => _control.ReadString(Models.Internal.Control.WaysKey); - set => _control[Models.Internal.Control.WaysKey] = value; + get => _internal.ReadString(Models.Internal.Control.WaysKey); + set => _internal[Models.Internal.Control.WaysKey] = value; } /// @@ -148,8 +148,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("ways2", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("ways2")] public string? Ways2 { - get => _control.ReadString(Models.Internal.Control.Ways2Key); - set => _control[Models.Internal.Control.Ways2Key] = value; + get => _internal.ReadString(Models.Internal.Control.Ways2Key); + set => _internal[Models.Internal.Control.Ways2Key] = value; } /// @@ -158,16 +158,10 @@ namespace SabreTools.DatItems.Formats [JsonProperty("ways3", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("ways3")] public string? Ways3 { - get => _control.ReadString(Models.Internal.Control.Ways3Key); - set => _control[Models.Internal.Control.Ways3Key] = value; + get => _internal.ReadString(Models.Internal.Control.Ways3Key); + set => _internal[Models.Internal.Control.Ways3Key] = value; } - /// - /// Internal Control model - /// - [JsonIgnore] - private Models.Internal.Control _control = new(); - #endregion #region Constructors @@ -177,6 +171,7 @@ namespace SabreTools.DatItems.Formats /// public Control() { + _internal = new Models.Internal.Control(); ItemType = ItemType.Control; } @@ -196,25 +191,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _control = this._control?.Clone() as Models.Internal.Control ?? new Models.Internal.Control(), + _internal = this._internal?.Clone() as Models.Internal.Control ?? new Models.Internal.Control(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a Control, return false - if (ItemType != other?.ItemType || other is not Control otherInternal) - return false; - - // Compare the internal models - return _control.EqualTo(otherInternal._control); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/DataArea.cs b/SabreTools.DatItems/Formats/DataArea.cs index cd2a414b..d9f20b57 100644 --- a/SabreTools.DatItems/Formats/DataArea.cs +++ b/SabreTools.DatItems/Formats/DataArea.cs @@ -20,8 +20,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("name", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("name")] public string? Name { - get => _dataArea.ReadString(Models.Internal.DataArea.NameKey); - set => _dataArea[Models.Internal.DataArea.NameKey] = value; + get => _internal.ReadString(Models.Internal.DataArea.NameKey); + set => _internal[Models.Internal.DataArea.NameKey] = value; } /// @@ -30,8 +30,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("size", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("size")] public long? Size { - get => _dataArea.ReadLong(Models.Internal.DataArea.SizeKey); - set => _dataArea[Models.Internal.DataArea.SizeKey] = value; + get => _internal.ReadLong(Models.Internal.DataArea.SizeKey); + set => _internal[Models.Internal.DataArea.SizeKey] = value; } [JsonIgnore] @@ -43,8 +43,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("width", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("width")] public long? Width { - get => _dataArea.ReadLong(Models.Internal.DataArea.WidthKey); - set => _dataArea[Models.Internal.DataArea.WidthKey] = value; + get => _internal.ReadLong(Models.Internal.DataArea.WidthKey); + set => _internal[Models.Internal.DataArea.WidthKey] = value; } [JsonIgnore] @@ -56,19 +56,13 @@ namespace SabreTools.DatItems.Formats [JsonProperty("endianness", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("endianness")] public Endianness Endianness { - get => _dataArea.ReadString(Models.Internal.DataArea.WidthKey).AsEndianness(); - set => _dataArea[Models.Internal.DataArea.WidthKey] = value.FromEndianness(); + get => _internal.ReadString(Models.Internal.DataArea.WidthKey).AsEndianness(); + set => _internal[Models.Internal.DataArea.WidthKey] = value.FromEndianness(); } [JsonIgnore] public bool EndiannessSpecified { get { return Endianness != Endianness.NULL; } } - /// - /// Internal DataArea model - /// - [JsonIgnore] - private Models.Internal.DataArea _dataArea = new(); - #endregion #region Accessors @@ -88,6 +82,7 @@ namespace SabreTools.DatItems.Formats /// public DataArea() { + _internal = new Models.Internal.DataArea(); Name = string.Empty; ItemType = ItemType.DataArea; } @@ -108,25 +103,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _dataArea = this._dataArea?.Clone() as Models.Internal.DataArea ?? new Models.Internal.DataArea(), + _internal = this._internal?.Clone() as Models.Internal.DataArea ?? new Models.Internal.DataArea(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a DataArea, return false - if (ItemType != other?.ItemType || other is not DataArea otherInternal) - return false; - - // Compare the internal models - return _dataArea.EqualTo(otherInternal._dataArea); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/Device.cs b/SabreTools.DatItems/Formats/Device.cs index 750548dd..74566311 100644 --- a/SabreTools.DatItems/Formats/Device.cs +++ b/SabreTools.DatItems/Formats/Device.cs @@ -23,8 +23,8 @@ namespace SabreTools.DatItems.Formats [JsonConverter(typeof(StringEnumConverter))] public DeviceType DeviceType { - get => _device.ReadString(Models.Internal.Device.DeviceTypeKey).AsDeviceType(); - set => _device[Models.Internal.Device.DeviceTypeKey] = value.FromDeviceType(); + get => _internal.ReadString(Models.Internal.Device.DeviceTypeKey).AsDeviceType(); + set => _internal[Models.Internal.Device.DeviceTypeKey] = value.FromDeviceType(); } [JsonIgnore] @@ -36,8 +36,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("tag", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("tag")] public string? Tag { - get => _device.ReadString(Models.Internal.Device.TagKey); - set => _device[Models.Internal.Device.TagKey] = value; + get => _internal.ReadString(Models.Internal.Device.TagKey); + set => _internal[Models.Internal.Device.TagKey] = value; } /// @@ -46,8 +46,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("fixed_image", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("fixed_image")] public string? FixedImage { - get => _device.ReadString(Models.Internal.Device.FixedImageKey); - set => _device[Models.Internal.Device.FixedImageKey] = value; + get => _internal.ReadString(Models.Internal.Device.FixedImageKey); + set => _internal[Models.Internal.Device.FixedImageKey] = value; } /// @@ -57,8 +57,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("mandatory", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("mandatory")] public long? Mandatory { - get => _device.ReadLong(Models.Internal.Device.MandatoryKey); - set => _device[Models.Internal.Device.MandatoryKey] = value; + get => _internal.ReadLong(Models.Internal.Device.MandatoryKey); + set => _internal[Models.Internal.Device.MandatoryKey] = value; } [JsonIgnore] @@ -70,8 +70,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("interface", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("interface")] public string? Interface { - get => _device.ReadString(Models.Internal.Device.InterfaceKey); - set => _device[Models.Internal.Device.InterfaceKey] = value; + get => _internal.ReadString(Models.Internal.Device.InterfaceKey); + set => _internal[Models.Internal.Device.InterfaceKey] = value; } /// @@ -80,8 +80,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("instances", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("instances")] public List? Instances { - get => _device.Read(Models.Internal.Device.InstanceKey)?.ToList(); - set => _device[Models.Internal.Device.InstanceKey] = value?.ToArray(); + get => _internal.Read(Models.Internal.Device.InstanceKey)?.ToList(); + set => _internal[Models.Internal.Device.InstanceKey] = value?.ToArray(); } [JsonIgnore] @@ -93,19 +93,13 @@ namespace SabreTools.DatItems.Formats [JsonProperty("extensions", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("extensions")] public List? Extensions { - get => _device.Read(Models.Internal.Device.ExtensionKey)?.ToList(); - set => _device[Models.Internal.Device.ExtensionKey] = value?.ToArray(); + get => _internal.Read(Models.Internal.Device.ExtensionKey)?.ToList(); + set => _internal[Models.Internal.Device.ExtensionKey] = value?.ToArray(); } [JsonIgnore] public bool ExtensionsSpecified { get { return Extensions != null && Extensions.Count > 0; } } - /// - /// Internal Device model - /// - [JsonIgnore] - private Models.Internal.Device _device = new(); - #endregion #region Constructors @@ -115,6 +109,7 @@ namespace SabreTools.DatItems.Formats /// public Device() { + _internal = new Models.Internal.Device(); ItemType = ItemType.Device; } @@ -134,25 +129,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _device = this._device?.Clone() as Models.Internal.Device ?? new Models.Internal.Device(), + _internal = this._internal?.Clone() as Models.Internal.Device ?? new Models.Internal.Device(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a Adjuster, return false - if (ItemType != other?.ItemType || other is not Device otherInternal) - return false; - - // Compare the internal models - return _device.EqualTo(otherInternal._device); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/DeviceReference.cs b/SabreTools.DatItems/Formats/DeviceReference.cs index 57ad0c32..3805a8e0 100644 --- a/SabreTools.DatItems/Formats/DeviceReference.cs +++ b/SabreTools.DatItems/Formats/DeviceReference.cs @@ -18,16 +18,10 @@ namespace SabreTools.DatItems.Formats [JsonProperty("name"), XmlElement("name")] public string? Name { - get => _deviceRef.ReadString(Models.Internal.DeviceRef.NameKey); - set => _deviceRef[Models.Internal.DeviceRef.NameKey] = value; + get => _internal.ReadString(Models.Internal.DeviceRef.NameKey); + set => _internal[Models.Internal.DeviceRef.NameKey] = value; } - /// - /// Internal DeviceRef model - /// - [JsonIgnore] - private Models.Internal.DeviceRef _deviceRef = new(); - #endregion #region Accessors @@ -47,6 +41,7 @@ namespace SabreTools.DatItems.Formats /// public DeviceReference() { + _internal = new Models.Internal.DeviceRef(); Name = string.Empty; ItemType = ItemType.DeviceReference; } @@ -67,25 +62,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _deviceRef = this._deviceRef?.Clone() as Models.Internal.DeviceRef ?? new Models.Internal.DeviceRef(), + _internal = this._internal?.Clone() as Models.Internal.DeviceRef ?? new Models.Internal.DeviceRef(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a Adjuster, return false - if (ItemType != other?.ItemType || other is not DeviceReference otherInternal) - return false; - - // Compare the internal models - return _deviceRef.EqualTo(otherInternal._deviceRef); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/DipLocation.cs b/SabreTools.DatItems/Formats/DipLocation.cs index 1d9f0bbf..3efb5804 100644 --- a/SabreTools.DatItems/Formats/DipLocation.cs +++ b/SabreTools.DatItems/Formats/DipLocation.cs @@ -18,8 +18,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("name"), XmlElement("name")] public string? Name { - get => _dipLocation.ReadString(Models.Internal.DipLocation.NameKey); - set => _dipLocation[Models.Internal.DipLocation.NameKey] = value; + get => _internal.ReadString(Models.Internal.DipLocation.NameKey); + set => _internal[Models.Internal.DipLocation.NameKey] = value; } /// @@ -28,8 +28,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("number", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("number")] public long? Number { - get => _dipLocation.ReadLong(Models.Internal.DipLocation.NameKey); - set => _dipLocation[Models.Internal.DipLocation.NameKey] = value; + get => _internal.ReadLong(Models.Internal.DipLocation.NameKey); + set => _internal[Models.Internal.DipLocation.NameKey] = value; } [JsonIgnore] @@ -41,19 +41,13 @@ namespace SabreTools.DatItems.Formats [JsonProperty("inverted", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("inverted")] public bool? Inverted { - get => _dipLocation.ReadBool(Models.Internal.DipLocation.InvertedKey); - set => _dipLocation[Models.Internal.DipLocation.InvertedKey] = value; + get => _internal.ReadBool(Models.Internal.DipLocation.InvertedKey); + set => _internal[Models.Internal.DipLocation.InvertedKey] = value; } [JsonIgnore] public bool InvertedSpecified { get { return Inverted != null; } } - /// - /// Internal DipLocation model - /// - [JsonIgnore] - private Models.Internal.DipLocation _dipLocation = new(); - #endregion #region Accessors @@ -73,6 +67,7 @@ namespace SabreTools.DatItems.Formats /// public DipLocation() { + _internal = new Models.Internal.DipLocation(); Name = string.Empty; ItemType = ItemType.DipLocation; } @@ -93,25 +88,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _dipLocation = this._dipLocation?.Clone() as Models.Internal.DipLocation ?? new Models.Internal.DipLocation(), + _internal = this._internal?.Clone() as Models.Internal.DipLocation ?? new Models.Internal.DipLocation(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a DipLocation, return false - if (ItemType != other?.ItemType || other is not DipLocation otherInternal) - return false; - - // Compare the internal models - return _dipLocation.EqualTo(otherInternal._dipLocation); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/DipSwitch.cs b/SabreTools.DatItems/Formats/DipSwitch.cs index bb4460cf..2725e6c7 100644 --- a/SabreTools.DatItems/Formats/DipSwitch.cs +++ b/SabreTools.DatItems/Formats/DipSwitch.cs @@ -22,8 +22,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("name"), XmlElement("name")] public string? Name { - get => _dipSwitch.ReadString(Models.Internal.DipSwitch.NameKey); - set => _dipSwitch[Models.Internal.DipSwitch.NameKey] = value; + get => _internal.ReadString(Models.Internal.DipSwitch.NameKey); + set => _internal[Models.Internal.DipSwitch.NameKey] = value; } /// @@ -32,8 +32,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("tag", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("tag")] public string? Tag { - get => _dipSwitch.ReadString(Models.Internal.DipSwitch.TagKey); - set => _dipSwitch[Models.Internal.DipSwitch.TagKey] = value; + get => _internal.ReadString(Models.Internal.DipSwitch.TagKey); + set => _internal[Models.Internal.DipSwitch.TagKey] = value; } /// @@ -42,8 +42,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("mask", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("mask")] public string? Mask { - get => _dipSwitch.ReadString(Models.Internal.DipSwitch.MaskKey); - set => _dipSwitch[Models.Internal.DipSwitch.MaskKey] = value; + get => _internal.ReadString(Models.Internal.DipSwitch.MaskKey); + set => _internal[Models.Internal.DipSwitch.MaskKey] = value; } /// @@ -52,8 +52,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("conditions", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("conditions")] public List? Conditions { - get => _dipSwitch.Read(Models.Internal.DipSwitch.ConditionKey)?.ToList(); - set => _dipSwitch[Models.Internal.DipSwitch.ConditionKey] = value?.ToArray(); + get => _internal.Read(Models.Internal.DipSwitch.ConditionKey)?.ToList(); + set => _internal[Models.Internal.DipSwitch.ConditionKey] = value?.ToArray(); } [JsonIgnore] @@ -65,8 +65,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("locations", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("locations")] public List? Locations { - get => _dipSwitch.Read(Models.Internal.DipSwitch.DipLocationKey)?.ToList(); - set => _dipSwitch[Models.Internal.DipSwitch.DipLocationKey] = value?.ToArray(); + get => _internal.Read(Models.Internal.DipSwitch.DipLocationKey)?.ToList(); + set => _internal[Models.Internal.DipSwitch.DipLocationKey] = value?.ToArray(); } [JsonIgnore] @@ -78,8 +78,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("values", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("values")] public List? Values { - get => _dipSwitch.Read(Models.Internal.DipSwitch.DipValueKey)?.ToList(); - set => _dipSwitch[Models.Internal.DipSwitch.DipValueKey] = value?.ToArray(); + get => _internal.Read(Models.Internal.DipSwitch.DipValueKey)?.ToList(); + set => _internal[Models.Internal.DipSwitch.DipValueKey] = value?.ToArray(); } [JsonIgnore] @@ -109,12 +109,6 @@ namespace SabreTools.DatItems.Formats #endregion - /// - /// Internal DipSwitch model - /// - [JsonIgnore] - private Models.Internal.DipSwitch _dipSwitch = new(); - #endregion // Fields #region Accessors @@ -134,6 +128,7 @@ namespace SabreTools.DatItems.Formats /// public DipSwitch() { + _internal = new Models.Internal.DipSwitch(); Name = string.Empty; ItemType = ItemType.DipSwitch; } @@ -154,27 +149,12 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _dipSwitch = this._dipSwitch?.Clone() as Models.Internal.DipSwitch ?? new Models.Internal.DipSwitch(), + _internal = this._internal?.Clone() as Models.Internal.DipSwitch ?? new Models.Internal.DipSwitch(), Part = this.Part, }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a DipSwitch, return false - if (ItemType != other?.ItemType || other is not DipSwitch otherInternal) - return false; - - // Compare the internal models - return _dipSwitch.EqualTo(otherInternal._dipSwitch); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/DipValue.cs b/SabreTools.DatItems/Formats/DipValue.cs index 0e406706..e24ad9e1 100644 --- a/SabreTools.DatItems/Formats/DipValue.cs +++ b/SabreTools.DatItems/Formats/DipValue.cs @@ -20,8 +20,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("name"), XmlElement("name")] public string? Name { - get => _dipValue.ReadString(Models.Internal.DipValue.NameKey); - set => _dipValue[Models.Internal.DipValue.NameKey] = value; + get => _internal.ReadString(Models.Internal.DipValue.NameKey); + set => _internal[Models.Internal.DipValue.NameKey] = value; } /// @@ -30,8 +30,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("value", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("value")] public string? Value { - get => _dipValue.ReadString(Models.Internal.DipValue.ValueKey); - set => _dipValue[Models.Internal.DipValue.ValueKey] = value; + get => _internal.ReadString(Models.Internal.DipValue.ValueKey); + set => _internal[Models.Internal.DipValue.ValueKey] = value; } /// @@ -40,8 +40,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("default", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("default")] public bool? Default { - get => _dipValue.ReadBool(Models.Internal.DipValue.DefaultKey); - set => _dipValue[Models.Internal.DipValue.DefaultKey] = value; + get => _internal.ReadBool(Models.Internal.DipValue.DefaultKey); + set => _internal[Models.Internal.DipValue.DefaultKey] = value; } [JsonIgnore] @@ -53,19 +53,13 @@ namespace SabreTools.DatItems.Formats [JsonProperty("conditions", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("conditions")] public List? Conditions { - get => _dipValue.Read(Models.Internal.DipValue.ConditionKey)?.ToList(); - set => _dipValue[Models.Internal.DipValue.ConditionKey] = value?.ToArray(); + get => _internal.Read(Models.Internal.DipValue.ConditionKey)?.ToList(); + set => _internal[Models.Internal.DipValue.ConditionKey] = value?.ToArray(); } [JsonIgnore] public bool ConditionsSpecified { get { return Conditions != null && Conditions.Count > 0; } } - /// - /// Internal DipValue model - /// - [JsonIgnore] - private Models.Internal.DipValue _dipValue = new(); - #endregion #region Accessors @@ -85,6 +79,7 @@ namespace SabreTools.DatItems.Formats /// public DipValue() { + _internal = new Models.Internal.DipValue(); Name = string.Empty; ItemType = ItemType.DipValue; } @@ -105,25 +100,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _dipValue = this._dipValue?.Clone() as Models.Internal.DipValue ?? new Models.Internal.DipValue(), + _internal = this._internal?.Clone() as Models.Internal.DipValue ?? new Models.Internal.DipValue(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a DipValue, return false - if (ItemType != other?.ItemType || other is not DipValue otherInternal) - return false; - - // Compare the internal models - return _dipValue.EqualTo(otherInternal._dipValue); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/Disk.cs b/SabreTools.DatItems/Formats/Disk.cs index 3016859d..590b496d 100644 --- a/SabreTools.DatItems/Formats/Disk.cs +++ b/SabreTools.DatItems/Formats/Disk.cs @@ -23,8 +23,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("name"), XmlElement("name")] public string? Name { - get => _disk.ReadString(Models.Internal.Disk.NameKey); - set => _disk[Models.Internal.Disk.NameKey] = value; + get => _internal.ReadString(Models.Internal.Disk.NameKey); + set => _internal[Models.Internal.Disk.NameKey] = value; } /// @@ -33,8 +33,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("md5", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("md5")] public string? MD5 { - get => _disk.ReadString(Models.Internal.Disk.MD5Key); - set => _disk[Models.Internal.Disk.MD5Key] = TextHelper.NormalizeMD5(value); + get => _internal.ReadString(Models.Internal.Disk.MD5Key); + set => _internal[Models.Internal.Disk.MD5Key] = TextHelper.NormalizeMD5(value); } /// @@ -43,8 +43,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("sha1", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("sha1")] public string? SHA1 { - get => _disk.ReadString(Models.Internal.Disk.SHA1Key); - set => _disk[Models.Internal.Disk.SHA1Key] = TextHelper.NormalizeSHA1(value); + get => _internal.ReadString(Models.Internal.Disk.SHA1Key); + set => _internal[Models.Internal.Disk.SHA1Key] = TextHelper.NormalizeSHA1(value); } /// @@ -53,8 +53,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("merge", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("merge")] public string? MergeTag { - get => _disk.ReadString(Models.Internal.Disk.MergeKey); - set => _disk[Models.Internal.Disk.MergeKey] = value; + get => _internal.ReadString(Models.Internal.Disk.MergeKey); + set => _internal[Models.Internal.Disk.MergeKey] = value; } /// @@ -63,8 +63,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("region", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("region")] public string? Region { - get => _disk.ReadString(Models.Internal.Disk.RegionKey); - set => _disk[Models.Internal.Disk.RegionKey] = value; + get => _internal.ReadString(Models.Internal.Disk.RegionKey); + set => _internal[Models.Internal.Disk.RegionKey] = value; } /// @@ -73,8 +73,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("index", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("index")] public string? Index { - get => _disk.ReadString(Models.Internal.Disk.IndexKey); - set => _disk[Models.Internal.Disk.IndexKey] = value; + get => _internal.ReadString(Models.Internal.Disk.IndexKey); + set => _internal[Models.Internal.Disk.IndexKey] = value; } /// @@ -83,8 +83,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("writable", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("writable")] public bool? Writable { - get => _disk.ReadBool(Models.Internal.Disk.WritableKey); - set => _disk[Models.Internal.Disk.WritableKey] = value; + get => _internal.ReadBool(Models.Internal.Disk.WritableKey); + set => _internal[Models.Internal.Disk.WritableKey] = value; } [JsonIgnore] @@ -97,8 +97,8 @@ namespace SabreTools.DatItems.Formats [JsonConverter(typeof(StringEnumConverter))] public ItemStatus ItemStatus { - get => _disk.ReadString(Models.Internal.Disk.StatusKey).AsItemStatus(); - set => _disk[Models.Internal.Disk.StatusKey] = value.FromItemStatus(yesno: false); + get => _internal.ReadString(Models.Internal.Disk.StatusKey).AsItemStatus(); + set => _internal[Models.Internal.Disk.StatusKey] = value.FromItemStatus(yesno: false); } [JsonIgnore] @@ -110,8 +110,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("optional", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("optional")] public bool? Optional { - get => _disk.ReadBool(Models.Internal.Disk.OptionalKey); - set => _disk[Models.Internal.Disk.OptionalKey] = value; + get => _internal.ReadBool(Models.Internal.Disk.OptionalKey); + set => _internal[Models.Internal.Disk.OptionalKey] = value; } [JsonIgnore] @@ -124,9 +124,13 @@ namespace SabreTools.DatItems.Formats /// /// Disk area information /// - /// This is inverted from the internal model + /// Hack on top of internal model [JsonProperty("diskarea", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("diskarea")] - public DiskArea? DiskArea { get; set; } + public DiskArea? DiskArea + { + get => _internal.Read("DISKAREA"); + set => _internal["DISKAREA"] = value; + } [JsonIgnore] public bool DiskAreaSpecified @@ -141,9 +145,13 @@ namespace SabreTools.DatItems.Formats /// /// Original hardware part associated with the item /// - /// This is inverted from the internal model + /// Hack on top of internal model [JsonProperty("part", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("part")] - public Part? Part { get; set; } + public Part? Part + { + get => _internal.Read("PART"); + set => _internal["PART"] = value; + } [JsonIgnore] public bool PartSpecified @@ -158,12 +166,6 @@ namespace SabreTools.DatItems.Formats #endregion - /// - /// Internal Disk model - /// - [JsonIgnore] - private Models.Internal.Disk _disk = new(); - #endregion // Fields #region Accessors @@ -183,6 +185,7 @@ namespace SabreTools.DatItems.Formats /// public Disk() { + _internal = new Models.Internal.Disk(); Name = string.Empty; ItemType = ItemType.Disk; DupeType = 0x00; @@ -194,6 +197,7 @@ namespace SabreTools.DatItems.Formats /// public Disk(BaseFile baseFile) { + _internal = new Models.Internal.Disk(); Name = baseFile.Filename; MD5 = TextHelper.ByteArrayToString(baseFile.MD5); SHA1 = TextHelper.ByteArrayToString(baseFile.SHA1); @@ -219,10 +223,7 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _disk = this._disk?.Clone() as Models.Internal.Disk ?? new Models.Internal.Disk(), - - DiskArea = this.DiskArea, - Part = this.Part, + _internal = this._internal?.Clone() as Models.Internal.Disk ?? new Models.Internal.Disk(), }; } @@ -246,7 +247,7 @@ namespace SabreTools.DatItems.Formats /// public Rom ConvertToRom() { - var rom = new Rom(_disk.ConvertToRom()) + var rom = new Rom(_internal.ConvertToRom()) { ItemType = ItemType.Rom, DupeType = this.DupeType, @@ -266,28 +267,17 @@ namespace SabreTools.DatItems.Formats #region Comparision Methods - /// - public override bool Equals(DatItem? other) - { - // If we don't have a Disk, return false - if (ItemType != other?.ItemType || other is not Disk otherInternal) - return false; - - // Compare the internal models - return _disk.EqualTo(otherInternal._disk); - } - /// /// Fill any missing size and hash information from another Disk /// /// Disk to fill information from - public void FillMissingInformation(Disk other) => _disk.FillMissingHashes(other?._disk); + public void FillMissingInformation(Disk other) => _internal.FillMissingHashes(other?._internal); /// /// Get unique duplicate suffix on name collision /// /// String representing the suffix - public string GetDuplicateSuffix() => _disk.GetDuplicateSuffix(); + public string GetDuplicateSuffix() => _internal.GetDuplicateSuffix(); #endregion diff --git a/SabreTools.DatItems/Formats/DiskArea.cs b/SabreTools.DatItems/Formats/DiskArea.cs index 934750c2..9d0a678f 100644 --- a/SabreTools.DatItems/Formats/DiskArea.cs +++ b/SabreTools.DatItems/Formats/DiskArea.cs @@ -19,16 +19,10 @@ namespace SabreTools.DatItems.Formats [JsonProperty("name", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("name")] public string? Name { - get => _diskArea.ReadString(Models.Internal.DiskArea.NameKey); - set => _diskArea[Models.Internal.DiskArea.NameKey] = value; + get => _internal.ReadString(Models.Internal.DiskArea.NameKey); + set => _internal[Models.Internal.DiskArea.NameKey] = value; } - /// - /// Internal DiskArea model - /// - [JsonIgnore] - private Models.Internal.DiskArea _diskArea = new(); - #endregion #region Accessors @@ -48,6 +42,7 @@ namespace SabreTools.DatItems.Formats /// public DiskArea() { + _internal = new Models.Internal.DiskArea(); Name = string.Empty; ItemType = ItemType.DiskArea; } @@ -68,25 +63,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _diskArea = this._diskArea?.Clone() as Models.Internal.DiskArea ?? new Models.Internal.DiskArea(), + _internal = this._internal?.Clone() as Models.Internal.DiskArea ?? new Models.Internal.DiskArea(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a DiskArea, return false - if (ItemType != other?.ItemType || other is not DiskArea otherInternal) - return false; - - // Compare the internal models - return _diskArea.EqualTo(otherInternal._diskArea); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/Display.cs b/SabreTools.DatItems/Formats/Display.cs index edb46632..cd95f2c8 100644 --- a/SabreTools.DatItems/Formats/Display.cs +++ b/SabreTools.DatItems/Formats/Display.cs @@ -20,8 +20,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("tag", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("tag")] public string? Tag { - get => _display.ReadString(Models.Internal.Display.TagKey); - set => _display[Models.Internal.Display.TagKey] = value; + get => _internal.ReadString(Models.Internal.Display.TagKey); + set => _internal[Models.Internal.Display.TagKey] = value; } /// @@ -31,8 +31,8 @@ namespace SabreTools.DatItems.Formats [JsonConverter(typeof(StringEnumConverter))] public DisplayType DisplayType { - get => _display.ReadString(Models.Internal.Display.DisplayTypeKey).AsDisplayType(); - set => _display[Models.Internal.Display.DisplayTypeKey] = value.FromDisplayType(); + get => _internal.ReadString(Models.Internal.Display.DisplayTypeKey).AsDisplayType(); + set => _internal[Models.Internal.Display.DisplayTypeKey] = value.FromDisplayType(); } [JsonIgnore] @@ -44,8 +44,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("rotate", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("rotate")] public long? Rotate { - get => _display.ReadLong(Models.Internal.Display.RotateKey); - set => _display[Models.Internal.Display.RotateKey] = value; + get => _internal.ReadLong(Models.Internal.Display.RotateKey); + set => _internal[Models.Internal.Display.RotateKey] = value; } [JsonIgnore] @@ -57,8 +57,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("flipx", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("flipx")] public bool? FlipX { - get => _display.ReadBool(Models.Internal.Display.FlipXKey); - set => _display[Models.Internal.Display.FlipXKey] = value; + get => _internal.ReadBool(Models.Internal.Display.FlipXKey); + set => _internal[Models.Internal.Display.FlipXKey] = value; } [JsonIgnore] @@ -70,8 +70,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("width", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("width")] public long? Width { - get => _display.ReadLong(Models.Internal.Display.WidthKey); - set => _display[Models.Internal.Display.WidthKey] = value; + get => _internal.ReadLong(Models.Internal.Display.WidthKey); + set => _internal[Models.Internal.Display.WidthKey] = value; } [JsonIgnore] @@ -83,8 +83,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("height", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("height")] public long? Height { - get => _display.ReadLong(Models.Internal.Display.HeightKey); - set => _display[Models.Internal.Display.HeightKey] = value; + get => _internal.ReadLong(Models.Internal.Display.HeightKey); + set => _internal[Models.Internal.Display.HeightKey] = value; } [JsonIgnore] @@ -96,8 +96,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("refresh", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("refresh")] public double? Refresh { - get => _display.ReadDouble(Models.Internal.Display.RefreshKey); - set => _display[Models.Internal.Display.RefreshKey] = value; + get => _internal.ReadDouble(Models.Internal.Display.RefreshKey); + set => _internal[Models.Internal.Display.RefreshKey] = value; } [JsonIgnore] @@ -109,8 +109,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("pixclock", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("pixclock")] public long? PixClock { - get => _display.ReadLong(Models.Internal.Display.PixClockKey); - set => _display[Models.Internal.Display.PixClockKey] = value; + get => _internal.ReadLong(Models.Internal.Display.PixClockKey); + set => _internal[Models.Internal.Display.PixClockKey] = value; } [JsonIgnore] @@ -122,8 +122,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("htotal", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("htotal")] public long? HTotal { - get => _display.ReadLong(Models.Internal.Display.HTotalKey); - set => _display[Models.Internal.Display.HTotalKey] = value; + get => _internal.ReadLong(Models.Internal.Display.HTotalKey); + set => _internal[Models.Internal.Display.HTotalKey] = value; } [JsonIgnore] @@ -135,8 +135,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("hbend", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("hbend")] public long? HBEnd { - get => _display.ReadLong(Models.Internal.Display.HBEndKey); - set => _display[Models.Internal.Display.HBEndKey] = value; + get => _internal.ReadLong(Models.Internal.Display.HBEndKey); + set => _internal[Models.Internal.Display.HBEndKey] = value; } [JsonIgnore] @@ -148,8 +148,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("hbstart", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("hbstart")] public long? HBStart { - get => _display.ReadLong(Models.Internal.Display.HBStartKey); - set => _display[Models.Internal.Display.HBStartKey] = value; + get => _internal.ReadLong(Models.Internal.Display.HBStartKey); + set => _internal[Models.Internal.Display.HBStartKey] = value; } [JsonIgnore] @@ -161,8 +161,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("vtotal", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("vtotal")] public long? VTotal { - get => _display.ReadLong(Models.Internal.Display.VTotalKey); - set => _display[Models.Internal.Display.VTotalKey] = value; + get => _internal.ReadLong(Models.Internal.Display.VTotalKey); + set => _internal[Models.Internal.Display.VTotalKey] = value; } [JsonIgnore] @@ -174,8 +174,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("vbend", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("vbend")] public long? VBEnd { - get => _display.ReadLong(Models.Internal.Display.VBEndKey); - set => _display[Models.Internal.Display.VBEndKey] = value; + get => _internal.ReadLong(Models.Internal.Display.VBEndKey); + set => _internal[Models.Internal.Display.VBEndKey] = value; } [JsonIgnore] @@ -187,19 +187,13 @@ namespace SabreTools.DatItems.Formats [JsonProperty("vbstart", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("vbstart")] public long? VBStart { - get => _display.ReadLong(Models.Internal.Display.VBStartKey); - set => _display[Models.Internal.Display.VBStartKey] = value; + get => _internal.ReadLong(Models.Internal.Display.VBStartKey); + set => _internal[Models.Internal.Display.VBStartKey] = value; } [JsonIgnore] public bool VBStartSpecified { get { return VBStart != null; } } - /// - /// Internal Display model - /// - [JsonIgnore] - private Models.Internal.Display _display = new(); - #endregion #region Constructors @@ -209,6 +203,7 @@ namespace SabreTools.DatItems.Formats /// public Display() { + _internal = new Models.Internal.Display(); ItemType = ItemType.Display; } @@ -228,25 +223,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _display = this._display?.Clone() as Models.Internal.Display ?? new Models.Internal.Display(), + _internal = this._internal?.Clone() as Models.Internal.Display ?? new Models.Internal.Display(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a Display, return false - if (ItemType != other?.ItemType || other is not Display otherInternal) - return false; - - // Compare the internal models - return _display.EqualTo(otherInternal._display); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/Driver.cs b/SabreTools.DatItems/Formats/Driver.cs index a1b433fe..08536174 100644 --- a/SabreTools.DatItems/Formats/Driver.cs +++ b/SabreTools.DatItems/Formats/Driver.cs @@ -24,8 +24,8 @@ namespace SabreTools.DatItems.Formats [JsonConverter(typeof(StringEnumConverter))] public SupportStatus Status { - get => _driver.ReadString(Models.Internal.Driver.StatusKey).AsSupportStatus(); - set => _driver[Models.Internal.Driver.StatusKey] = value.FromSupportStatus(); + get => _internal.ReadString(Models.Internal.Driver.StatusKey).AsSupportStatus(); + set => _internal[Models.Internal.Driver.StatusKey] = value.FromSupportStatus(); } [JsonIgnore] @@ -38,8 +38,8 @@ namespace SabreTools.DatItems.Formats [JsonConverter(typeof(StringEnumConverter))] public SupportStatus Emulation { - get => _driver.ReadString(Models.Internal.Driver.EmulationKey).AsSupportStatus(); - set => _driver[Models.Internal.Driver.EmulationKey] = value.FromSupportStatus(); + get => _internal.ReadString(Models.Internal.Driver.EmulationKey).AsSupportStatus(); + set => _internal[Models.Internal.Driver.EmulationKey] = value.FromSupportStatus(); } [JsonIgnore] @@ -52,8 +52,8 @@ namespace SabreTools.DatItems.Formats [JsonConverter(typeof(StringEnumConverter))] public SupportStatus Cocktail { - get => _driver.ReadString(Models.Internal.Driver.CocktailKey).AsSupportStatus(); - set => _driver[Models.Internal.Driver.CocktailKey] = value.FromSupportStatus(); + get => _internal.ReadString(Models.Internal.Driver.CocktailKey).AsSupportStatus(); + set => _internal[Models.Internal.Driver.CocktailKey] = value.FromSupportStatus(); } [JsonIgnore] @@ -66,8 +66,8 @@ namespace SabreTools.DatItems.Formats [JsonConverter(typeof(StringEnumConverter))] public Supported SaveState { - get => _driver.ReadString(Models.Internal.Driver.SaveStateKey).AsSupported(); - set => _driver[Models.Internal.Driver.SaveStateKey] = value.FromSupported(verbose: true); + get => _internal.ReadString(Models.Internal.Driver.SaveStateKey).AsSupported(); + set => _internal[Models.Internal.Driver.SaveStateKey] = value.FromSupported(verbose: true); } [JsonIgnore] @@ -79,8 +79,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("requiresartwork", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("requiresartwork")] public bool? RequiresArtwork { - get => _driver.ReadBool(Models.Internal.Driver.RequiresArtworkKey); - set => _driver[Models.Internal.Driver.RequiresArtworkKey] = value; + get => _internal.ReadBool(Models.Internal.Driver.RequiresArtworkKey); + set => _internal[Models.Internal.Driver.RequiresArtworkKey] = value; } [JsonIgnore] @@ -92,8 +92,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("unofficial", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("unofficial")] public bool? Unofficial { - get => _driver.ReadBool(Models.Internal.Driver.UnofficialKey); - set => _driver[Models.Internal.Driver.UnofficialKey] = value; + get => _internal.ReadBool(Models.Internal.Driver.UnofficialKey); + set => _internal[Models.Internal.Driver.UnofficialKey] = value; } [JsonIgnore] @@ -105,8 +105,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("nosoundhardware", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("nosoundhardware")] public bool? NoSoundHardware { - get => _driver.ReadBool(Models.Internal.Driver.NoSoundHardwareKey); - set => _driver[Models.Internal.Driver.NoSoundHardwareKey] = value; + get => _internal.ReadBool(Models.Internal.Driver.NoSoundHardwareKey); + set => _internal[Models.Internal.Driver.NoSoundHardwareKey] = value; } [JsonIgnore] @@ -118,19 +118,13 @@ namespace SabreTools.DatItems.Formats [JsonProperty("incomplete", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("incomplete")] public bool? Incomplete { - get => _driver.ReadBool(Models.Internal.Driver.IncompleteKey); - set => _driver[Models.Internal.Driver.IncompleteKey] = value; + get => _internal.ReadBool(Models.Internal.Driver.IncompleteKey); + set => _internal[Models.Internal.Driver.IncompleteKey] = value; } [JsonIgnore] public bool IncompleteSpecified { get { return Incomplete != null; } } - /// - /// Internal Driver model - /// - [JsonIgnore] - private Models.Internal.Driver _driver = new(); - #endregion #region Constructors @@ -140,6 +134,7 @@ namespace SabreTools.DatItems.Formats /// public Driver() { + _internal = new Models.Internal.Driver(); ItemType = ItemType.Driver; } @@ -159,25 +154,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _driver = this._driver?.Clone() as Models.Internal.Driver ?? new Models.Internal.Driver(), + _internal = this._internal?.Clone() as Models.Internal.Driver ?? new Models.Internal.Driver(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a Driver, return false - if (ItemType != other?.ItemType || other is not Driver otherInternal) - return false; - - // Compare the internal models - return _driver.EqualTo(otherInternal._driver); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/Extension.cs b/SabreTools.DatItems/Formats/Extension.cs index 48d00a1a..2ad193e6 100644 --- a/SabreTools.DatItems/Formats/Extension.cs +++ b/SabreTools.DatItems/Formats/Extension.cs @@ -18,16 +18,10 @@ namespace SabreTools.DatItems.Formats [JsonProperty("name"), XmlElement("name")] public string? Name { - get => _extension.ReadString(Models.Internal.Extension.NameKey); - set => _extension[Models.Internal.Extension.NameKey] = value; + get => _internal.ReadString(Models.Internal.Extension.NameKey); + set => _internal[Models.Internal.Extension.NameKey] = value; } - /// - /// Internal Extension model - /// - [JsonIgnore] - private Models.Internal.Extension _extension = new(); - #endregion #region Accessors @@ -47,6 +41,7 @@ namespace SabreTools.DatItems.Formats /// public Extension() { + _internal = new Models.Internal.Extension(); Name = string.Empty; ItemType = ItemType.Extension; } @@ -67,25 +62,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _extension = this._extension?.Clone() as Models.Internal.Extension ?? new Models.Internal.Extension(), + _internal = this._internal?.Clone() as Models.Internal.Extension ?? new Models.Internal.Extension(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a Adjuster, return false - if (ItemType != other?.ItemType || other is not Extension otherInternal) - return false; - - // Compare the internal models - return _extension.EqualTo(otherInternal._extension); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/Feature.cs b/SabreTools.DatItems/Formats/Feature.cs index d70472dd..4044f520 100644 --- a/SabreTools.DatItems/Formats/Feature.cs +++ b/SabreTools.DatItems/Formats/Feature.cs @@ -21,8 +21,8 @@ namespace SabreTools.DatItems.Formats [JsonConverter(typeof(StringEnumConverter))] public FeatureType Type { - get => _feature.ReadString(Models.Internal.Feature.FeatureTypeKey).AsFeatureType(); - set => _feature[Models.Internal.Feature.FeatureTypeKey] = value.FromFeatureType(); + get => _internal.ReadString(Models.Internal.Feature.FeatureTypeKey).AsFeatureType(); + set => _internal[Models.Internal.Feature.FeatureTypeKey] = value.FromFeatureType(); } [JsonIgnore] @@ -35,8 +35,8 @@ namespace SabreTools.DatItems.Formats [JsonConverter(typeof(StringEnumConverter))] public FeatureStatus Status { - get => _feature.ReadString(Models.Internal.Feature.StatusKey).AsFeatureStatus(); - set => _feature[Models.Internal.Feature.StatusKey] = value.FromFeatureStatus(); + get => _internal.ReadString(Models.Internal.Feature.StatusKey).AsFeatureStatus(); + set => _internal[Models.Internal.Feature.StatusKey] = value.FromFeatureStatus(); } [JsonIgnore] @@ -49,19 +49,13 @@ namespace SabreTools.DatItems.Formats [JsonConverter(typeof(StringEnumConverter))] public FeatureStatus Overall { - get => _feature.ReadString(Models.Internal.Feature.OverallKey).AsFeatureStatus(); - set => _feature[Models.Internal.Feature.OverallKey] = value.FromFeatureStatus(); + get => _internal.ReadString(Models.Internal.Feature.OverallKey).AsFeatureStatus(); + set => _internal[Models.Internal.Feature.OverallKey] = value.FromFeatureStatus(); } [JsonIgnore] public bool OverallSpecified { get { return Overall != FeatureStatus.NULL; } } - /// - /// Internal Feature model - /// - [JsonIgnore] - private Models.Internal.Feature _feature = new(); - #endregion #region Constructors @@ -71,6 +65,7 @@ namespace SabreTools.DatItems.Formats /// public Feature() { + _internal = new Models.Internal.Feature(); ItemType = ItemType.Feature; } @@ -90,25 +85,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _feature = this._feature?.Clone() as Models.Internal.Feature ?? new Models.Internal.Feature(), + _internal = this._internal?.Clone() as Models.Internal.Feature ?? new Models.Internal.Feature(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a Feature, return false - if (ItemType != other?.ItemType || other is not Feature otherInternal) - return false; - - // Compare the internal models - return _feature.EqualTo(otherInternal._feature); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/Info.cs b/SabreTools.DatItems/Formats/Info.cs index 611e0b6d..1dfe76f1 100644 --- a/SabreTools.DatItems/Formats/Info.cs +++ b/SabreTools.DatItems/Formats/Info.cs @@ -18,8 +18,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("name"), XmlElement("name")] public string? Name { - get => _info.ReadString(Models.Internal.Info.NameKey); - set => _info[Models.Internal.Info.NameKey] = value; + get => _internal.ReadString(Models.Internal.Info.NameKey); + set => _internal[Models.Internal.Info.NameKey] = value; } /// @@ -28,16 +28,10 @@ namespace SabreTools.DatItems.Formats [JsonProperty("value"), XmlElement("value")] public string? Value { - get => _info.ReadString(Models.Internal.Info.ValueKey); - set => _info[Models.Internal.Info.ValueKey] = value; + get => _internal.ReadString(Models.Internal.Info.ValueKey); + set => _internal[Models.Internal.Info.ValueKey] = value; } - /// - /// Internal Info model - /// - [JsonIgnore] - private Models.Internal.Info _info = new(); - #endregion #region Accessors @@ -57,6 +51,7 @@ namespace SabreTools.DatItems.Formats /// public Info() { + _internal = new Models.Internal.Info(); Name = string.Empty; ItemType = ItemType.Info; } @@ -77,25 +72,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _info = this._info?.Clone() as Models.Internal.Info ?? new Models.Internal.Info(), + _internal = this._internal?.Clone() as Models.Internal.Info ?? new Models.Internal.Info(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a Info, return false - if (ItemType != other?.ItemType || other is not Info otherInternal) - return false; - - // Compare the internal models - return _info.EqualTo(otherInternal._info); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/Input.cs b/SabreTools.DatItems/Formats/Input.cs index f38fee88..e0308a84 100644 --- a/SabreTools.DatItems/Formats/Input.cs +++ b/SabreTools.DatItems/Formats/Input.cs @@ -20,8 +20,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("service", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("service")] public bool? Service { - get => _input.ReadBool(Models.Internal.Input.ServiceKey); - set => _input[Models.Internal.Input.ServiceKey] = value; + get => _internal.ReadBool(Models.Internal.Input.ServiceKey); + set => _internal[Models.Internal.Input.ServiceKey] = value; } [JsonIgnore] @@ -33,8 +33,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("tilt", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("tilt")] public bool? Tilt { - get => _input.ReadBool(Models.Internal.Input.TiltKey); - set => _input[Models.Internal.Input.TiltKey] = value; + get => _internal.ReadBool(Models.Internal.Input.TiltKey); + set => _internal[Models.Internal.Input.TiltKey] = value; } [JsonIgnore] @@ -46,8 +46,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("players", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("players")] public long? Players { - get => _input.ReadLong(Models.Internal.Input.PlayersKey); - set => _input[Models.Internal.Input.PlayersKey] = value; + get => _internal.ReadLong(Models.Internal.Input.PlayersKey); + set => _internal[Models.Internal.Input.PlayersKey] = value; } [JsonIgnore] @@ -59,8 +59,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("coins", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("coins")] public long? Coins { - get => _input.ReadLong(Models.Internal.Input.CoinsKey); - set => _input[Models.Internal.Input.CoinsKey] = value; + get => _internal.ReadLong(Models.Internal.Input.CoinsKey); + set => _internal[Models.Internal.Input.CoinsKey] = value; } [JsonIgnore] @@ -72,19 +72,13 @@ namespace SabreTools.DatItems.Formats [JsonProperty("controls", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("controls")] public List? Controls { - get => _input.Read(Models.Internal.Input.ControlKey)?.ToList(); - set => _input[Models.Internal.Input.ControlKey] = value?.ToArray(); + get => _internal.Read(Models.Internal.Input.ControlKey)?.ToList(); + set => _internal[Models.Internal.Input.ControlKey] = value?.ToArray(); } [JsonIgnore] public bool ControlsSpecified { get { return Controls != null && Controls.Count > 0; } } - /// - /// Internal Input model - /// - [JsonIgnore] - private Models.Internal.Input _input = new(); - #endregion #region Constructors @@ -94,6 +88,7 @@ namespace SabreTools.DatItems.Formats /// public Input() { + _internal = new Models.Internal.Input(); ItemType = ItemType.Input; } @@ -113,25 +108,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _input = this._input?.Clone() as Models.Internal.Input ?? new Models.Internal.Input(), + _internal = this._internal?.Clone() as Models.Internal.Input ?? new Models.Internal.Input(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a Input, return false - if (ItemType != other?.ItemType || other is not Input otherInternal) - return false; - - // Compare the internal models - return _input.EqualTo(otherInternal._input); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/Instance.cs b/SabreTools.DatItems/Formats/Instance.cs index b77242fe..b2cbd228 100644 --- a/SabreTools.DatItems/Formats/Instance.cs +++ b/SabreTools.DatItems/Formats/Instance.cs @@ -18,8 +18,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("name"), XmlElement("name")] public string? Name { - get => _instance.ReadString(Models.Internal.Instance.NameKey); - set => _instance[Models.Internal.Instance.NameKey] = value; + get => _internal.ReadString(Models.Internal.Instance.NameKey); + set => _internal[Models.Internal.Instance.NameKey] = value; } /// @@ -28,16 +28,10 @@ namespace SabreTools.DatItems.Formats [JsonProperty("briefname", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("briefname")] public string? BriefName { - get => _instance.ReadString(Models.Internal.Instance.BriefNameKey); - set => _instance[Models.Internal.Instance.BriefNameKey] = value; + get => _internal.ReadString(Models.Internal.Instance.BriefNameKey); + set => _internal[Models.Internal.Instance.BriefNameKey] = value; } - /// - /// Internal Instance model - /// - [JsonIgnore] - private Models.Internal.Instance _instance = new(); - #endregion #region Accessors @@ -57,6 +51,7 @@ namespace SabreTools.DatItems.Formats /// public Instance() { + _internal = new Models.Internal.Instance(); Name = string.Empty; ItemType = ItemType.Instance; } @@ -77,25 +72,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _instance = this._instance?.Clone() as Models.Internal.Instance ?? new Models.Internal.Instance(), + _internal = this._internal?.Clone() as Models.Internal.Instance ?? new Models.Internal.Instance(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a Instance, return false - if (ItemType != other?.ItemType || other is not Instance otherInternal) - return false; - - // Compare the internal models - return _instance.EqualTo(otherInternal._instance); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/Media.cs b/SabreTools.DatItems/Formats/Media.cs index 296d79d0..89de1854 100644 --- a/SabreTools.DatItems/Formats/Media.cs +++ b/SabreTools.DatItems/Formats/Media.cs @@ -21,8 +21,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("name"), XmlElement("name")] public string? Name { - get => _media.ReadString(Models.Internal.Media.NameKey); - set => _media[Models.Internal.Media.NameKey] = value; + get => _internal.ReadString(Models.Internal.Media.NameKey); + set => _internal[Models.Internal.Media.NameKey] = value; } /// @@ -31,8 +31,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("md5", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("md5")] public string? MD5 { - get => _media.ReadString(Models.Internal.Media.MD5Key); - set => _media[Models.Internal.Media.MD5Key] = TextHelper.NormalizeMD5(value); + get => _internal.ReadString(Models.Internal.Media.MD5Key); + set => _internal[Models.Internal.Media.MD5Key] = TextHelper.NormalizeMD5(value); } /// @@ -41,8 +41,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("sha1", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("sha1")] public string? SHA1 { - get => _media.ReadString(Models.Internal.Media.SHA1Key); - set => _media[Models.Internal.Media.SHA1Key] = TextHelper.NormalizeSHA1(value); + get => _internal.ReadString(Models.Internal.Media.SHA1Key); + set => _internal[Models.Internal.Media.SHA1Key] = TextHelper.NormalizeSHA1(value); } /// @@ -51,8 +51,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("sha256", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("sha256")] public string? SHA256 { - get => _media.ReadString(Models.Internal.Media.SHA256Key); - set => _media[Models.Internal.Media.SHA256Key] = TextHelper.NormalizeSHA256(value); + get => _internal.ReadString(Models.Internal.Media.SHA256Key); + set => _internal[Models.Internal.Media.SHA256Key] = TextHelper.NormalizeSHA256(value); } /// @@ -61,16 +61,10 @@ namespace SabreTools.DatItems.Formats [JsonProperty("spamsum", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("spamsum")] public string? SpamSum { - get => _media.ReadString(Models.Internal.Media.SpamSumKey); - set => _media[Models.Internal.Media.SpamSumKey] = value; + get => _internal.ReadString(Models.Internal.Media.SpamSumKey); + set => _internal[Models.Internal.Media.SpamSumKey] = value; } - /// - /// Internal Media model - /// - [JsonIgnore] - private Models.Internal.Media _media = new(); - #endregion #region Accessors @@ -90,6 +84,7 @@ namespace SabreTools.DatItems.Formats /// public Media() { + _internal = new Models.Internal.Media(); Name = string.Empty; ItemType = ItemType.Media; DupeType = 0x00; @@ -101,6 +96,7 @@ namespace SabreTools.DatItems.Formats /// public Media(BaseFile baseFile) { + _internal = new Models.Internal.Media(); Name = baseFile.Filename; MD5 = TextHelper.ByteArrayToString(baseFile.MD5); SHA1 = TextHelper.ByteArrayToString(baseFile.SHA1); @@ -127,7 +123,7 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _media = this._media?.Clone() as Models.Internal.Media ?? new Models.Internal.Media(), + _internal = this._internal?.Clone() as Models.Internal.Media ?? new Models.Internal.Media(), }; } @@ -153,7 +149,7 @@ namespace SabreTools.DatItems.Formats /// public Rom ConvertToRom() { - var rom = new Rom(_media.ConvertToRom()) + var rom = new Rom(_internal.ConvertToRom()) { ItemType = ItemType.Rom, DupeType = this.DupeType, @@ -170,28 +166,17 @@ namespace SabreTools.DatItems.Formats #region Comparision Methods - /// - public override bool Equals(DatItem? other) - { - // If we don't have a Media, return false - if (ItemType != other?.ItemType || other is not Media otherInternal) - return false; - - // Compare the internal models - return _media.EqualTo(otherInternal._media); - } - /// /// Fill any missing size and hash information from another Media /// /// Media to fill information from - public void FillMissingInformation(Media other) => _media.FillMissingHashes(other?._media); + public void FillMissingInformation(Media other) => _internal.FillMissingHashes(other?._internal); /// /// Get unique duplicate suffix on name collision /// /// String representing the suffix - public string GetDuplicateSuffix() => _media.GetDuplicateSuffix(); + public string GetDuplicateSuffix() => _internal.GetDuplicateSuffix(); #endregion diff --git a/SabreTools.DatItems/Formats/Part.cs b/SabreTools.DatItems/Formats/Part.cs index 0b1c49cc..e9903e7b 100644 --- a/SabreTools.DatItems/Formats/Part.cs +++ b/SabreTools.DatItems/Formats/Part.cs @@ -18,33 +18,27 @@ namespace SabreTools.DatItems.Formats [JsonProperty("name"), XmlElement("name")] public string? Name { - get => _part.ReadString(Models.Internal.Part.NameKey); - set => _part[Models.Internal.Part.NameKey] = value; + get => _internal.ReadString(Models.Internal.Part.NameKey); + set => _internal[Models.Internal.Part.NameKey] = value; } [JsonProperty("interface"), XmlElement("interface")] public string? Interface { - get => _part.ReadString(Models.Internal.Part.InterfaceKey); - set => _part[Models.Internal.Part.InterfaceKey] = value; + get => _internal.ReadString(Models.Internal.Part.InterfaceKey); + set => _internal[Models.Internal.Part.InterfaceKey] = value; } [JsonProperty("features", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("features")] public List? Features { - get => _part.Read(Models.Internal.Part.FeatureKey)?.ToList(); - set => _part[Models.Internal.Part.FeatureKey] = value?.ToArray(); + get => _internal.Read(Models.Internal.Part.FeatureKey)?.ToList(); + set => _internal[Models.Internal.Part.FeatureKey] = value?.ToArray(); } [JsonIgnore] public bool FeaturesSpecified { get { return Features != null && Features.Count > 0; } } - /// - /// Internal Part model - /// - [JsonIgnore] - private Models.Internal.Part _part = new(); - #endregion #region Accessors @@ -64,6 +58,7 @@ namespace SabreTools.DatItems.Formats /// public Part() { + _internal = new Models.Internal.Part(); Name = string.Empty; ItemType = ItemType.Part; } @@ -84,25 +79,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _part = this._part?.Clone() as Models.Internal.Part ?? new Models.Internal.Part(), + _internal = this._internal?.Clone() as Models.Internal.Part ?? new Models.Internal.Part(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a Part, return false - if (ItemType != other?.ItemType || other is not Part otherInternal) - return false; - - // Compare the internal models - return _part.EqualTo(otherInternal._part); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/PartFeature.cs b/SabreTools.DatItems/Formats/PartFeature.cs index 2182d416..45b87f50 100644 --- a/SabreTools.DatItems/Formats/PartFeature.cs +++ b/SabreTools.DatItems/Formats/PartFeature.cs @@ -18,8 +18,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("name"), XmlElement("name")] public string? Name { - get => _feature.ReadString(Models.Internal.Feature.NameKey); - set => _feature[Models.Internal.Feature.NameKey] = value; + get => _internal.ReadString(Models.Internal.Feature.NameKey); + set => _internal[Models.Internal.Feature.NameKey] = value; } /// @@ -28,16 +28,10 @@ namespace SabreTools.DatItems.Formats [JsonProperty("value"), XmlElement("value")] public string? Value { - get => _feature.ReadString(Models.Internal.Feature.ValueKey); - set => _feature[Models.Internal.Feature.ValueKey] = value; + get => _internal.ReadString(Models.Internal.Feature.ValueKey); + set => _internal[Models.Internal.Feature.ValueKey] = value; } - /// - /// Internal Feature model - /// - [JsonIgnore] - private Models.Internal.Feature _feature = new(); - #endregion #region Accessors @@ -57,6 +51,7 @@ namespace SabreTools.DatItems.Formats /// public PartFeature() { + _internal = new Models.Internal.Feature(); Name = string.Empty; ItemType = ItemType.PartFeature; } @@ -77,25 +72,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _feature = this._feature?.Clone() as Models.Internal.Feature ?? new Models.Internal.Feature(), + _internal = this._internal?.Clone() as Models.Internal.Feature ?? new Models.Internal.Feature(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a PartFeature, return false - if (ItemType != other?.ItemType || other is not PartFeature otherInternal) - return false; - - // Compare the internal models - return _feature.EqualTo(otherInternal._feature); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/Port.cs b/SabreTools.DatItems/Formats/Port.cs index 2134e621..b8ba7952 100644 --- a/SabreTools.DatItems/Formats/Port.cs +++ b/SabreTools.DatItems/Formats/Port.cs @@ -20,8 +20,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("tag", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("tag")] public string? Tag { - get => _port.ReadString(Models.Internal.Port.TagKey); - set => _port[Models.Internal.Port.TagKey] = value; + get => _internal.ReadString(Models.Internal.Port.TagKey); + set => _internal[Models.Internal.Port.TagKey] = value; } /// @@ -30,19 +30,13 @@ namespace SabreTools.DatItems.Formats [JsonProperty("analogs", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("analogs")] public List? Analogs { - get => _port.Read(Models.Internal.Port.AnalogKey)?.ToList(); - set => _port[Models.Internal.Port.AnalogKey] = value?.ToArray(); + get => _internal.Read(Models.Internal.Port.AnalogKey)?.ToList(); + set => _internal[Models.Internal.Port.AnalogKey] = value?.ToArray(); } [JsonIgnore] public bool AnalogsSpecified { get { return Analogs != null && Analogs.Count > 0; } } - /// - /// Internal Port model - /// - [JsonIgnore] - private Models.Internal.Port _port = new(); - #endregion #region Constructors @@ -52,6 +46,7 @@ namespace SabreTools.DatItems.Formats /// public Port() { + _internal = new Models.Internal.Port(); ItemType = ItemType.Port; } @@ -71,25 +66,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _port = this._port?.Clone() as Models.Internal.Port ?? new Models.Internal.Port(), + _internal = this._internal?.Clone() as Models.Internal.Port ?? new Models.Internal.Port(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a Port, return false - if (ItemType != other?.ItemType || other is not Port otherInternal) - return false; - - // Compare the internal models - return _port.EqualTo(otherInternal._port); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/RamOption.cs b/SabreTools.DatItems/Formats/RamOption.cs index 23ff09fb..841318c1 100644 --- a/SabreTools.DatItems/Formats/RamOption.cs +++ b/SabreTools.DatItems/Formats/RamOption.cs @@ -18,8 +18,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("name"), XmlElement("name")] public string? Name { - get => _ramOption.ReadString(Models.Internal.RamOption.NameKey); - set => _ramOption[Models.Internal.RamOption.NameKey] = value; + get => _internal.ReadString(Models.Internal.RamOption.NameKey); + set => _internal[Models.Internal.RamOption.NameKey] = value; } /// @@ -28,8 +28,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("default", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("default")] public bool? Default { - get => _ramOption.ReadBool(Models.Internal.RamOption.DefaultKey); - set => _ramOption[Models.Internal.RamOption.DefaultKey] = value; + get => _internal.ReadBool(Models.Internal.RamOption.DefaultKey); + set => _internal[Models.Internal.RamOption.DefaultKey] = value; } [JsonIgnore] @@ -41,16 +41,10 @@ namespace SabreTools.DatItems.Formats [JsonProperty("content", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("content")] public string? Content { - get => _ramOption.ReadString(Models.Internal.RamOption.ContentKey); - set => _ramOption[Models.Internal.RamOption.ContentKey] = value; + get => _internal.ReadString(Models.Internal.RamOption.ContentKey); + set => _internal[Models.Internal.RamOption.ContentKey] = value; } - /// - /// Internal RamOption model - /// - [JsonIgnore] - private Models.Internal.RamOption _ramOption = new(); - #endregion #region Accessors @@ -70,6 +64,7 @@ namespace SabreTools.DatItems.Formats /// public RamOption() { + _internal = new Models.Internal.RamOption(); Name = string.Empty; ItemType = ItemType.RamOption; } @@ -90,25 +85,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _ramOption = this._ramOption?.Clone() as Models.Internal.RamOption ?? new Models.Internal.RamOption(), + _internal = this._internal?.Clone() as Models.Internal.RamOption ?? new Models.Internal.RamOption(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a RamOption, return false - if (ItemType != other?.ItemType || other is not RamOption otherInternal) - return false; - - // Compare the internal models - return _ramOption.EqualTo(otherInternal._ramOption); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/Release.cs b/SabreTools.DatItems/Formats/Release.cs index fe47fee3..320425a8 100644 --- a/SabreTools.DatItems/Formats/Release.cs +++ b/SabreTools.DatItems/Formats/Release.cs @@ -18,8 +18,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("name"), XmlElement("name")] public string? Name { - get => _release.ReadString(Models.Internal.Release.NameKey); - set => _release[Models.Internal.Release.NameKey] = value; + get => _internal.ReadString(Models.Internal.Release.NameKey); + set => _internal[Models.Internal.Release.NameKey] = value; } /// @@ -28,8 +28,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("region", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("region")] public string? Region { - get => _release.ReadString(Models.Internal.Release.RegionKey); - set => _release[Models.Internal.Release.RegionKey] = value; + get => _internal.ReadString(Models.Internal.Release.RegionKey); + set => _internal[Models.Internal.Release.RegionKey] = value; } /// @@ -38,8 +38,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("language", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("language")] public string? Language { - get => _release.ReadString(Models.Internal.Release.LanguageKey); - set => _release[Models.Internal.Release.LanguageKey] = value; + get => _internal.ReadString(Models.Internal.Release.LanguageKey); + set => _internal[Models.Internal.Release.LanguageKey] = value; } /// @@ -48,8 +48,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("date", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("date")] public string? Date { - get => _release.ReadString(Models.Internal.Release.DateKey); - set => _release[Models.Internal.Release.DateKey] = value; + get => _internal.ReadString(Models.Internal.Release.DateKey); + set => _internal[Models.Internal.Release.DateKey] = value; } /// @@ -58,19 +58,13 @@ namespace SabreTools.DatItems.Formats [JsonProperty("default", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("default")] public bool? Default { - get => _release.ReadBool(Models.Internal.Release.DefaultKey); - set => _release[Models.Internal.Release.DefaultKey] = value; + get => _internal.ReadBool(Models.Internal.Release.DefaultKey); + set => _internal[Models.Internal.Release.DefaultKey] = value; } [JsonIgnore] public bool DefaultSpecified { get { return Default != null; } } - /// - /// Internal Release model - /// - [JsonIgnore] - private Models.Internal.Release _release = new(); - #endregion #region Accessors @@ -90,6 +84,7 @@ namespace SabreTools.DatItems.Formats /// public Release() { + _internal = new Models.Internal.Release(); Name = string.Empty; ItemType = ItemType.Release; Region = string.Empty; @@ -114,25 +109,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _release = this._release?.Clone() as Models.Internal.Release ?? new Models.Internal.Release(), + _internal = this._internal?.Clone() as Models.Internal.Release ?? new Models.Internal.Release(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a Release, return false - if (ItemType != other?.ItemType || other is not Release otherInternal) - return false; - - // Compare the internal models - return _release.EqualTo(otherInternal._release); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/Rom.cs b/SabreTools.DatItems/Formats/Rom.cs index 77fa405e..f5d73c50 100644 --- a/SabreTools.DatItems/Formats/Rom.cs +++ b/SabreTools.DatItems/Formats/Rom.cs @@ -24,8 +24,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("name"), XmlElement("name")] public string? Name { - get => _rom.ReadString(Models.Internal.Rom.NameKey); - set => _rom[Models.Internal.Rom.NameKey] = value; + get => _internal.ReadString(Models.Internal.Rom.NameKey); + set => _internal[Models.Internal.Rom.NameKey] = value; } /// @@ -34,8 +34,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("bios", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("bios")] public string? Bios { - get => _rom.ReadString(Models.Internal.Rom.BiosKey); - set => _rom[Models.Internal.Rom.BiosKey] = value; + get => _internal.ReadString(Models.Internal.Rom.BiosKey); + set => _internal[Models.Internal.Rom.BiosKey] = value; } /// @@ -44,8 +44,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("size", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("size")] public long? Size { - get => _rom.ReadLong(Models.Internal.Rom.SizeKey); - set => _rom[Models.Internal.Rom.SizeKey] = value; + get => _internal.ReadLong(Models.Internal.Rom.SizeKey); + set => _internal[Models.Internal.Rom.SizeKey] = value; } [JsonIgnore] @@ -57,8 +57,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("crc", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("crc")] public string? CRC { - get => _rom.ReadString(Models.Internal.Rom.CRCKey); - set => _rom[Models.Internal.Rom.CRCKey] = TextHelper.NormalizeCRC32(value); + get => _internal.ReadString(Models.Internal.Rom.CRCKey); + set => _internal[Models.Internal.Rom.CRCKey] = TextHelper.NormalizeCRC32(value); } /// @@ -67,8 +67,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("md5", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("md5")] public string? MD5 { - get => _rom.ReadString(Models.Internal.Rom.MD5Key); - set => _rom[Models.Internal.Rom.MD5Key] = TextHelper.NormalizeMD5(value); + get => _internal.ReadString(Models.Internal.Rom.MD5Key); + set => _internal[Models.Internal.Rom.MD5Key] = TextHelper.NormalizeMD5(value); } /// @@ -77,8 +77,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("sha1", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("sha1")] public string? SHA1 { - get => _rom.ReadString(Models.Internal.Rom.SHA1Key); - set => _rom[Models.Internal.Rom.SHA1Key] = TextHelper.NormalizeSHA1(value); + get => _internal.ReadString(Models.Internal.Rom.SHA1Key); + set => _internal[Models.Internal.Rom.SHA1Key] = TextHelper.NormalizeSHA1(value); } /// @@ -87,8 +87,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("sha256", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("sha256")] public string? SHA256 { - get => _rom.ReadString(Models.Internal.Rom.SHA256Key); - set => _rom[Models.Internal.Rom.SHA256Key] = TextHelper.NormalizeSHA256(value); + get => _internal.ReadString(Models.Internal.Rom.SHA256Key); + set => _internal[Models.Internal.Rom.SHA256Key] = TextHelper.NormalizeSHA256(value); } /// @@ -97,8 +97,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("sha384", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("sha384")] public string? SHA384 { - get => _rom.ReadString(Models.Internal.Rom.SHA384Key); - set => _rom[Models.Internal.Rom.SHA384Key] = TextHelper.NormalizeSHA384(value); + get => _internal.ReadString(Models.Internal.Rom.SHA384Key); + set => _internal[Models.Internal.Rom.SHA384Key] = TextHelper.NormalizeSHA384(value); } /// @@ -107,8 +107,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("sha512", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("sha512")] public string? SHA512 { - get => _rom.ReadString(Models.Internal.Rom.SHA512Key); - set => _rom[Models.Internal.Rom.SHA512Key] = TextHelper.NormalizeSHA512(value); + get => _internal.ReadString(Models.Internal.Rom.SHA512Key); + set => _internal[Models.Internal.Rom.SHA512Key] = TextHelper.NormalizeSHA512(value); } /// @@ -117,8 +117,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("spamsum", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("spamsum")] public string? SpamSum { - get => _rom.ReadString(Models.Internal.Rom.SpamSumKey); - set => _rom[Models.Internal.Rom.SpamSumKey] = value; + get => _internal.ReadString(Models.Internal.Rom.SpamSumKey); + set => _internal[Models.Internal.Rom.SpamSumKey] = value; } /// @@ -127,8 +127,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("merge", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("merge")] public string? MergeTag { - get => _rom.ReadString(Models.Internal.Rom.MergeKey); - set => _rom[Models.Internal.Rom.MergeKey] = value; + get => _internal.ReadString(Models.Internal.Rom.MergeKey); + set => _internal[Models.Internal.Rom.MergeKey] = value; } /// @@ -137,8 +137,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("region", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("biregionos")] public string? Region { - get => _rom.ReadString(Models.Internal.Rom.RegionKey); - set => _rom[Models.Internal.Rom.RegionKey] = value; + get => _internal.ReadString(Models.Internal.Rom.RegionKey); + set => _internal[Models.Internal.Rom.RegionKey] = value; } /// @@ -147,8 +147,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("offset", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("offset")] public string? Offset { - get => _rom.ReadString(Models.Internal.Rom.OffsetKey); - set => _rom[Models.Internal.Rom.OffsetKey] = value; + get => _internal.ReadString(Models.Internal.Rom.OffsetKey); + set => _internal[Models.Internal.Rom.OffsetKey] = value; } /// @@ -157,8 +157,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("date", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("date")] public string? Date { - get => _rom.ReadString(Models.Internal.Rom.DateKey); - set => _rom[Models.Internal.Rom.DateKey] = value; + get => _internal.ReadString(Models.Internal.Rom.DateKey); + set => _internal[Models.Internal.Rom.DateKey] = value; } /// @@ -168,8 +168,8 @@ namespace SabreTools.DatItems.Formats [JsonConverter(typeof(StringEnumConverter))] public ItemStatus ItemStatus { - get => _rom.ReadString(Models.Internal.Rom.StatusKey).AsItemStatus(); - set => _rom[Models.Internal.Rom.StatusKey] = value.FromItemStatus(yesno: false); + get => _internal.ReadString(Models.Internal.Rom.StatusKey).AsItemStatus(); + set => _internal[Models.Internal.Rom.StatusKey] = value.FromItemStatus(yesno: false); } [JsonIgnore] @@ -181,8 +181,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("optional", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("optional")] public bool? Optional { - get => _rom.ReadBool(Models.Internal.Rom.OptionalKey); - set => _rom[Models.Internal.Rom.OptionalKey] = value; + get => _internal.ReadBool(Models.Internal.Rom.OptionalKey); + set => _internal[Models.Internal.Rom.OptionalKey] = value; } [JsonIgnore] @@ -194,8 +194,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("inverted", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("inverted")] public bool? Inverted { - get => _rom.ReadBool(Models.Internal.Rom.InvertedKey); - set => _rom[Models.Internal.Rom.InvertedKey] = value; + get => _internal.ReadBool(Models.Internal.Rom.InvertedKey); + set => _internal[Models.Internal.Rom.InvertedKey] = value; } [JsonIgnore] @@ -211,8 +211,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("ado_source", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("ado_source")] public string? ArchiveDotOrgSource { - get => _rom.ReadString(Models.Internal.Rom.SourceKey); - set => _rom[Models.Internal.Rom.SourceKey] = value; + get => _internal.ReadString(Models.Internal.Rom.SourceKey); + set => _internal[Models.Internal.Rom.SourceKey] = value; } /// @@ -221,8 +221,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("ado_format", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("ado_format")] public string? ArchiveDotOrgFormat { - get => _rom.ReadString(Models.Internal.Rom.FormatKey); - set => _rom[Models.Internal.Rom.FormatKey] = value; + get => _internal.ReadString(Models.Internal.Rom.FormatKey); + set => _internal[Models.Internal.Rom.FormatKey] = value; } /// @@ -231,8 +231,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("original_filename", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("original_filename")] public string? OriginalFilename { - get => _rom.ReadString(Models.Internal.Rom.OriginalKey); - set => _rom[Models.Internal.Rom.OriginalKey] = value; + get => _internal.ReadString(Models.Internal.Rom.OriginalKey); + set => _internal[Models.Internal.Rom.OriginalKey] = value; } /// @@ -244,8 +244,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("rotation", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("rotation")] public string? Rotation { - get => _rom.ReadString(Models.Internal.Rom.RotationKey); - set => _rom[Models.Internal.Rom.RotationKey] = value; + get => _internal.ReadString(Models.Internal.Rom.RotationKey); + set => _internal[Models.Internal.Rom.RotationKey] = value; } /// @@ -254,8 +254,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("summation", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("summation")] public string? Summation { - get => _rom.ReadString(Models.Internal.Rom.SummationKey); - set => _rom[Models.Internal.Rom.SummationKey] = value; + get => _internal.ReadString(Models.Internal.Rom.SummationKey); + set => _internal[Models.Internal.Rom.SummationKey] = value; } #endregion @@ -265,11 +265,11 @@ namespace SabreTools.DatItems.Formats /// /// Alternate name for the item /// - [JsonProperty("alt_romname", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("alt_romname")] + [JsonProperty("alt_internalname", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("alt_internalname")] public string? AltName { - get => _rom.ReadString(Models.Internal.Rom.AltRomnameKey); - set => _rom[Models.Internal.Rom.AltRomnameKey] = value; + get => _internal.ReadString(Models.Internal.Rom.AltRomnameKey); + set => _internal[Models.Internal.Rom.AltRomnameKey] = value; } /// @@ -278,8 +278,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("alt_title", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("alt_title")] public string? AltTitle { - get => _rom.ReadString(Models.Internal.Rom.AltTitleKey); - set => _rom[Models.Internal.Rom.AltTitleKey] = value; + get => _internal.ReadString(Models.Internal.Rom.AltTitleKey); + set => _internal[Models.Internal.Rom.AltTitleKey] = value; } #endregion @@ -292,8 +292,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("mia", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("mia")] public bool? MIA { - get => _rom.ReadBool(Models.Internal.Rom.MIAKey); - set => _rom[Models.Internal.Rom.MIAKey] = value; + get => _internal.ReadBool(Models.Internal.Rom.MIAKey); + set => _internal[Models.Internal.Rom.MIAKey] = value; } [JsonIgnore] @@ -306,9 +306,13 @@ namespace SabreTools.DatItems.Formats /// /// OpenMSX sub item type /// - /// This is inverted from the internal model + /// Hack on top of internal model [JsonProperty("original", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("original")] - public Original? Original { get; set; } + public Original? Original + { + get => _internal.Read("ORIGINAL"); + set => _internal["ORIGINAL"] = value; + } [JsonIgnore] public bool OriginalSpecified { get { return Original != null && Original != default; } } @@ -320,8 +324,8 @@ namespace SabreTools.DatItems.Formats [JsonConverter(typeof(StringEnumConverter))] public OpenMSXSubType OpenMSXSubType { - get => _rom.ReadString(Models.Internal.Rom.OpenMSXMediaType).AsOpenMSXSubType(); - set => _rom[Models.Internal.Rom.OpenMSXMediaType] = value.FromOpenMSXSubType(); + get => _internal.ReadString(Models.Internal.Rom.OpenMSXMediaType).AsOpenMSXSubType(); + set => _internal[Models.Internal.Rom.OpenMSXMediaType] = value.FromOpenMSXSubType(); } [JsonIgnore] @@ -334,8 +338,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("openmsx_type", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("openmsx_type")] public string? OpenMSXType { - get => _rom.ReadString(Models.Internal.Rom.OpenMSXType); - set => _rom[Models.Internal.Rom.OpenMSXType] = value; + get => _internal.ReadString(Models.Internal.Rom.OpenMSXType); + set => _internal[Models.Internal.Rom.OpenMSXType] = value; } /// @@ -344,8 +348,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("remark", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("remark")] public string? Remark { - get => _rom.ReadString(Models.Internal.Rom.RemarkKey); - set => _rom[Models.Internal.Rom.RemarkKey] = value; + get => _internal.ReadString(Models.Internal.Rom.RemarkKey); + set => _internal[Models.Internal.Rom.RemarkKey] = value; } /// @@ -353,7 +357,11 @@ namespace SabreTools.DatItems.Formats /// /// TODO: Investigate where this value came from? [JsonProperty("boot", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("boot")] - public string? Boot { get; set; } + public string? Boot + { + get => _internal.ReadString("BOOT"); + set => _internal["BOOT"] = value; + } #endregion @@ -362,9 +370,13 @@ namespace SabreTools.DatItems.Formats /// /// Data area information /// - /// This is inverted from the internal model + /// Hack on top of internal model [JsonProperty("dataarea", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("dataarea")] - public DataArea? DataArea { get; set; } = null; + public DataArea? DataArea + { + get => _internal.Read("DATAAREA"); + set => _internal["DATAAREA"] = value; + } [JsonIgnore] public bool DataAreaSpecified @@ -386,8 +398,8 @@ namespace SabreTools.DatItems.Formats [JsonConverter(typeof(StringEnumConverter))] public LoadFlag LoadFlag { - get => _rom.ReadString(Models.Internal.Rom.LoadFlagKey).AsLoadFlag(); - set => _rom[Models.Internal.Rom.LoadFlagKey] = value.FromLoadFlag(); + get => _internal.ReadString(Models.Internal.Rom.LoadFlagKey).AsLoadFlag(); + set => _internal[Models.Internal.Rom.LoadFlagKey] = value.FromLoadFlag(); } [JsonIgnore] @@ -396,9 +408,13 @@ namespace SabreTools.DatItems.Formats /// /// Original hardware part associated with the item /// - /// This is inverted from the internal model + /// Hack on top of internal model [JsonProperty("part", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("part")] - public Part? Part { get; set; } = null; + public Part? Part + { + get => _internal.Read("PART"); + set => _internal["PART"] = value; + } [JsonIgnore] public bool PartSpecified @@ -417,18 +433,12 @@ namespace SabreTools.DatItems.Formats [JsonProperty("value", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("value")] public string? Value { - get => _rom.ReadString(Models.Internal.Rom.ValueKey); - set => _rom[Models.Internal.Rom.ValueKey] = value; + get => _internal.ReadString(Models.Internal.Rom.ValueKey); + set => _internal[Models.Internal.Rom.ValueKey] = value; } #endregion - /// - /// Internal Rom model - /// - [JsonIgnore] - private Models.Internal.Rom _rom = new(); - #endregion // Fields #region Accessors @@ -448,6 +458,7 @@ namespace SabreTools.DatItems.Formats /// public Rom() { + _internal = new Models.Internal.Rom(); Name = null; ItemType = ItemType.Rom; DupeType = 0x00; @@ -462,6 +473,7 @@ namespace SabreTools.DatItems.Formats /// public Rom(string name, string machineName) { + _internal = new Models.Internal.Rom(); Name = name; ItemType = ItemType.Rom; Size = null; @@ -480,6 +492,7 @@ namespace SabreTools.DatItems.Formats /// public Rom(BaseFile baseFile) { + _internal = new Models.Internal.Rom(); Name = baseFile.Filename; Size = baseFile.Size; CRC = TextHelper.ByteArrayToString(baseFile.CRC); @@ -501,7 +514,7 @@ namespace SabreTools.DatItems.Formats /// public Rom(Models.Internal.Rom? rom) { - _rom = rom ?? new Models.Internal.Rom(); + _internal = rom ?? new Models.Internal.Rom(); ItemType = ItemType.Rom; DupeType = 0x00; @@ -525,10 +538,7 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _rom = this._rom?.Clone() as Models.Internal.Rom ?? new Models.Internal.Rom(), - - DataArea = this.DataArea, - Part = this.Part, + _internal = this._internal?.Clone() as Models.Internal.Rom ?? new Models.Internal.Rom(), }; } @@ -557,40 +567,29 @@ namespace SabreTools.DatItems.Formats #region Comparision Methods - /// - public override bool Equals(DatItem? other) - { - // If we don't have a Rom, return false - if (ItemType != other?.ItemType || other is not Rom otherInternal) - return false; - - // Compare the internal models - return _rom.EqualTo(otherInternal._rom); - } - /// /// Fill any missing size and hash information from another Rom /// /// Rom to fill information from - public void FillMissingInformation(Rom other) => _rom.FillMissingHashes(other?._rom); + public void FillMissingInformation(Rom other) => _internal.FillMissingHashes(other?._internal); /// /// Get unique duplicate suffix on name collision /// /// String representing the suffix - public string GetDuplicateSuffix() => _rom.GetDuplicateSuffix(); + public string GetDuplicateSuffix() => _internal.GetDuplicateSuffix(); /// /// Returns if the Rom contains any hashes /// /// True if any hash exists, false otherwise - public bool HasHashes() => _rom.HasHashes(); + public bool HasHashes() => _internal.HasHashes(); /// /// Returns if all of the hashes are set to their 0-byte values /// /// True if any hash matches the 0-byte value, false otherwise - public bool HasZeroHash() => _rom.HasZeroHash(); + public bool HasZeroHash() => _internal.HasZeroHash(); #endregion diff --git a/SabreTools.DatItems/Formats/Sample.cs b/SabreTools.DatItems/Formats/Sample.cs index cc0b8dbc..d30f7c06 100644 --- a/SabreTools.DatItems/Formats/Sample.cs +++ b/SabreTools.DatItems/Formats/Sample.cs @@ -18,16 +18,10 @@ namespace SabreTools.DatItems.Formats [JsonProperty("name"), XmlElement("name")] public string? Name { - get => _sample.ReadString(Models.Internal.Sample.NameKey); - set => _sample[Models.Internal.Sample.NameKey] = value; + get => _internal.ReadString(Models.Internal.Sample.NameKey); + set => _internal[Models.Internal.Sample.NameKey] = value; } - /// - /// Internal Sample model - /// - [JsonIgnore] - private Models.Internal.Sample _sample = new(); - #endregion #region Accessors @@ -47,6 +41,7 @@ namespace SabreTools.DatItems.Formats /// public Sample() { + _internal = new Models.Internal.Sample(); Name = string.Empty; ItemType = ItemType.Sample; } @@ -67,25 +62,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _sample = this._sample?.Clone() as Models.Internal.Sample ?? new Models.Internal.Sample(), + _internal = this._internal?.Clone() as Models.Internal.Sample ?? new Models.Internal.Sample(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a Sample, return false - if (ItemType != other?.ItemType || other is not Sample otherInternal) - return false; - - // Compare the internal models - return _sample.EqualTo(otherInternal._sample); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/SharedFeature.cs b/SabreTools.DatItems/Formats/SharedFeature.cs index f3576626..75d3359f 100644 --- a/SabreTools.DatItems/Formats/SharedFeature.cs +++ b/SabreTools.DatItems/Formats/SharedFeature.cs @@ -18,8 +18,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("name"), XmlElement("name")] public string? Name { - get => _sharedFeat.ReadString(Models.Internal.SharedFeat.NameKey); - set => _sharedFeat[Models.Internal.SharedFeat.NameKey] = value; + get => _internal.ReadString(Models.Internal.SharedFeat.NameKey); + set => _internal[Models.Internal.SharedFeat.NameKey] = value; } /// @@ -28,16 +28,10 @@ namespace SabreTools.DatItems.Formats [JsonProperty("value"), XmlElement("value")] public string? Value { - get => _sharedFeat.ReadString(Models.Internal.SharedFeat.ValueKey); - set => _sharedFeat[Models.Internal.SharedFeat.ValueKey] = value; + get => _internal.ReadString(Models.Internal.SharedFeat.ValueKey); + set => _internal[Models.Internal.SharedFeat.ValueKey] = value; } - /// - /// Internal SharedFeat model - /// - [JsonIgnore] - private Models.Internal.SharedFeat _sharedFeat = new(); - #endregion #region Accessors @@ -57,6 +51,7 @@ namespace SabreTools.DatItems.Formats /// public SharedFeature() { + _internal = new Models.Internal.SharedFeat(); Name = string.Empty; ItemType = ItemType.SharedFeature; } @@ -77,25 +72,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _sharedFeat = this._sharedFeat?.Clone() as Models.Internal.SharedFeat ?? new Models.Internal.SharedFeat(), + _internal = this._internal?.Clone() as Models.Internal.SharedFeat ?? new Models.Internal.SharedFeat(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a SharedFeature, return false - if (ItemType != other?.ItemType || other is not SharedFeature otherInternal) - return false; - - // Compare the internal models - return _sharedFeat.EqualTo(otherInternal._sharedFeat); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/Slot.cs b/SabreTools.DatItems/Formats/Slot.cs index b63c43ce..9fa64c34 100644 --- a/SabreTools.DatItems/Formats/Slot.cs +++ b/SabreTools.DatItems/Formats/Slot.cs @@ -20,8 +20,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("name"), XmlElement("name")] public string? Name { - get => _slot.ReadString(Models.Internal.Slot.NameKey); - set => _slot[Models.Internal.Slot.NameKey] = value; + get => _internal.ReadString(Models.Internal.Slot.NameKey); + set => _internal[Models.Internal.Slot.NameKey] = value; } /// @@ -30,19 +30,13 @@ namespace SabreTools.DatItems.Formats [JsonProperty("slotoptions", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("slotoptions")] public List? SlotOptions { - get => _slot.Read(Models.Internal.Slot.SlotOptionKey)?.ToList(); - set => _slot[Models.Internal.Slot.SlotOptionKey] = value?.ToArray(); + get => _internal.Read(Models.Internal.Slot.SlotOptionKey)?.ToList(); + set => _internal[Models.Internal.Slot.SlotOptionKey] = value?.ToArray(); } [JsonIgnore] public bool SlotOptionsSpecified { get { return SlotOptions != null && SlotOptions.Count > 0; } } - /// - /// Internal Slot model - /// - [JsonIgnore] - private Models.Internal.Slot _slot = new(); - #endregion #region Accessors @@ -62,6 +56,7 @@ namespace SabreTools.DatItems.Formats /// public Slot() { + _internal = new Models.Internal.Slot(); Name = string.Empty; ItemType = ItemType.Slot; } @@ -82,25 +77,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _slot = this._slot?.Clone() as Models.Internal.Slot ?? new Models.Internal.Slot(), + _internal = this._internal?.Clone() as Models.Internal.Slot ?? new Models.Internal.Slot(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a Slot, return false - if (ItemType != other?.ItemType || other is not Slot otherInternal) - return false; - - // Compare the internal models - return _slot.EqualTo(otherInternal._slot); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/SlotOption.cs b/SabreTools.DatItems/Formats/SlotOption.cs index 53c73dab..70c8d293 100644 --- a/SabreTools.DatItems/Formats/SlotOption.cs +++ b/SabreTools.DatItems/Formats/SlotOption.cs @@ -18,8 +18,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("name"), XmlElement("name")] public string? Name { - get => _slotOption.ReadString(Models.Internal.SlotOption.NameKey); - set => _slotOption[Models.Internal.SlotOption.NameKey] = value; + get => _internal.ReadString(Models.Internal.SlotOption.NameKey); + set => _internal[Models.Internal.SlotOption.NameKey] = value; } /// @@ -28,8 +28,8 @@ namespace SabreTools.DatItems.Formats [JsonProperty("devname"), XmlElement("devname")] public string? DeviceName { - get => _slotOption.ReadString(Models.Internal.SlotOption.DevNameKey); - set => _slotOption[Models.Internal.SlotOption.DevNameKey] = value; + get => _internal.ReadString(Models.Internal.SlotOption.DevNameKey); + set => _internal[Models.Internal.SlotOption.DevNameKey] = value; } /// @@ -38,19 +38,13 @@ namespace SabreTools.DatItems.Formats [JsonProperty("default", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("default")] public bool? Default { - get => _slotOption.ReadBool(Models.Internal.SlotOption.DefaultKey); - set => _slotOption[Models.Internal.SlotOption.DefaultKey] = value; + get => _internal.ReadBool(Models.Internal.SlotOption.DefaultKey); + set => _internal[Models.Internal.SlotOption.DefaultKey] = value; } [JsonIgnore] public bool DefaultSpecified { get { return Default != null; } } - /// - /// Internal SlotOption model - /// - [JsonIgnore] - private Models.Internal.SlotOption _slotOption = new(); - #endregion #region Accessors @@ -70,6 +64,7 @@ namespace SabreTools.DatItems.Formats /// public SlotOption() { + _internal = new Models.Internal.SlotOption(); Name = string.Empty; ItemType = ItemType.SlotOption; } @@ -90,25 +85,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _slotOption = this._slotOption?.Clone() as Models.Internal.SlotOption ?? new Models.Internal.SlotOption(), + _internal = this._internal?.Clone() as Models.Internal.SlotOption ?? new Models.Internal.SlotOption(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a Adjuster, return false - if (ItemType != other?.ItemType || other is not SlotOption otherInternal) - return false; - - // Compare the internal models - return _slotOption.EqualTo(otherInternal._slotOption); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/SoftwareList.cs b/SabreTools.DatItems/Formats/SoftwareList.cs index e2d18401..64fa7397 100644 --- a/SabreTools.DatItems/Formats/SoftwareList.cs +++ b/SabreTools.DatItems/Formats/SoftwareList.cs @@ -24,8 +24,8 @@ namespace SabreTools.DatItems.Formats [XmlElement("tag")] public string? Tag { - get => _softwareList.ReadString(Models.Internal.SoftwareList.TagKey); - set => _softwareList[Models.Internal.SoftwareList.TagKey] = value; + get => _internal.ReadString(Models.Internal.SoftwareList.TagKey); + set => _internal[Models.Internal.SoftwareList.TagKey] = value; } /// @@ -35,8 +35,8 @@ namespace SabreTools.DatItems.Formats [XmlElement("name")] public string? Name { - get => _softwareList.ReadString(Models.Internal.SoftwareList.NameKey); - set => _softwareList[Models.Internal.SoftwareList.NameKey] = value; + get => _internal.ReadString(Models.Internal.SoftwareList.NameKey); + set => _internal[Models.Internal.SoftwareList.NameKey] = value; } /// @@ -47,8 +47,8 @@ namespace SabreTools.DatItems.Formats [XmlElement("status")] public SoftwareListStatus Status { - get => _softwareList.ReadString(Models.Internal.SoftwareList.StatusKey).AsSoftwareListStatus(); - set => _softwareList[Models.Internal.SoftwareList.StatusKey] = value.FromSoftwareListStatus(); + get => _internal.ReadString(Models.Internal.SoftwareList.StatusKey).AsSoftwareListStatus(); + set => _internal[Models.Internal.SoftwareList.StatusKey] = value.FromSoftwareListStatus(); } [JsonIgnore] @@ -61,16 +61,10 @@ namespace SabreTools.DatItems.Formats [XmlElement("filter")] public string? Filter { - get => _softwareList.ReadString(Models.Internal.SoftwareList.FilterKey); - set => _softwareList[Models.Internal.SoftwareList.FilterKey] = value; + get => _internal.ReadString(Models.Internal.SoftwareList.FilterKey); + set => _internal[Models.Internal.SoftwareList.FilterKey] = value; } - /// - /// Internal SoftwareList model - /// - [JsonIgnore] - private Models.Internal.SoftwareList _softwareList = new(); - #endregion #region Accessors @@ -90,6 +84,7 @@ namespace SabreTools.DatItems.Formats /// public SoftwareList() { + _internal = new Models.Internal.SoftwareList(); Name = string.Empty; ItemType = ItemType.SoftwareList; } @@ -109,24 +104,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _softwareList = this._softwareList?.Clone() as Models.Internal.SoftwareList ?? new Models.Internal.SoftwareList(), + _internal = this._internal?.Clone() as Models.Internal.SoftwareList ?? new Models.Internal.SoftwareList(), }; } #endregion - - #region Comparision Methods - - public override bool Equals(DatItem? other) - { - // If we don't have a Adjuster, return false - if (ItemType != other?.ItemType || other is not SoftwareList otherInternal) - return false; - - // Compare the internal models - return _softwareList.EqualTo(otherInternal._softwareList); - } - - #endregion } } diff --git a/SabreTools.DatItems/Formats/Sound.cs b/SabreTools.DatItems/Formats/Sound.cs index 2e23401b..4b59d94c 100644 --- a/SabreTools.DatItems/Formats/Sound.cs +++ b/SabreTools.DatItems/Formats/Sound.cs @@ -18,19 +18,13 @@ namespace SabreTools.DatItems.Formats [JsonProperty("channels", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("channels")] public long? Channels { - get => _sound.ReadLong(Models.Internal.Sound.ChannelsKey); - set => _sound[Models.Internal.Sound.ChannelsKey] = value; + get => _internal.ReadLong(Models.Internal.Sound.ChannelsKey); + set => _internal[Models.Internal.Sound.ChannelsKey] = value; } [JsonIgnore] public bool ChannelsSpecified { get { return Channels != null; } } - /// - /// Internal Sound model - /// - [JsonIgnore] - private Models.Internal.Sound _sound = new(); - #endregion #region Constructors @@ -40,6 +34,7 @@ namespace SabreTools.DatItems.Formats /// public Sound() { + _internal = new Models.Internal.Sound(); ItemType = ItemType.Sound; } @@ -59,25 +54,10 @@ namespace SabreTools.DatItems.Formats Source = this.Source?.Clone() as Source, Remove = this.Remove, - _sound = this._sound?.Clone() as Models.Internal.Sound ?? new Models.Internal.Sound(), + _internal = this._internal?.Clone() as Models.Internal.Sound ?? new Models.Internal.Sound(), }; } #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If we don't have a Sound, return false - if (ItemType != other?.ItemType || other is not Sound otherInternal) - return false; - - // Compare the internal models - return _sound.EqualTo(otherInternal._sound); - } - - #endregion } }