DictionaryBase is no more, bon voyage

This commit is contained in:
Matt Nadareski
2026-04-04 23:13:36 -04:00
parent e31be83832
commit bf852ef038
69 changed files with 167 additions and 850 deletions

View File

@@ -239,7 +239,7 @@ namespace SabreTools.Metadata.DatFiles
// Convert items in the machine
if (item.Adjuster is not null)
{
var items = item.Adjuster ?? [];
var items = item.Adjuster;
var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item));
Array.ForEach(filtered, item =>
{
@@ -251,7 +251,7 @@ namespace SabreTools.Metadata.DatFiles
if (item.Archive is not null)
{
var items = item.Archive ?? [];
var items = item.Archive;
var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item));
Array.ForEach(filtered, item =>
{
@@ -263,7 +263,7 @@ namespace SabreTools.Metadata.DatFiles
if (item.BiosSet is not null)
{
var items = item.BiosSet ?? [];
var items = item.BiosSet;
var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item));
Array.ForEach(filtered, item =>
{
@@ -275,7 +275,7 @@ namespace SabreTools.Metadata.DatFiles
if (item.Chip is not null)
{
var items = item.Chip ?? [];
var items = item.Chip;
var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item));
Array.ForEach(filtered, item =>
{
@@ -287,7 +287,7 @@ namespace SabreTools.Metadata.DatFiles
if (item.Configuration is not null)
{
var items = item.Configuration ?? [];
var items = item.Configuration;
var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item));
Array.ForEach(filtered, item =>
{
@@ -299,7 +299,7 @@ namespace SabreTools.Metadata.DatFiles
if (item.Device is not null)
{
var items = item.Device ?? [];
var items = item.Device;
var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item));
Array.ForEach(filtered, item =>
{
@@ -311,7 +311,7 @@ namespace SabreTools.Metadata.DatFiles
if (item.DeviceRef is not null)
{
var items = item.DeviceRef ?? [];
var items = item.DeviceRef;
// Do not filter these due to later use
Array.ForEach(items, item =>
{
@@ -323,7 +323,7 @@ namespace SabreTools.Metadata.DatFiles
if (item.DipSwitch is not null)
{
var items = item.DipSwitch ?? [];
var items = item.DipSwitch;
var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item));
Array.ForEach(filtered, item =>
{
@@ -335,7 +335,7 @@ namespace SabreTools.Metadata.DatFiles
if (item.Disk is not null)
{
var items = item.Disk ?? [];
var items = item.Disk;
var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item));
Array.ForEach(filtered, item =>
{
@@ -347,7 +347,7 @@ namespace SabreTools.Metadata.DatFiles
if (item.Display is not null)
{
var items = item.Display ?? [];
var items = item.Display;
var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item));
Array.ForEach(filtered, item =>
{
@@ -366,7 +366,7 @@ namespace SabreTools.Metadata.DatFiles
if (item.Dump is not null)
{
var items = item.Dump ?? [];
var items = item.Dump;
for (int i = 0; i < items.Length; i++)
{
var datItem = new Rom(items[i], machine, source, i);
@@ -391,7 +391,7 @@ namespace SabreTools.Metadata.DatFiles
if (item.Feature is not null)
{
var items = item.Feature ?? [];
var items = item.Feature;
var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item));
Array.ForEach(filtered, item =>
{
@@ -403,7 +403,7 @@ namespace SabreTools.Metadata.DatFiles
if (item.Info is not null)
{
var items = item.Info ?? [];
var items = item.Info;
var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item));
Array.ForEach(filtered, item =>
{
@@ -422,7 +422,7 @@ namespace SabreTools.Metadata.DatFiles
if (item.Media is not null)
{
var items = item.Media ?? [];
var items = item.Media;
var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item));
Array.ForEach(filtered, item =>
{
@@ -434,13 +434,13 @@ namespace SabreTools.Metadata.DatFiles
if (item.Part is not null)
{
var items = item.Part ?? [];
var items = item.Part;
ProcessItems(items, machine, machineIndex: 0, source, sourceIndex, statsOnly, filterRunner);
}
if (item.Port is not null)
{
var items = item.Port ?? [];
var items = item.Port;
var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item));
Array.ForEach(filtered, item =>
{
@@ -452,7 +452,7 @@ namespace SabreTools.Metadata.DatFiles
if (item.RamOption is not null)
{
var items = item.RamOption ?? [];
var items = item.RamOption;
var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item));
Array.ForEach(filtered, item =>
{
@@ -464,7 +464,7 @@ namespace SabreTools.Metadata.DatFiles
if (item.Release is not null)
{
var items = item.Release ?? [];
var items = item.Release;
var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item));
Array.ForEach(filtered, item =>
{
@@ -476,7 +476,7 @@ namespace SabreTools.Metadata.DatFiles
if (item.Rom is not null)
{
var items = item.Rom ?? [];
var items = item.Rom;
var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item));
Array.ForEach(filtered, item =>
{
@@ -491,7 +491,7 @@ namespace SabreTools.Metadata.DatFiles
if (item.Sample is not null)
{
var items = item.Sample ?? [];
var items = item.Sample;
var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item));
Array.ForEach(filtered, item =>
{
@@ -503,7 +503,7 @@ namespace SabreTools.Metadata.DatFiles
if (item.SharedFeat is not null)
{
var items = item.SharedFeat ?? [];
var items = item.SharedFeat;
var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item));
Array.ForEach(filtered, item =>
{
@@ -515,7 +515,7 @@ namespace SabreTools.Metadata.DatFiles
if (item.Slot is not null)
{
var items = item.Slot ?? [];
var items = item.Slot;
// Do not filter these due to later use
Array.ForEach(items, item =>
{
@@ -527,7 +527,7 @@ namespace SabreTools.Metadata.DatFiles
if (item.SoftwareList is not null)
{
var items = item.SoftwareList ?? [];
var items = item.SoftwareList;
var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item));
Array.ForEach(filtered, item =>
{
@@ -546,7 +546,7 @@ namespace SabreTools.Metadata.DatFiles
if (item.Video is not null)
{
var items = item.Video ?? [];
var items = item.Video;
var filtered = filterRunner is null ? items : Array.FindAll(items, i => filterRunner.Run(item));
Array.ForEach(filtered, item =>
{

View File

@@ -270,25 +270,19 @@ namespace SabreTools.Metadata.DatFiles
// Create the part in the dictionary, if needed
if (!partItems.ContainsKey(partName))
partItems[partName] = [];
partItems[partName] = new();
// Copy over string values
partItems[partName].Name = partName;
if (partItems[partName].Interface == null)
partItems[partName].Interface = partItem.Interface;
// Clear any empty fields
ClearEmptyKeys(partItems[partName]);
// If the item has a DataArea mapping
if (dataAreaMappings.TryGetValue(partItem, out (Data.Models.Metadata.DataArea, Data.Models.Metadata.Rom) dataAreaMap))
{
// Get the mapped items
var (dataArea, romItem) = dataAreaMap;
// Clear any empty fields
ClearEmptyKeys(romItem);
// Get the data area name and skip if there's none
string? dataAreaName = dataArea.Name;
if (dataAreaName is not null)
@@ -306,16 +300,15 @@ namespace SabreTools.Metadata.DatFiles
}
else
{
aggregateDataArea = [];
aggregateDataArea.Endianness = dataArea.Endianness;
aggregateDataArea.Name = dataArea.Name;
aggregateDataArea.Size = dataArea.Size;
aggregateDataArea.Width = dataArea.Width;
aggregateDataArea = new()
{
Endianness = dataArea.Endianness,
Name = dataArea.Name,
Size = dataArea.Size,
Width = dataArea.Width,
};
}
// Clear any empty fields
ClearEmptyKeys(aggregateDataArea);
// Get existing roms as a list
var romsArr = aggregateDataArea.Rom ?? [];
List<Data.Models.Metadata.Rom> roms = [.. romsArr];
@@ -343,9 +336,6 @@ namespace SabreTools.Metadata.DatFiles
// Get the mapped items
var (diskArea, diskItem) = diskAreaMap;
// Clear any empty fields
ClearEmptyKeys(diskItem);
// Get the disk area name and skip if there's none
string? diskAreaName = diskArea.Name;
if (diskAreaName is not null)
@@ -363,13 +353,10 @@ namespace SabreTools.Metadata.DatFiles
}
else
{
aggregateDiskArea = [];
aggregateDiskArea = new();
aggregateDiskArea.Name = diskArea.Name;
}
// Clear any empty fields
ClearEmptyKeys(aggregateDiskArea);
// Get existing disks as a list
var disksArr = aggregateDiskArea.Disk ?? [];
List<Data.Models.Metadata.Disk> disks = [.. disksArr];
@@ -398,9 +385,6 @@ namespace SabreTools.Metadata.DatFiles
var dipSwitchesArr = partItems[partName].DipSwitch ?? [];
List<Data.Models.Metadata.DipSwitch> dipSwitches = [.. dipSwitchesArr];
// Clear any empty fields
ClearEmptyKeys(dipSwitchItem);
// Add the dipswitch
dipSwitches.Add(dipSwitchItem);
@@ -415,9 +399,6 @@ namespace SabreTools.Metadata.DatFiles
var featuresArr = partItems[partName].Feature ?? [];
List<Data.Models.Metadata.Feature> features = [.. featuresArr];
// Clear any empty fields
ClearEmptyKeys(featureItem);
// Add the feature
features.Add(featureItem);
@@ -646,25 +627,19 @@ namespace SabreTools.Metadata.DatFiles
// Create the part in the dictionary, if needed
if (!partItems.ContainsKey(partName))
partItems[partName] = [];
partItems[partName] = new();
// Copy over string values
partItems[partName].Name = partName;
if (partItems[partName].Interface == null)
partItems[partName].Interface = partItem.Interface;
// Clear any empty fields
ClearEmptyKeys(partItems[partName]);
// If the item has a DataArea mapping
if (dataAreaMappings.TryGetValue(partItem, out (Data.Models.Metadata.DataArea, Data.Models.Metadata.Rom) dataAreaMap))
{
// Get the mapped items
var (dataArea, romItem) = dataAreaMap;
// Clear any empty fields
ClearEmptyKeys(romItem);
// Get the data area name and skip if there's none
string? dataAreaName = dataArea.Name;
if (dataAreaName is not null)
@@ -682,16 +657,13 @@ namespace SabreTools.Metadata.DatFiles
}
else
{
aggregateDataArea = [];
aggregateDataArea = new();
aggregateDataArea.Endianness = dataArea.Endianness;
aggregateDataArea.Name = dataArea.Name;
aggregateDataArea.Size = dataArea.Size;
aggregateDataArea.Width = dataArea.Width;
}
// Clear any empty fields
ClearEmptyKeys(aggregateDataArea);
// Get existing roms as a list
var romsArr = aggregateDataArea.Rom ?? [];
List<Data.Models.Metadata.Rom> roms = [.. romsArr];
@@ -719,9 +691,6 @@ namespace SabreTools.Metadata.DatFiles
// Get the mapped items
var (diskArea, diskItem) = diskAreaMap;
// Clear any empty fields
ClearEmptyKeys(diskItem);
// Get the disk area name and skip if there's none
string? diskAreaName = diskArea.Name;
if (diskAreaName is not null)
@@ -739,13 +708,10 @@ namespace SabreTools.Metadata.DatFiles
}
else
{
aggregateDiskArea = [];
aggregateDiskArea = new();
aggregateDiskArea.Name = diskArea.Name;
}
// Clear any empty fields
ClearEmptyKeys(aggregateDiskArea);
// Get existing disks as a list
var disksArr = aggregateDiskArea.Disk ?? [];
List<Data.Models.Metadata.Disk> disks = [.. disksArr];
@@ -774,9 +740,6 @@ namespace SabreTools.Metadata.DatFiles
var dipSwitchesArr = partItems[partName].DipSwitch ?? [];
List<Data.Models.Metadata.DipSwitch> dipSwitches = [.. dipSwitchesArr];
// Clear any empty fields
ClearEmptyKeys(dipSwitchItem);
// Add the dipswitch
dipSwitches.Add(dipSwitchItem);
@@ -791,9 +754,6 @@ namespace SabreTools.Metadata.DatFiles
var featuresArr = partItems[partName].Feature ?? [];
List<Data.Models.Metadata.Feature> features = [.. featuresArr];
// Clear any empty fields
ClearEmptyKeys(featureItem);
// Add the feature
features.Add(featureItem);
@@ -953,19 +913,6 @@ namespace SabreTools.Metadata.DatFiles
return romItem;
}
/// <summary>
/// Clear empty keys from a DictionaryBase object
/// </summary>
private static void ClearEmptyKeys(Data.Models.Metadata.DictionaryBase obj)
{
string[] fieldNames = [.. obj.Keys];
foreach (string fieldName in fieldNames)
{
if (obj[fieldName] is null)
obj.Remove(fieldName);
}
}
#endregion
}
}

View File

@@ -96,10 +96,11 @@ namespace SabreTools.Metadata.DatFiles
set => _internal.EmulatorVersion = value;
}
/// <summary>
/// External name of the DAT
/// </summary>
public string? FileName { get; set; }
public string? FileName
{
get => _internal.FileName;
set => _internal.FileName = value;
}
public MergingFlag ForceMerging
{
@@ -332,7 +333,6 @@ namespace SabreTools.Metadata.DatFiles
public object Clone() => new DatHeader(GetInternalClone())
{
DatFormat = DatFormat,
FileName = FileName,
};
/// <summary>