Convert Chip fully over to properties

This commit is contained in:
Matt Nadareski
2026-04-03 10:26:20 -04:00
parent cdb74a9e26
commit dc773dba5e
29 changed files with 120 additions and 59 deletions

View File

@@ -167,6 +167,8 @@ namespace SabreTools.Data.Extensions
else if (self is Chip selfChip && clone is Chip cloneChip)
{
cloneChip.ChipType = selfChip.ChipType;
cloneChip.Clock = selfChip.Clock;
cloneChip.Flags = selfChip.Flags;
cloneChip.SoundOnly = selfChip.SoundOnly;
cloneChip.Tag = selfChip.Tag;
}

View File

@@ -17,7 +17,7 @@ namespace SabreTools.Data.Models.ClrMamePro
/// <remarks>flags</remarks>
public string? Flags { get; set; }
/// <remarks>clock, Numeric?</remarks>
public string? Clock { get; set; }
/// <remarks>clock</remarks>
public long? Clock { get; set; }
}
}

View File

@@ -24,6 +24,6 @@ namespace SabreTools.Data.Models.Listxml
public bool? SoundOnly { get; set; }
[XmlAttribute("clock")]
public string? Clock { get; set; }
public long? Clock { get; set; }
}
}

View File

@@ -1,16 +1,21 @@
using System;
using System.Xml.Serialization;
using Newtonsoft.Json;
namespace SabreTools.Data.Models.Metadata
{
[JsonObject("chip"), XmlRoot("chip")]
public class Chip : DatItem
public class Chip : DatItem, ICloneable, IEquatable<Chip>
{
#region Properties
/// <remarks>(cpu|audio)</remarks>
public ChipType? ChipType { get; set; }
public long? Clock { get; set; }
public string? Flags { get; set; }
public string? Name { get; set; }
/// <remarks>(yes|no) "no"</remarks>
@@ -20,16 +25,56 @@ namespace SabreTools.Data.Models.Metadata
#endregion
#region Keys
/// <remarks>long</remarks>
public const string ClockKey = "clock";
/// <remarks>string</remarks>
public const string FlagsKey = "flags";
#endregion
public Chip() => ItemType = ItemType.Chip;
/// <inheritdoc/>
public object Clone()
{
var obj = new Chip();
obj.ChipType = ChipType;
obj.Clock = Clock;
obj.Flags = Flags;
obj.Name = Name;
obj.SoundOnly = SoundOnly;
obj.Tag = Tag;
return obj;
}
/// <inheritdoc/>
public bool Equals(Chip? other)
{
// Null never matches
if (other is null)
return false;
// Properties
if (ChipType != other.ChipType)
return false;
if (Clock != other.Clock)
return false;
if ((Flags is null) ^ (other.Flags is null))
return false;
else if (Flags is not null && !Flags.Equals(other.Flags, StringComparison.OrdinalIgnoreCase))
return false;
if ((Name is null) ^ (other.Name is null))
return false;
else if (Name is not null && !Name.Equals(other.Name, StringComparison.OrdinalIgnoreCase))
return false;
if (SoundOnly != other.SoundOnly)
return false;
if ((Tag is null) ^ (other.Tag is null))
return false;
else if (Tag is not null && !Tag.Equals(other.Tag, StringComparison.OrdinalIgnoreCase))
return false;
return true;
}
}
}

View File

@@ -404,8 +404,8 @@ namespace SabreTools.Metadata.DatFiles.Test
{
return new Data.Models.Metadata.Chip
{
[Data.Models.Metadata.Chip.ClockKey] = 12345L,
[Data.Models.Metadata.Chip.FlagsKey] = "flags",
Clock = 12345L,
Flags = "flags",
Name = "name",
SoundOnly = true,
Tag = "tag",
@@ -1174,8 +1174,8 @@ namespace SabreTools.Metadata.DatFiles.Test
private static void ValidateChip(Chip? chip)
{
Assert.NotNull(chip);
Assert.Equal(12345L, chip.ReadLong(Data.Models.Metadata.Chip.ClockKey));
Assert.Equal("flags", chip.ReadString(Data.Models.Metadata.Chip.FlagsKey));
Assert.Equal(12345L, chip.Clock);
Assert.Equal("flags", chip.Flags);
Assert.Equal("name", chip.Name);
Assert.True(chip.SoundOnly);
Assert.Equal("tag", chip.Tag);

View File

@@ -681,8 +681,8 @@ namespace SabreTools.Metadata.DatFiles.Test
private static void ValidateMetadataChip(Data.Models.Metadata.Chip? chip)
{
Assert.NotNull(chip);
Assert.Equal(12345, chip.ReadLong(Data.Models.Metadata.Chip.ClockKey));
Assert.Equal("flags", chip.ReadString(Data.Models.Metadata.Chip.FlagsKey));
Assert.Equal(12345, chip.Clock);
Assert.Equal("flags", chip.Flags);
Assert.Equal("name", chip.Name);
Assert.True(chip.SoundOnly);
Assert.Equal("tag", chip.Tag);

View File

@@ -22,6 +22,18 @@ namespace SabreTools.Metadata.DatItems.Formats
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.Chip;
public long? Clock
{
get => (_internal as Data.Models.Metadata.Chip)?.Clock;
set => (_internal as Data.Models.Metadata.Chip)?.Clock = value;
}
public string? Flags
{
get => (_internal as Data.Models.Metadata.Chip)?.Flags;
set => (_internal as Data.Models.Metadata.Chip)?.Flags = value;
}
public string? Name
{
get => (_internal as Data.Models.Metadata.Chip)?.Name;

View File

@@ -370,6 +370,12 @@ namespace SabreTools.Metadata.Filter
case Chip item when fieldName == "type":
checkValue = item.ChipType?.AsStringValue();
return true;
case Chip item when fieldName == "clock":
checkValue = item.Clock?.ToString();
return true;
case Chip item when fieldName == "flags":
checkValue = item.Flags;
return true;
case Chip item when fieldName == "soundonly":
checkValue = item.SoundOnly.FromYesNo();
return true;

View File

@@ -84,11 +84,7 @@ namespace SabreTools.Metadata
}
else if (self is Chip selfChip && other is Chip otherChip)
{
if (selfChip.ChipType != otherChip.ChipType)
return false;
if (selfChip.SoundOnly != otherChip.SoundOnly)
return false;
if (selfChip.Tag != otherChip.Tag)
if (!selfChip.Equals(otherChip))
return false;
}
else if (self is Condition selfCondition && other is Condition otherCondition)

View File

@@ -158,8 +158,8 @@ namespace SabreTools.Serialization.CrossModel.Test
{
Type = Data.Models.Metadata.ChipType.CPU,
Name = "name",
Flags = "XXXXXX",
Clock = "XXXXXX",
Flags = "flags",
Clock = 12345,
};
var video = new Data.Models.ClrMamePro.Video
@@ -441,8 +441,8 @@ namespace SabreTools.Serialization.CrossModel.Test
Assert.NotNull(chip);
Assert.Equal(Data.Models.Metadata.ChipType.CPU, chip.Type);
Assert.Equal("name", chip.Name);
Assert.Equal("XXXXXX", chip.Flags);
Assert.Equal("XXXXXX", chip.Clock);
Assert.Equal("flags", chip.Flags);
Assert.Equal(12345, chip.Clock);
}
/// <summary>

View File

@@ -115,7 +115,7 @@ namespace SabreTools.Serialization.CrossModel.Test
Tag = "tag",
Type = Data.Models.Metadata.ChipType.CPU,
SoundOnly = true,
Clock = "XXXXXX",
Clock = 12345,
};
var display = new Data.Models.Listxml.Display
@@ -543,7 +543,7 @@ namespace SabreTools.Serialization.CrossModel.Test
Assert.Equal("tag", chip.Tag);
Assert.Equal(Data.Models.Metadata.ChipType.CPU, chip.Type);
Assert.Equal(true, chip.SoundOnly);
Assert.Equal("XXXXXX", chip.Clock);
Assert.Equal(12345, chip.Clock);
}
/// <summary>

View File

@@ -111,7 +111,7 @@ namespace SabreTools.Serialization.CrossModel.Test
Tag = "tag",
Type = Data.Models.Metadata.ChipType.CPU,
SoundOnly = true,
Clock = "XXXXXX",
Clock = 12345,
};
var display = new Data.Models.Listxml.Display
@@ -537,7 +537,7 @@ namespace SabreTools.Serialization.CrossModel.Test
Assert.Equal("tag", chip.Tag);
Assert.Equal(Data.Models.Metadata.ChipType.CPU, chip.Type);
Assert.Equal(true, chip.SoundOnly);
Assert.Equal("XXXXXX", chip.Clock);
Assert.Equal(12345, chip.Clock);
}
/// <summary>

View File

@@ -111,7 +111,7 @@ namespace SabreTools.Serialization.CrossModel.Test
Tag = "tag",
Type = Data.Models.Metadata.ChipType.CPU,
SoundOnly = true,
Clock = "XXXXXX",
Clock = 12345,
};
var display = new Data.Models.Listxml.Display
@@ -537,7 +537,7 @@ namespace SabreTools.Serialization.CrossModel.Test
Assert.Equal("tag", chip.Tag);
Assert.Equal(Data.Models.Metadata.ChipType.CPU, chip.Type);
Assert.Equal(true, chip.SoundOnly);
Assert.Equal("XXXXXX", chip.Clock);
Assert.Equal(12345, chip.Clock);
}
/// <summary>

View File

@@ -169,8 +169,8 @@ namespace SabreTools.Serialization.CrossModel
{
Type = item.ChipType,
Name = item.Name,
Flags = item.ReadString(Data.Models.Metadata.Chip.FlagsKey),
Clock = item.ReadString(Data.Models.Metadata.Chip.ClockKey),
Flags = item.Flags,
Clock = item.Clock,
};
return chip;
}

View File

@@ -182,8 +182,8 @@ namespace SabreTools.Serialization.CrossModel
{
ChipType = item.Type,
Name = item.Name,
[Data.Models.Metadata.Chip.FlagsKey] = item.Flags,
[Data.Models.Metadata.Chip.ClockKey] = item.Clock,
Flags = item.Flags,
Clock = item.Clock,
};
return chip;
}

View File

@@ -196,7 +196,7 @@ namespace SabreTools.Serialization.CrossModel
Tag = item.Tag,
Type = item.ChipType,
SoundOnly = item.SoundOnly,
Clock = item.ReadString(Data.Models.Metadata.Chip.ClockKey),
Clock = item.Clock,
};
return chip;
}

View File

@@ -229,7 +229,7 @@ namespace SabreTools.Serialization.CrossModel
Tag = item.Tag,
ChipType = item.Type,
SoundOnly = item.SoundOnly,
[Data.Models.Metadata.Chip.ClockKey] = item.Clock,
Clock = item.Clock,
};
return chip;
}

View File

@@ -275,8 +275,8 @@ namespace SabreTools.Serialization.Readers.Test
{
Type = Data.Models.Metadata.ChipType.CPU,
Name = "name",
Flags = "XXXXXX",
Clock = "XXXXXX",
Flags = "flags",
Clock = 12345,
};
var video = new Data.Models.ClrMamePro.Video
@@ -558,8 +558,8 @@ namespace SabreTools.Serialization.Readers.Test
Assert.NotNull(chip);
Assert.Equal(Data.Models.Metadata.ChipType.CPU, chip.Type);
Assert.Equal("name", chip.Name);
Assert.Equal("XXXXXX", chip.Flags);
Assert.Equal("XXXXXX", chip.Clock);
Assert.Equal("flags", chip.Flags);
Assert.Equal(12345, chip.Clock);
}
/// <summary>

View File

@@ -182,7 +182,7 @@ namespace SabreTools.Serialization.Readers.Test
Tag = "tag",
Type = Data.Models.Metadata.ChipType.CPU,
SoundOnly = true,
Clock = "XXXXXX",
Clock = 12345,
};
var display = new Data.Models.Listxml.Display
@@ -610,7 +610,7 @@ namespace SabreTools.Serialization.Readers.Test
Assert.Equal("tag", chip.Tag);
Assert.Equal(Data.Models.Metadata.ChipType.CPU, chip.Type);
Assert.Equal(true, chip.SoundOnly);
Assert.Equal("XXXXXX", chip.Clock);
Assert.Equal(12345, chip.Clock);
}
/// <summary>

View File

@@ -178,7 +178,7 @@ namespace SabreTools.Serialization.Readers.Test
Tag = "tag",
Type = Data.Models.Metadata.ChipType.CPU,
SoundOnly = true,
Clock = "XXXXXX",
Clock = 12345,
};
var display = new Data.Models.Listxml.Display
@@ -604,7 +604,7 @@ namespace SabreTools.Serialization.Readers.Test
Assert.Equal("tag", chip.Tag);
Assert.Equal(Data.Models.Metadata.ChipType.CPU, chip.Type);
Assert.Equal(true, chip.SoundOnly);
Assert.Equal("XXXXXX", chip.Clock);
Assert.Equal(12345, chip.Clock);
}
/// <summary>

View File

@@ -178,7 +178,7 @@ namespace SabreTools.Serialization.Readers.Test
Tag = "tag",
Type = Data.Models.Metadata.ChipType.CPU,
SoundOnly = true,
Clock = "XXXXXX",
Clock = 12345,
};
var display = new Data.Models.Listxml.Display
@@ -604,7 +604,7 @@ namespace SabreTools.Serialization.Readers.Test
Assert.Equal("tag", chip.Tag);
Assert.Equal(Data.Models.Metadata.ChipType.CPU, chip.Type);
Assert.Equal(true, chip.SoundOnly);
Assert.Equal("XXXXXX", chip.Clock);
Assert.Equal(12345, chip.Clock);
}
/// <summary>

View File

@@ -776,7 +776,7 @@ namespace SabreTools.Serialization.Readers
chip.Flags = kvp.Value;
break;
case "clock":
chip.Clock = kvp.Value;
chip.Clock = NumberHelper.ConvertToInt64(kvp.Value);
break;
default:
// TODO: Log invalid values

View File

@@ -192,7 +192,7 @@ namespace SabreTools.Serialization.Readers
obj.Tag = reader.GetAttribute("tag");
obj.Type = reader.GetAttribute("type").AsChipType();
obj.SoundOnly = reader.GetAttribute("soundonly").AsYesNo();
obj.Clock = reader.GetAttribute("clock");
obj.Clock = NumberHelper.ConvertToInt64(reader.GetAttribute("clock"));
return obj;
}

View File

@@ -190,7 +190,7 @@ namespace SabreTools.Serialization.Readers
obj.Tag = reader.GetAttribute("tag");
obj.Type = reader.GetAttribute("type").AsChipType();
obj.SoundOnly = reader.GetAttribute("soundonly").AsYesNo();
obj.Clock = reader.GetAttribute("clock");
obj.Clock = NumberHelper.ConvertToInt64(reader.GetAttribute("clock"));
return obj;
}

View File

@@ -190,7 +190,7 @@ namespace SabreTools.Serialization.Readers
obj.Tag = reader.GetAttribute("tag");
obj.Type = reader.GetAttribute("type").AsChipType();
obj.SoundOnly = reader.GetAttribute("soundonly").AsYesNo();
obj.Clock = reader.GetAttribute("clock");
obj.Clock = NumberHelper.ConvertToInt64(reader.GetAttribute("clock"));
return obj;
}

View File

@@ -393,7 +393,7 @@ namespace SabreTools.Serialization.Writers
writer.WriteRequiredAttributeString("type", chip.Type?.AsStringValue(), throwOnError: true);
writer.WriteRequiredAttributeString("name", chip.Name, throwOnError: true);
writer.WriteOptionalAttributeString("flags", chip.Flags);
writer.WriteOptionalAttributeString("clock", chip.Clock);
writer.WriteOptionalAttributeString("clock", chip.Clock?.ToString());
writer.WriteEndElement(); // chip
}
}

View File

@@ -127,7 +127,7 @@ namespace SabreTools.Serialization.Writers
writer.WriteOptionalAttributeString("tag", obj.Tag);
writer.WriteRequiredAttributeString("type", obj.Type?.AsStringValue());
writer.WriteOptionalAttributeString("soundonly", obj.SoundOnly.FromYesNo());
writer.WriteOptionalAttributeString("clock", obj.Clock);
writer.WriteOptionalAttributeString("clock", obj.Clock?.ToString());
writer.WriteEndElement();
}

View File

@@ -125,7 +125,7 @@ namespace SabreTools.Serialization.Writers
writer.WriteOptionalAttributeString("tag", obj.Tag);
writer.WriteRequiredAttributeString("type", obj.Type?.AsStringValue());
writer.WriteOptionalAttributeString("soundonly", obj.SoundOnly.FromYesNo());
writer.WriteOptionalAttributeString("clock", obj.Clock);
writer.WriteOptionalAttributeString("clock", obj.Clock?.ToString());
writer.WriteEndElement();
}

View File

@@ -125,7 +125,7 @@ namespace SabreTools.Serialization.Writers
writer.WriteOptionalAttributeString("tag", obj.Tag);
writer.WriteRequiredAttributeString("type", obj.Type?.AsStringValue());
writer.WriteOptionalAttributeString("soundonly", obj.SoundOnly.FromYesNo());
writer.WriteOptionalAttributeString("clock", obj.Clock);
writer.WriteOptionalAttributeString("clock", obj.Clock?.ToString());
writer.WriteEndElement();
}