using System.Collections.Generic;
using System.Linq;
using SabreTools.Models.Internal;
namespace SabreTools.Serialization
{
public class Internal
{
///
/// 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.SelectMany(ExtractItems));
var diskAreas = item.Read(Part.DiskAreaKey);
if (diskAreas != null && diskAreas.Any())
datItems.AddRange(diskAreas.SelectMany(ExtractItems));
var dipSwitches = item.Read(Part.DipSwitchKey);
if (dipSwitches != null && dipSwitches.Any())
datItems.AddRange(dipSwitches);
return datItems.ToArray();
}
///
/// Extract nested items from a DataArea
///
private static Rom[]? ExtractItems(DataArea? item)
{
if (item == null)
return null;
return item.Read(DataArea.RomKey);
}
///
/// Extract nested items from a DiskArea
///
private static Disk[]? ExtractItems(DiskArea? item)
{
if (item == null)
return null;
return item.Read(DiskArea.DiskKey);
}
}
}