using System;
using System.Collections.Generic;
using System.Linq;
using SabreTools.Models.Metadata;
namespace SabreTools.Serialization
{
public class Internal
{
///
/// Extract nested items from a Dump
///
public static DatItem[]? ExtractItems(Dump? item)
{
if (item == null)
return null;
var datItems = new List();
var rom = item.Read(Dump.RomKey);
if (rom != null)
datItems.Add(rom);
var megaRom = item.Read(Dump.MegaRomKey);
if (megaRom != null)
datItems.Add(megaRom);
var sccPlusCart = item.Read(Dump.SCCPlusCartKey);
if (sccPlusCart != null)
datItems.Add(sccPlusCart);
return datItems.ToArray();
}
///
/// Extract nested items from a Part
///
public static DatItem[]? ExtractItems(Part? item)
{
if (item == null)
return null;
var datItems = new List();
var features = item.Read(Part.FeatureKey);
if (features != null && features.Any())
datItems.AddRange(features);
var dataAreas = item.Read(Part.DataAreaKey);
if (dataAreas != null && dataAreas.Any())
{
datItems.AddRange(dataAreas
.Where(d => d != null)
.SelectMany(ExtractItems));
}
var diskAreas = item.Read(Part.DiskAreaKey);
if (diskAreas != null && diskAreas.Any())
{
datItems.AddRange(diskAreas
.Where(d => d != null)
.SelectMany(ExtractItems));
}
var dipSwitches = item.Read(Part.DipSwitchKey);
if (dipSwitches != null && dipSwitches.Any())
{
datItems.AddRange(dipSwitches
.Where(d => d != null));
}
return datItems.ToArray();
}
///
/// Extract nested items from a DataArea
///
private static Rom[] ExtractItems(DataArea item)
{
var roms = item.Read(DataArea.RomKey);
if (roms == null || !roms.Any())
return Array.Empty();
return roms.ToArray();
}
///
/// Extract nested items from a DiskArea
///
private static Disk[] ExtractItems(DiskArea item)
{
var roms = item.Read(DiskArea.DiskKey);
if (roms == null || !roms.Any())
return Array.Empty();
return roms.ToArray();
}
}
}