mirror of
https://github.com/SabreTools/SabreTools.Serialization.git
synced 2026-07-08 18:06:41 +00:00
Flatten Analog out of existence
This commit is contained in:
@@ -2738,7 +2738,6 @@ namespace SabreTools.Data.Extensions.Test
|
||||
[Theory]
|
||||
[InlineData(null, ItemType.NULL)]
|
||||
[InlineData("adjuster", ItemType.Adjuster)]
|
||||
[InlineData("analog", ItemType.Analog)]
|
||||
[InlineData("archive", ItemType.Archive)]
|
||||
[InlineData("biosset", ItemType.BiosSet)]
|
||||
[InlineData("blank", ItemType.Blank)]
|
||||
@@ -3138,7 +3137,6 @@ namespace SabreTools.Data.Extensions.Test
|
||||
[Theory]
|
||||
[InlineData(ItemType.NULL, null)]
|
||||
[InlineData(ItemType.Adjuster, "adjuster")]
|
||||
[InlineData(ItemType.Analog, "analog")]
|
||||
[InlineData(ItemType.Archive, "archive")]
|
||||
[InlineData(ItemType.BiosSet, "biosset")]
|
||||
[InlineData(ItemType.Blank, "blank")]
|
||||
|
||||
@@ -905,7 +905,6 @@ namespace SabreTools.Data.Extensions
|
||||
|
||||
// "Auxiliary" item types
|
||||
"adjuster" => ItemType.Adjuster,
|
||||
"analog" => ItemType.Analog,
|
||||
"archive" => ItemType.Archive,
|
||||
"biosset" => ItemType.BiosSet,
|
||||
"chip" => ItemType.Chip,
|
||||
@@ -1386,7 +1385,6 @@ namespace SabreTools.Data.Extensions
|
||||
|
||||
// "Auxiliary" item types
|
||||
ItemType.Adjuster => "adjuster",
|
||||
ItemType.Analog => "analog",
|
||||
ItemType.Archive => "archive",
|
||||
ItemType.BiosSet => "biosset",
|
||||
ItemType.Chip => "chip",
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
using System;
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace SabreTools.Data.Models.Metadata
|
||||
{
|
||||
[JsonObject("analog"), XmlRoot("analog")]
|
||||
public class Analog : DatItem, ICloneable, IEquatable<Analog>
|
||||
{
|
||||
#region Properties
|
||||
|
||||
public string? Mask { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
public Analog() => ItemType = ItemType.Analog;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public object Clone()
|
||||
{
|
||||
var obj = new Analog();
|
||||
|
||||
obj.Mask = Mask;
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public bool Equals(Analog? other)
|
||||
{
|
||||
// Null never matches
|
||||
if (other is null)
|
||||
return false;
|
||||
|
||||
// Properties
|
||||
if ((Mask is null) ^ (other.Mask is null))
|
||||
return false;
|
||||
else if (Mask is not null && !Mask.Equals(other.Mask, StringComparison.OrdinalIgnoreCase))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -272,7 +272,6 @@ namespace SabreTools.Data.Models.Metadata
|
||||
NULL = 0,
|
||||
|
||||
Adjuster,
|
||||
Analog,
|
||||
Archive,
|
||||
BiosSet,
|
||||
Chip,
|
||||
|
||||
@@ -9,7 +9,7 @@ namespace SabreTools.Data.Models.Metadata
|
||||
{
|
||||
#region Properties
|
||||
|
||||
public Analog[]? Analog { get; set; }
|
||||
public string[]? AnalogMask { get; set; }
|
||||
|
||||
public string? Tag { get; set; }
|
||||
|
||||
@@ -22,8 +22,8 @@ namespace SabreTools.Data.Models.Metadata
|
||||
{
|
||||
var obj = new Port();
|
||||
|
||||
if (Analog is not null)
|
||||
obj.Analog = Array.ConvertAll(Analog, i => (Analog)i.Clone());
|
||||
if (AnalogMask is not null)
|
||||
obj.AnalogMask = Array.ConvertAll(AnalogMask, i => i);
|
||||
obj.Tag = Tag;
|
||||
|
||||
return obj;
|
||||
|
||||
@@ -355,14 +355,6 @@ namespace SabreTools.Metadata.DatFiles.Test
|
||||
};
|
||||
}
|
||||
|
||||
private static Data.Models.Metadata.Analog CreateMetadataAnalog()
|
||||
{
|
||||
return new Data.Models.Metadata.Analog
|
||||
{
|
||||
Mask = "mask",
|
||||
};
|
||||
}
|
||||
|
||||
private static Data.Models.Metadata.Archive CreateMetadataArchive()
|
||||
{
|
||||
return new Data.Models.Metadata.Archive
|
||||
@@ -717,7 +709,7 @@ namespace SabreTools.Metadata.DatFiles.Test
|
||||
{
|
||||
return new Data.Models.Metadata.Port
|
||||
{
|
||||
Analog = [CreateMetadataAnalog()],
|
||||
AnalogMask = ["mask"],
|
||||
Tag = "tag",
|
||||
};
|
||||
}
|
||||
@@ -1128,12 +1120,6 @@ namespace SabreTools.Metadata.DatFiles.Test
|
||||
Assert.Equal("name", adjuster.Name);
|
||||
}
|
||||
|
||||
private static void ValidateAnalog(Analog? analog)
|
||||
{
|
||||
Assert.NotNull(analog);
|
||||
Assert.Equal("mask", analog.Mask);
|
||||
}
|
||||
|
||||
private static void ValidateArchive(Archive? archive)
|
||||
{
|
||||
Assert.NotNull(archive);
|
||||
@@ -1424,10 +1410,10 @@ namespace SabreTools.Metadata.DatFiles.Test
|
||||
Assert.NotNull(port);
|
||||
Assert.Equal("tag", port.Tag);
|
||||
|
||||
Analog[]? dipValues = port.Analog;
|
||||
Assert.NotNull(dipValues);
|
||||
Analog? dipValue = Assert.Single(dipValues);
|
||||
ValidateAnalog(dipValue);
|
||||
string[]? analogMasks = port.AnalogMask;
|
||||
Assert.NotNull(analogMasks);
|
||||
string? analogMask = Assert.Single(analogMasks);
|
||||
Assert.Equal("mask", analogMask);
|
||||
}
|
||||
|
||||
private static void ValidateRamOption(RamOption? ramOption)
|
||||
|
||||
@@ -620,12 +620,6 @@ namespace SabreTools.Metadata.DatFiles.Test
|
||||
Assert.Equal("name", adjuster.Name);
|
||||
}
|
||||
|
||||
private static void ValidateMetadataAnalog(Data.Models.Metadata.Analog? analog)
|
||||
{
|
||||
Assert.NotNull(analog);
|
||||
Assert.Equal("mask", analog.Mask);
|
||||
}
|
||||
|
||||
private static void ValidateMetadataArchive(Data.Models.Metadata.Archive? archive)
|
||||
{
|
||||
Assert.NotNull(archive);
|
||||
@@ -965,10 +959,10 @@ namespace SabreTools.Metadata.DatFiles.Test
|
||||
Assert.NotNull(port);
|
||||
Assert.Equal("tag", port.Tag);
|
||||
|
||||
Data.Models.Metadata.Analog[]? dipValues = port.Analog;
|
||||
Assert.NotNull(dipValues);
|
||||
Data.Models.Metadata.Analog? dipValue = Assert.Single(dipValues);
|
||||
ValidateMetadataAnalog(dipValue);
|
||||
string[]? analogMasks = port.AnalogMask;
|
||||
Assert.NotNull(analogMasks);
|
||||
string? analogMask = Assert.Single(analogMasks);
|
||||
Assert.Equal("mask", analogMask);
|
||||
}
|
||||
|
||||
private static void ValidateMetadataRamOption(Data.Models.Metadata.RamOption? ramOption)
|
||||
|
||||
@@ -258,9 +258,6 @@ namespace SabreTools.Metadata.DatFiles.Formats
|
||||
case Data.Models.Metadata.ItemType.Adjuster:
|
||||
datItem = datItemObj.ToObject<Adjuster>();
|
||||
break;
|
||||
case Data.Models.Metadata.ItemType.Analog:
|
||||
datItem = datItemObj.ToObject<Analog>();
|
||||
break;
|
||||
case Data.Models.Metadata.ItemType.Archive:
|
||||
datItem = datItemObj.ToObject<Archive>();
|
||||
break;
|
||||
|
||||
@@ -12,7 +12,6 @@ namespace SabreTools.Metadata.DatItems
|
||||
/// </summary>
|
||||
[JsonObject("datitem"), XmlRoot("datitem")]
|
||||
[XmlInclude(typeof(Adjuster))]
|
||||
[XmlInclude(typeof(Analog))]
|
||||
[XmlInclude(typeof(Archive))]
|
||||
[XmlInclude(typeof(BiosSet))]
|
||||
[XmlInclude(typeof(Blank))]
|
||||
|
||||
@@ -1,80 +0,0 @@
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace SabreTools.Metadata.DatItems.Formats
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a single analog item
|
||||
/// </summary>
|
||||
[JsonObject("analog"), XmlRoot("analog")]
|
||||
public sealed class Analog : DatItem<Data.Models.Metadata.Analog>
|
||||
{
|
||||
#region Properties
|
||||
|
||||
/// <inheritdoc>/>
|
||||
public override Data.Models.Metadata.ItemType ItemType
|
||||
=> Data.Models.Metadata.ItemType.Analog;
|
||||
|
||||
public string? Mask
|
||||
{
|
||||
get => _internal.Mask;
|
||||
set => _internal.Mask = value;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructors
|
||||
|
||||
public Analog() : base() { }
|
||||
|
||||
public Analog(Data.Models.Metadata.Analog item) : base(item) { }
|
||||
|
||||
public Analog(Data.Models.Metadata.Analog item, Machine machine, Source source) : this(item)
|
||||
{
|
||||
Source = source;
|
||||
CopyMachineInformation(machine);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Accessors
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override string? GetName() => null;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override void SetName(string? name) { }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new Analog(GetInternalClone());
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override Data.Models.Metadata.Analog GetInternalClone()
|
||||
=> _internal.Clone() as Data.Models.Metadata.Analog ?? new();
|
||||
|
||||
#endregion
|
||||
|
||||
#region Comparision Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override bool Equals(DatItem? other)
|
||||
{
|
||||
// If the other item is null
|
||||
if (other is null)
|
||||
return false;
|
||||
|
||||
// If the type matches
|
||||
if (other is Analog otherAnalog)
|
||||
return _internal.Equals(otherAnalog._internal);
|
||||
|
||||
// Everything else fails
|
||||
return false;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,5 @@
|
||||
using System;
|
||||
using System.Xml.Serialization;
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
using SabreTools.Metadata.Filter;
|
||||
|
||||
namespace SabreTools.Metadata.DatItems.Formats
|
||||
{
|
||||
@@ -13,10 +11,11 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
{
|
||||
#region Properties
|
||||
|
||||
public Analog[]? Analog { get; set; }
|
||||
|
||||
[JsonIgnore]
|
||||
public bool AnalogSpecified => Analog is not null && Analog.Length > 0;
|
||||
public string[]? AnalogMask
|
||||
{
|
||||
get => _internal.AnalogMask;
|
||||
set => _internal.AnalogMask = value;
|
||||
}
|
||||
|
||||
/// <inheritdoc>/>
|
||||
public override Data.Models.Metadata.ItemType ItemType
|
||||
@@ -34,12 +33,7 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
|
||||
public Port() : base() { }
|
||||
|
||||
public Port(Data.Models.Metadata.Port item) : base(item)
|
||||
{
|
||||
// Handle subitems
|
||||
if (item.Analog is not null)
|
||||
Analog = Array.ConvertAll(item.Analog, analog => new Analog(analog)); ;
|
||||
}
|
||||
public Port(Data.Models.Metadata.Port item) : base(item) { }
|
||||
|
||||
public Port(Data.Models.Metadata.Port item, Machine machine, Source source) : this(item)
|
||||
{
|
||||
@@ -66,14 +60,7 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override Data.Models.Metadata.Port GetInternalClone()
|
||||
{
|
||||
var portItem = _internal.Clone() as Data.Models.Metadata.Port ?? new();
|
||||
|
||||
if (Analog is not null)
|
||||
portItem.Analog = Array.ConvertAll(Analog, analog => analog.GetInternalClone());
|
||||
|
||||
return portItem;
|
||||
}
|
||||
=> _internal.Clone() as Data.Models.Metadata.Port ?? new();
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -95,28 +82,5 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Manipulation
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override bool PassesFilter(FilterRunner filterRunner)
|
||||
{
|
||||
if (Machine is not null && !Machine.PassesFilter(filterRunner))
|
||||
return false;
|
||||
|
||||
// TODO: Analog
|
||||
|
||||
return filterRunner.Run(_internal);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override bool PassesFilterDB(FilterRunner filterRunner)
|
||||
{
|
||||
// TODO: Analog
|
||||
|
||||
return filterRunner.Run(_internal);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -502,24 +502,6 @@ namespace SabreTools.Metadata.Filter.Test
|
||||
|
||||
#endregion
|
||||
|
||||
#region Analog
|
||||
|
||||
[Theory]
|
||||
[InlineData("analog.mask", "mask")]
|
||||
public void Matches_Analog(string itemField, string value)
|
||||
{
|
||||
var filter = new FilterObject(itemField, value, Operation.Equals);
|
||||
Analog obj = new Analog
|
||||
{
|
||||
Mask = "mask",
|
||||
};
|
||||
|
||||
bool actual = filter.Matches(obj);
|
||||
Assert.True(actual);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Archive
|
||||
|
||||
[Theory]
|
||||
@@ -1462,12 +1444,14 @@ namespace SabreTools.Metadata.Filter.Test
|
||||
#region Port
|
||||
|
||||
[Theory]
|
||||
// [InlineData("port.analog.mask", "mask")] // TODO: Figure out how to deal with string arrays
|
||||
[InlineData("port.tag", "tag")]
|
||||
public void Matches_Port(string itemField, string value)
|
||||
{
|
||||
var filter = new FilterObject(itemField, value, Operation.Equals);
|
||||
Port obj = new Port
|
||||
{
|
||||
AnalogMask = ["mask"],
|
||||
Tag = "tag",
|
||||
};
|
||||
|
||||
|
||||
@@ -48,14 +48,6 @@ namespace SabreTools.Metadata.Filter
|
||||
"name"
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// Known keys for Analog
|
||||
/// </summary>
|
||||
private static readonly string[] _analogKeys =
|
||||
[
|
||||
"mask"
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// Known keys for Archive
|
||||
/// </summary>
|
||||
@@ -509,6 +501,7 @@ namespace SabreTools.Metadata.Filter
|
||||
/// </summary>
|
||||
private static readonly string[] _portKeys =
|
||||
[
|
||||
"analog.mask",
|
||||
"tag",
|
||||
];
|
||||
|
||||
@@ -1006,7 +999,6 @@ namespace SabreTools.Metadata.Filter
|
||||
string[]? properties = itemName.ToLowerInvariant() switch
|
||||
{
|
||||
"adjuster" => _adjusterKeys,
|
||||
"analog" => _analogKeys,
|
||||
"archive" => _archiveKeys,
|
||||
"biosset" => _biossetKeys,
|
||||
"chip" => _chipKeys,
|
||||
|
||||
@@ -379,7 +379,6 @@ namespace SabreTools.Metadata.Filter
|
||||
switch (obj)
|
||||
{
|
||||
case Adjuster item: return GetCheckValue(item, fieldName, out checkValue);
|
||||
case Analog item: return GetCheckValue(item, fieldName, out checkValue);
|
||||
case Archive item: return GetCheckValue(item, fieldName, out checkValue);
|
||||
case BiosSet item: return GetCheckValue(item, fieldName, out checkValue);
|
||||
case Chip item: return GetCheckValue(item, fieldName, out checkValue);
|
||||
@@ -531,24 +530,6 @@ namespace SabreTools.Metadata.Filter
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the check value for a field
|
||||
/// </summary>
|
||||
private static bool GetCheckValue(Analog obj, string fieldName, out string? checkValue)
|
||||
{
|
||||
switch (fieldName)
|
||||
{
|
||||
case "mask":
|
||||
checkValue = obj.Mask;
|
||||
return true;
|
||||
|
||||
// If the key doesn't exist, we count it as null
|
||||
default:
|
||||
checkValue = null;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the check value for a field
|
||||
/// </summary>
|
||||
@@ -1739,6 +1720,10 @@ namespace SabreTools.Metadata.Filter
|
||||
{
|
||||
switch (fieldName)
|
||||
{
|
||||
// TODO: Figure out how to deal with string arrays
|
||||
// case "analog.mask":
|
||||
// checkValue = obj.AnalogMask;
|
||||
// return true;
|
||||
case "tag":
|
||||
checkValue = obj.Tag;
|
||||
return true;
|
||||
|
||||
@@ -169,18 +169,6 @@ namespace SabreTools.Serialization.CrossModel
|
||||
return adjuster;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <see cref="Models.Metadata.Analog"/> to <see cref="Analog"/>
|
||||
/// </summary>
|
||||
private static Analog ConvertFromInternalModel(Data.Models.Metadata.Analog item)
|
||||
{
|
||||
var analog = new Analog
|
||||
{
|
||||
Mask = item.Mask,
|
||||
};
|
||||
return analog;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <see cref="Models.Metadata.BiosSet"/> to <see cref="BiosSet"/>
|
||||
/// </summary>
|
||||
@@ -550,9 +538,9 @@ namespace SabreTools.Serialization.CrossModel
|
||||
Tag = item.Tag,
|
||||
};
|
||||
|
||||
var analogs = item.Analog;
|
||||
if (analogs is not null && analogs.Length > 0)
|
||||
port.Analog = Array.ConvertAll(analogs, ConvertFromInternalModel);
|
||||
var analogMasks = item.AnalogMask;
|
||||
if (analogMasks is not null && analogMasks.Length > 0)
|
||||
port.Analog = Array.ConvertAll(analogMasks, analogMask => new Analog { Mask = analogMask });
|
||||
|
||||
return port;
|
||||
}
|
||||
|
||||
@@ -139,18 +139,6 @@ namespace SabreTools.Serialization.CrossModel
|
||||
return adjuster;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <see cref="Analog"/> to <see cref="Models.Metadata.Analog"/>
|
||||
/// </summary>
|
||||
private static Data.Models.Metadata.Analog ConvertToInternalModel(Analog item)
|
||||
{
|
||||
var analog = new Data.Models.Metadata.Analog
|
||||
{
|
||||
Mask = item.Mask,
|
||||
};
|
||||
return analog;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert from <see cref="BiosSet"/> to <see cref="Models.Metadata.BiosSet"/>
|
||||
/// </summary>
|
||||
@@ -467,7 +455,7 @@ namespace SabreTools.Serialization.CrossModel
|
||||
};
|
||||
|
||||
if (item.Analog is not null && item.Analog.Length > 0)
|
||||
port.Analog = Array.ConvertAll(item.Analog, ConvertToInternalModel);
|
||||
port.AnalogMask = Array.ConvertAll(item.Analog, analog => analog.Mask ?? string.Empty);
|
||||
|
||||
return port;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user