Move more to the DatItem base class

This commit is contained in:
Matt Nadareski
2023-08-14 22:33:05 -04:00
parent 6adbe601a2
commit ed1f809065
41 changed files with 708 additions and 1310 deletions

View File

@@ -70,10 +70,27 @@ namespace SabreTools.Core
#region Conversion
/// <summary>
/// Convert a DatItem to a Rom
/// </summary>
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,
};
}
/// <summary>
/// Convert a Disk to a Rom
/// </summary>
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
/// <summary>
/// Convert a Media to a Rom
/// </summary>
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
/// <summary>
/// Returns if any hashes exist
/// </summary>
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;
}
/// <summary>
/// Returns if any hashes exist
/// </summary>
public static bool HasHashes(this Media media)
return self switch
{
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;
}
/// <summary>
/// Returns if any hashes exist
/// </summary>
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;
Disk diskSelf => diskSelf.HasHashes(),
Media mediaSelf => mediaSelf.HasHashes(),
Rom romSelf => romSelf.HasHashes(),
_ => false,
};
}
/// <summary>
/// Returns if all of the hashes are set to their 0-byte values or null
/// </summary>
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;
}
/// <summary>
/// Returns if all of the hashes are set to their 0-byte values or null
/// </summary>
public static bool HasZeroHash(this Media media)
return self switch
{
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;
}
/// <summary>
/// Returns if all of the hashes are set to their 0-byte values or null
/// </summary>
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;
Disk diskSelf => diskSelf.HasZeroHash(),
Media mediaSelf => mediaSelf.HasZeroHash(),
Rom romSelf => romSelf.HasZeroHash(),
_ => false,
};
}
/// <summary>
@@ -501,14 +443,139 @@ namespace SabreTools.Core
return !crcNull || !md5Null || !sha1Null || !sha256Null || !sha384Null || !sha512Null || !spamsumNull;
}
/// <summary>
/// Returns if any hashes exist
/// </summary>
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;
}
/// <summary>
/// Returns if any hashes exist
/// </summary>
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;
}
/// <summary>
/// Returns if any hashes exist
/// </summary>
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;
}
/// <summary>
/// Returns if all of the hashes are set to their 0-byte values or null
/// </summary>
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;
}
/// <summary>
/// Returns if all of the hashes are set to their 0-byte values or null
/// </summary>
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;
}
/// <summary>
/// Returns if all of the hashes are set to their 0-byte values or null
/// </summary>
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
/// <summary>
/// Fill any missing size and hash information from another DatItem
/// </summary>
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;
};
}
/// <summary>
/// Fill any missing size and hash information from another Disk
/// </summary>
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
/// <summary>
/// Fill any missing size and hash information from another Media
/// </summary>
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
/// <summary>
/// Fill any missing size and hash information from another Rom
/// </summary>
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
/// <summary>
/// Get unique duplicate suffix on name collision
/// </summary>
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",
};
}
/// <summary>
/// Get unique duplicate suffix on name collision
/// </summary>
private static string GetDuplicateSuffix(this Disk? self)
{
if (self == null)
return string.Empty;
@@ -628,7 +712,7 @@ namespace SabreTools.Core
/// <summary>
/// Get unique duplicate suffix on name collision
/// </summary>
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
/// <summary>
/// Get unique duplicate suffix on name collision
/// </summary>
public static string GetDuplicateSuffix(this Rom? self)
private static string GetDuplicateSuffix(this Rom? self)
{
if (self == null)
return string.Empty;

View File

@@ -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();
}
/// <summary>
/// Duplicate type when compared to another item
/// </summary>
/// <remarks>Hack on top of internal model</remarks>
[JsonIgnore, XmlIgnore]
public DupeType DupeType { get; set; }
public DupeType DupeType
{
get => _internal.Read<DupeType?>("DUPETYPE") ?? 0;
set => _internal["DUPETYPE"] = value;
}
/// <summary>
/// Internal model wrapped by this DatItem
/// </summary>
[JsonIgnore, XmlIgnore]
protected Models.Internal.DatItem _internal;
#endregion
@@ -85,8 +100,13 @@ namespace SabreTools.DatItems
/// <summary>
/// Machine values
/// </summary>
/// <remarks>Hack on top of internal model</remarks>
[JsonIgnore, XmlIgnore]
public Machine? Machine { get; set; } = new Machine();
public Machine? Machine
{
get => _internal.Read<Machine>("MACHINE") ?? new Machine();
set => _internal["MACHINE"] = value;
}
#endregion
@@ -95,14 +115,24 @@ namespace SabreTools.DatItems
/// <summary>
/// Source information
/// </summary>
/// <remarks>Hack on top of internal model</remarks>
[JsonIgnore, XmlIgnore]
public Source? Source { get; set; } = new Source();
public Source? Source
{
get => _internal.Read<Source>("SOURCE") ?? new Source();
set => _internal["SOURCE"] = value;
}
/// <summary>
/// Flag if item should be removed
/// </summary>
/// <remarks>Hack on top of internal model</remarks>
[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
/// </summary>
public DatItem()
{
_internal = new Models.Internal.Blank();
logger = new Logger(this);
}
@@ -286,7 +317,15 @@ namespace SabreTools.DatItems
/// </summary>
/// <param name="other">DatItem to use as a baseline</param>
/// <returns>True if the items are duplicates, false otherwise</returns>
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);
}
/// <summary>
/// Return the duplicate status of two items

View File

@@ -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;
}
/// <summary>
@@ -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<Condition>? Conditions
{
get => _adjuster.Read<Condition[]>(Models.Internal.Adjuster.ConditionKey)?.ToList();
set => _adjuster[Models.Internal.Adjuster.ConditionKey] = value?.ToArray();
get => _internal.Read<Condition[]>(Models.Internal.Adjuster.ConditionKey)?.ToList();
set => _internal[Models.Internal.Adjuster.ConditionKey] = value?.ToArray();
}
[JsonIgnore]
public bool ConditionsSpecified { get { return Conditions != null && Conditions.Count > 0; } }
/// <summary>
/// Internal Adjuster model
/// </summary>
[JsonIgnore]
private Models.Internal.Adjuster _adjuster = new();
#endregion
#region Accessors
@@ -75,6 +69,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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;
}
/// <summary>
/// Internal Analog model
/// </summary>
[JsonIgnore]
private Models.Internal.Analog _analog = new();
#endregion
#region Constructors
@@ -37,6 +31,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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;
}
/// <summary>
@@ -87,12 +87,6 @@ namespace SabreTools.DatItems.Formats
[JsonProperty("categories"), XmlElement("categories")]
public string? Categories { get; set; }
/// <summary>
/// Internal Archive model
/// </summary>
[JsonIgnore]
private Models.Internal.Archive _archive = new();
#endregion
#region Accessors
@@ -112,6 +106,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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;
}
/// <summary>
/// Internal Original model
/// </summary>
[JsonIgnore]
private readonly Models.Internal.Original _original = new();
private readonly Models.Internal.Original _internal = new();
}
#endregion

View File

@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
@@ -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; } }
/// <summary>
/// Internal BiosSet model
/// </summary>
[JsonIgnore]
private Models.Internal.BiosSet _biosSet = new();
#endregion
#region Accessors
@@ -70,6 +64,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
@@ -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; } }
/// <summary>
/// Internal Chip model
/// </summary>
[JsonIgnore]
private Models.Internal.Chip _chip = new();
#endregion
#region Accessors
@@ -86,6 +80,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
/// Internal Condition model
/// </summary>
[JsonIgnore]
private Models.Internal.Condition _condition = new();
#endregion
#region Constructors
@@ -73,6 +67,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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;
}
/// <summary>
@@ -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; } }
/// <summary>
/// Internal ConfLocation model
/// </summary>
[JsonIgnore]
private Models.Internal.ConfLocation _confLocation = new();
#endregion
#region Accessors
@@ -73,6 +67,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
@@ -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<Condition>? Conditions
{
get => _confSetting.Read<Condition[]>(Models.Internal.ConfSetting.ConditionKey)?.ToList();
set => _confSetting[Models.Internal.ConfSetting.ConditionKey] = value?.ToArray();
get => _internal.Read<Condition[]>(Models.Internal.ConfSetting.ConditionKey)?.ToList();
set => _internal[Models.Internal.ConfSetting.ConditionKey] = value?.ToArray();
}
[JsonIgnore]
public bool ConditionsSpecified { get { return Conditions != null && Conditions.Count > 0; } }
/// <summary>
/// Internal ConfSetting model
/// </summary>
[JsonIgnore]
private Models.Internal.ConfSetting _confSetting = new();
#endregion
#region Accessors
@@ -85,6 +79,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
@@ -50,8 +50,8 @@ namespace SabreTools.DatItems.Formats
[JsonProperty("conditions", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("conditions")]
public List<Condition>? Conditions
{
get => _configuration.Read<Condition[]>(Models.Internal.Configuration.ConditionKey)?.ToList();
set => _configuration[Models.Internal.Configuration.ConditionKey] = value?.ToArray();
get => _internal.Read<Condition[]>(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<ConfLocation>? Locations
{
get => _configuration.Read<ConfLocation[]>(Models.Internal.Configuration.ConfLocationKey)?.ToList();
set => _configuration[Models.Internal.Configuration.ConfLocationKey] = value?.ToArray();
get => _internal.Read<ConfLocation[]>(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<ConfSetting>? Settings
{
get => _configuration.Read<List<ConfSetting>>(Models.Internal.Configuration.ConfSettingKey);
set => _configuration[Models.Internal.Configuration.ConfSettingKey] = value;
get => _internal.Read<List<ConfSetting>>(Models.Internal.Configuration.ConfSettingKey);
set => _internal[Models.Internal.Configuration.ConfSettingKey] = value;
}
[JsonIgnore]
public bool SettingsSpecified { get { return Settings != null && Settings.Count > 0; } }
/// <summary>
/// Internal Configuration model
/// </summary>
[JsonIgnore]
private Models.Internal.Configuration _configuration = new();
#endregion
#region Accessors
@@ -108,6 +102,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
/// Internal Control model
/// </summary>
[JsonIgnore]
private Models.Internal.Control _control = new();
#endregion
#region Constructors
@@ -177,6 +171,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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;
}
/// <summary>
@@ -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; } }
/// <summary>
/// Internal DataArea model
/// </summary>
[JsonIgnore]
private Models.Internal.DataArea _dataArea = new();
#endregion
#region Accessors
@@ -88,6 +82,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
@@ -80,8 +80,8 @@ namespace SabreTools.DatItems.Formats
[JsonProperty("instances", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("instances")]
public List<Instance>? Instances
{
get => _device.Read<Instance[]>(Models.Internal.Device.InstanceKey)?.ToList();
set => _device[Models.Internal.Device.InstanceKey] = value?.ToArray();
get => _internal.Read<Instance[]>(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<Extension>? Extensions
{
get => _device.Read<Extension[]>(Models.Internal.Device.ExtensionKey)?.ToList();
set => _device[Models.Internal.Device.ExtensionKey] = value?.ToArray();
get => _internal.Read<Extension[]>(Models.Internal.Device.ExtensionKey)?.ToList();
set => _internal[Models.Internal.Device.ExtensionKey] = value?.ToArray();
}
[JsonIgnore]
public bool ExtensionsSpecified { get { return Extensions != null && Extensions.Count > 0; } }
/// <summary>
/// Internal Device model
/// </summary>
[JsonIgnore]
private Models.Internal.Device _device = new();
#endregion
#region Constructors
@@ -115,6 +109,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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;
}
/// <summary>
/// Internal DeviceRef model
/// </summary>
[JsonIgnore]
private Models.Internal.DeviceRef _deviceRef = new();
#endregion
#region Accessors
@@ -47,6 +41,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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;
}
/// <summary>
@@ -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; } }
/// <summary>
/// Internal DipLocation model
/// </summary>
[JsonIgnore]
private Models.Internal.DipLocation _dipLocation = new();
#endregion
#region Accessors
@@ -73,6 +67,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
@@ -52,8 +52,8 @@ namespace SabreTools.DatItems.Formats
[JsonProperty("conditions", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("conditions")]
public List<Condition>? Conditions
{
get => _dipSwitch.Read<Condition[]>(Models.Internal.DipSwitch.ConditionKey)?.ToList();
set => _dipSwitch[Models.Internal.DipSwitch.ConditionKey] = value?.ToArray();
get => _internal.Read<Condition[]>(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<DipLocation>? Locations
{
get => _dipSwitch.Read<DipLocation[]>(Models.Internal.DipSwitch.DipLocationKey)?.ToList();
set => _dipSwitch[Models.Internal.DipSwitch.DipLocationKey] = value?.ToArray();
get => _internal.Read<DipLocation[]>(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<DipValue>? Values
{
get => _dipSwitch.Read<DipValue[]>(Models.Internal.DipSwitch.DipValueKey)?.ToList();
set => _dipSwitch[Models.Internal.DipSwitch.DipValueKey] = value?.ToArray();
get => _internal.Read<DipValue[]>(Models.Internal.DipSwitch.DipValueKey)?.ToList();
set => _internal[Models.Internal.DipSwitch.DipValueKey] = value?.ToArray();
}
[JsonIgnore]
@@ -109,12 +109,6 @@ namespace SabreTools.DatItems.Formats
#endregion
/// <summary>
/// Internal DipSwitch model
/// </summary>
[JsonIgnore]
private Models.Internal.DipSwitch _dipSwitch = new();
#endregion // Fields
#region Accessors
@@ -134,6 +128,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
@@ -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<Condition>? Conditions
{
get => _dipValue.Read<Condition[]>(Models.Internal.DipValue.ConditionKey)?.ToList();
set => _dipValue[Models.Internal.DipValue.ConditionKey] = value?.ToArray();
get => _internal.Read<Condition[]>(Models.Internal.DipValue.ConditionKey)?.ToList();
set => _internal[Models.Internal.DipValue.ConditionKey] = value?.ToArray();
}
[JsonIgnore]
public bool ConditionsSpecified { get { return Conditions != null && Conditions.Count > 0; } }
/// <summary>
/// Internal DipValue model
/// </summary>
[JsonIgnore]
private Models.Internal.DipValue _dipValue = new();
#endregion
#region Accessors
@@ -85,6 +79,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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;
}
/// <summary>
@@ -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);
}
/// <summary>
@@ -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);
}
/// <summary>
@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
@@ -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
/// <summary>
/// Disk area information
/// </summary>
/// <remarks>This is inverted from the internal model</remarks>
/// <remarks>Hack on top of internal model</remarks>
[JsonProperty("diskarea", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("diskarea")]
public DiskArea? DiskArea { get; set; }
public DiskArea? DiskArea
{
get => _internal.Read<DiskArea>("DISKAREA");
set => _internal["DISKAREA"] = value;
}
[JsonIgnore]
public bool DiskAreaSpecified
@@ -141,9 +145,13 @@ namespace SabreTools.DatItems.Formats
/// <summary>
/// Original hardware part associated with the item
/// </summary>
/// <remarks>This is inverted from the internal model</remarks>
/// <remarks>Hack on top of internal model</remarks>
[JsonProperty("part", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("part")]
public Part? Part { get; set; }
public Part? Part
{
get => _internal.Read<Part>("PART");
set => _internal["PART"] = value;
}
[JsonIgnore]
public bool PartSpecified
@@ -158,12 +166,6 @@ namespace SabreTools.DatItems.Formats
#endregion
/// <summary>
/// Internal Disk model
/// </summary>
[JsonIgnore]
private Models.Internal.Disk _disk = new();
#endregion // Fields
#region Accessors
@@ -183,6 +185,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
public Disk()
{
_internal = new Models.Internal.Disk();
Name = string.Empty;
ItemType = ItemType.Disk;
DupeType = 0x00;
@@ -194,6 +197,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <returns></returns>
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
/// <inheritdoc/>
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);
}
/// <summary>
/// Fill any missing size and hash information from another Disk
/// </summary>
/// <param name="other">Disk to fill information from</param>
public void FillMissingInformation(Disk other) => _disk.FillMissingHashes(other?._disk);
public void FillMissingInformation(Disk other) => _internal.FillMissingHashes(other?._internal);
/// <summary>
/// Get unique duplicate suffix on name collision
/// </summary>
/// <returns>String representing the suffix</returns>
public string GetDuplicateSuffix() => _disk.GetDuplicateSuffix();
public string GetDuplicateSuffix() => _internal.GetDuplicateSuffix();
#endregion

View File

@@ -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;
}
/// <summary>
/// Internal DiskArea model
/// </summary>
[JsonIgnore]
private Models.Internal.DiskArea _diskArea = new();
#endregion
#region Accessors
@@ -48,6 +42,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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;
}
/// <summary>
@@ -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; } }
/// <summary>
/// Internal Display model
/// </summary>
[JsonIgnore]
private Models.Internal.Display _display = new();
#endregion
#region Constructors
@@ -209,6 +203,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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; } }
/// <summary>
/// Internal Driver model
/// </summary>
[JsonIgnore]
private Models.Internal.Driver _driver = new();
#endregion
#region Constructors
@@ -140,6 +134,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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;
}
/// <summary>
/// Internal Extension model
/// </summary>
[JsonIgnore]
private Models.Internal.Extension _extension = new();
#endregion
#region Accessors
@@ -47,6 +41,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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; } }
/// <summary>
/// Internal Feature model
/// </summary>
[JsonIgnore]
private Models.Internal.Feature _feature = new();
#endregion
#region Constructors
@@ -71,6 +65,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
/// Internal Info model
/// </summary>
[JsonIgnore]
private Models.Internal.Info _info = new();
#endregion
#region Accessors
@@ -57,6 +51,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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<Control>? Controls
{
get => _input.Read<Control[]>(Models.Internal.Input.ControlKey)?.ToList();
set => _input[Models.Internal.Input.ControlKey] = value?.ToArray();
get => _internal.Read<Control[]>(Models.Internal.Input.ControlKey)?.ToList();
set => _internal[Models.Internal.Input.ControlKey] = value?.ToArray();
}
[JsonIgnore]
public bool ControlsSpecified { get { return Controls != null && Controls.Count > 0; } }
/// <summary>
/// Internal Input model
/// </summary>
[JsonIgnore]
private Models.Internal.Input _input = new();
#endregion
#region Constructors
@@ -94,6 +88,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
/// Internal Instance model
/// </summary>
[JsonIgnore]
private Models.Internal.Instance _instance = new();
#endregion
#region Accessors
@@ -57,6 +51,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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;
}
/// <summary>
@@ -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);
}
/// <summary>
@@ -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);
}
/// <summary>
@@ -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);
}
/// <summary>
@@ -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;
}
/// <summary>
/// Internal Media model
/// </summary>
[JsonIgnore]
private Models.Internal.Media _media = new();
#endregion
#region Accessors
@@ -90,6 +84,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
public Media()
{
_internal = new Models.Internal.Media();
Name = string.Empty;
ItemType = ItemType.Media;
DupeType = 0x00;
@@ -101,6 +96,7 @@ namespace SabreTools.DatItems.Formats
/// <param name="baseFile"></param>
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
/// <returns></returns>
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
/// <inheritdoc/>
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);
}
/// <summary>
/// Fill any missing size and hash information from another Media
/// </summary>
/// <param name="other">Media to fill information from</param>
public void FillMissingInformation(Media other) => _media.FillMissingHashes(other?._media);
public void FillMissingInformation(Media other) => _internal.FillMissingHashes(other?._internal);
/// <summary>
/// Get unique duplicate suffix on name collision
/// </summary>
/// <returns>String representing the suffix</returns>
public string GetDuplicateSuffix() => _media.GetDuplicateSuffix();
public string GetDuplicateSuffix() => _internal.GetDuplicateSuffix();
#endregion

View File

@@ -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<PartFeature>? Features
{
get => _part.Read<PartFeature[]>(Models.Internal.Part.FeatureKey)?.ToList();
set => _part[Models.Internal.Part.FeatureKey] = value?.ToArray();
get => _internal.Read<PartFeature[]>(Models.Internal.Part.FeatureKey)?.ToList();
set => _internal[Models.Internal.Part.FeatureKey] = value?.ToArray();
}
[JsonIgnore]
public bool FeaturesSpecified { get { return Features != null && Features.Count > 0; } }
/// <summary>
/// Internal Part model
/// </summary>
[JsonIgnore]
private Models.Internal.Part _part = new();
#endregion
#region Accessors
@@ -64,6 +58,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
/// Internal Feature model
/// </summary>
[JsonIgnore]
private Models.Internal.Feature _feature = new();
#endregion
#region Accessors
@@ -57,6 +51,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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;
}
/// <summary>
@@ -30,19 +30,13 @@ namespace SabreTools.DatItems.Formats
[JsonProperty("analogs", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("analogs")]
public List<Analog>? Analogs
{
get => _port.Read<Analog[]>(Models.Internal.Port.AnalogKey)?.ToList();
set => _port[Models.Internal.Port.AnalogKey] = value?.ToArray();
get => _internal.Read<Analog[]>(Models.Internal.Port.AnalogKey)?.ToList();
set => _internal[Models.Internal.Port.AnalogKey] = value?.ToArray();
}
[JsonIgnore]
public bool AnalogsSpecified { get { return Analogs != null && Analogs.Count > 0; } }
/// <summary>
/// Internal Port model
/// </summary>
[JsonIgnore]
private Models.Internal.Port _port = new();
#endregion
#region Constructors
@@ -52,6 +46,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
/// Internal RamOption model
/// </summary>
[JsonIgnore]
private Models.Internal.RamOption _ramOption = new();
#endregion
#region Accessors
@@ -70,6 +64,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
@@ -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; } }
/// <summary>
/// Internal Release model
/// </summary>
[JsonIgnore]
private Models.Internal.Release _release = new();
#endregion
#region Accessors
@@ -90,6 +84,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
@@ -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);
}
/// <summary>
@@ -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);
}
/// <summary>
@@ -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);
}
/// <summary>
@@ -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);
}
/// <summary>
@@ -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);
}
/// <summary>
@@ -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);
}
/// <summary>
@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
@@ -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
/// <summary>
/// Alternate name for the item
/// </summary>
[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;
}
/// <summary>
@@ -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
/// <summary>
/// OpenMSX sub item type
/// </summary>
/// <remarks>This is inverted from the internal model</remarks>
/// <remarks>Hack on top of internal model</remarks>
[JsonProperty("original", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("original")]
public Original? Original { get; set; }
public Original? Original
{
get => _internal.Read<Original>("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;
}
/// <summary>
@@ -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;
}
/// <summary>
@@ -353,7 +357,11 @@ namespace SabreTools.DatItems.Formats
/// </summary>
/// 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
/// <summary>
/// Data area information
/// </summary>
/// <remarks>This is inverted from the internal model</remarks>
/// <remarks>Hack on top of internal model</remarks>
[JsonProperty("dataarea", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("dataarea")]
public DataArea? DataArea { get; set; } = null;
public DataArea? DataArea
{
get => _internal.Read<DataArea>("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
/// <summary>
/// Original hardware part associated with the item
/// </summary>
/// <remarks>This is inverted from the internal model</remarks>
/// <remarks>Hack on top of internal model</remarks>
[JsonProperty("part", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("part")]
public Part? Part { get; set; } = null;
public Part? Part
{
get => _internal.Read<Part>("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
/// <summary>
/// Internal Rom model
/// </summary>
[JsonIgnore]
private Models.Internal.Rom _rom = new();
#endregion // Fields
#region Accessors
@@ -448,6 +458,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
public Rom()
{
_internal = new Models.Internal.Rom();
Name = null;
ItemType = ItemType.Rom;
DupeType = 0x00;
@@ -462,6 +473,7 @@ namespace SabreTools.DatItems.Formats
/// <param name="omitFromScan"></param>
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
/// <param name="baseFile"></param>
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
/// </summary>
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
/// <inheritdoc/>
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);
}
/// <summary>
/// Fill any missing size and hash information from another Rom
/// </summary>
/// <param name="other">Rom to fill information from</param>
public void FillMissingInformation(Rom other) => _rom.FillMissingHashes(other?._rom);
public void FillMissingInformation(Rom other) => _internal.FillMissingHashes(other?._internal);
/// <summary>
/// Get unique duplicate suffix on name collision
/// </summary>
/// <returns>String representing the suffix</returns>
public string GetDuplicateSuffix() => _rom.GetDuplicateSuffix();
public string GetDuplicateSuffix() => _internal.GetDuplicateSuffix();
/// <summary>
/// Returns if the Rom contains any hashes
/// </summary>
/// <returns>True if any hash exists, false otherwise</returns>
public bool HasHashes() => _rom.HasHashes();
public bool HasHashes() => _internal.HasHashes();
/// <summary>
/// Returns if all of the hashes are set to their 0-byte values
/// </summary>
/// <returns>True if any hash matches the 0-byte value, false otherwise</returns>
public bool HasZeroHash() => _rom.HasZeroHash();
public bool HasZeroHash() => _internal.HasZeroHash();
#endregion

View File

@@ -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;
}
/// <summary>
/// Internal Sample model
/// </summary>
[JsonIgnore]
private Models.Internal.Sample _sample = new();
#endregion
#region Accessors
@@ -47,6 +41,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
/// Internal SharedFeat model
/// </summary>
[JsonIgnore]
private Models.Internal.SharedFeat _sharedFeat = new();
#endregion
#region Accessors
@@ -57,6 +51,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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;
}
/// <summary>
@@ -30,19 +30,13 @@ namespace SabreTools.DatItems.Formats
[JsonProperty("slotoptions", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("slotoptions")]
public List<SlotOption>? SlotOptions
{
get => _slot.Read<SlotOption[]>(Models.Internal.Slot.SlotOptionKey)?.ToList();
set => _slot[Models.Internal.Slot.SlotOptionKey] = value?.ToArray();
get => _internal.Read<SlotOption[]>(Models.Internal.Slot.SlotOptionKey)?.ToList();
set => _internal[Models.Internal.Slot.SlotOptionKey] = value?.ToArray();
}
[JsonIgnore]
public bool SlotOptionsSpecified { get { return SlotOptions != null && SlotOptions.Count > 0; } }
/// <summary>
/// Internal Slot model
/// </summary>
[JsonIgnore]
private Models.Internal.Slot _slot = new();
#endregion
#region Accessors
@@ -62,6 +56,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
@@ -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; } }
/// <summary>
/// Internal SlotOption model
/// </summary>
[JsonIgnore]
private Models.Internal.SlotOption _slotOption = new();
#endregion
#region Accessors
@@ -70,6 +64,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}

View File

@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
@@ -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;
}
/// <summary>
/// Internal SoftwareList model
/// </summary>
[JsonIgnore]
private Models.Internal.SoftwareList _softwareList = new();
#endregion
#region Accessors
@@ -90,6 +84,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
}
}

View File

@@ -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; } }
/// <summary>
/// Internal Sound model
/// </summary>
[JsonIgnore]
private Models.Internal.Sound _sound = new();
#endregion
#region Constructors
@@ -40,6 +34,7 @@ namespace SabreTools.DatItems.Formats
/// </summary>
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
/// <inheritdoc/>
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
}
}