diff --git a/SabreTools.Metadata.DatItems/Formats/Adjuster.cs b/SabreTools.Metadata.DatItems/Formats/Adjuster.cs
index 4ec34bca..f11b1fba 100644
--- a/SabreTools.Metadata.DatItems/Formats/Adjuster.cs
+++ b/SabreTools.Metadata.DatItems/Formats/Adjuster.cs
@@ -1,5 +1,6 @@
using System.Xml.Serialization;
using Newtonsoft.Json;
+using SabreTools.Metadata.Filter;
namespace SabreTools.Metadata.DatItems.Formats
{
@@ -99,5 +100,28 @@ namespace SabreTools.Metadata.DatItems.Formats
}
#endregion
+
+ #region Manipulation
+
+ ///
+ public override bool PassesFilter(FilterRunner filterRunner)
+ {
+ if (Machine is not null && !Machine.PassesFilter(filterRunner))
+ return false;
+
+ // TODO: Condition
+
+ return filterRunner.Run(_internal);
+ }
+
+ ///
+ public override bool PassesFilterDB(FilterRunner filterRunner)
+ {
+ // TODO: Condition
+
+ return filterRunner.Run(_internal);
+ }
+
+ #endregion
}
}
diff --git a/SabreTools.Metadata.DatItems/Formats/ConfSetting.cs b/SabreTools.Metadata.DatItems/Formats/ConfSetting.cs
index df73c18d..d21a7088 100644
--- a/SabreTools.Metadata.DatItems/Formats/ConfSetting.cs
+++ b/SabreTools.Metadata.DatItems/Formats/ConfSetting.cs
@@ -1,5 +1,6 @@
using System.Xml.Serialization;
using Newtonsoft.Json;
+using SabreTools.Metadata.Filter;
namespace SabreTools.Metadata.DatItems.Formats
{
@@ -105,5 +106,28 @@ namespace SabreTools.Metadata.DatItems.Formats
}
#endregion
+
+ #region Manipulation
+
+ ///
+ public override bool PassesFilter(FilterRunner filterRunner)
+ {
+ if (Machine is not null && !Machine.PassesFilter(filterRunner))
+ return false;
+
+ // TODO: Condition
+
+ return filterRunner.Run(_internal);
+ }
+
+ ///
+ public override bool PassesFilterDB(FilterRunner filterRunner)
+ {
+ // TODO: Condition
+
+ return filterRunner.Run(_internal);
+ }
+
+ #endregion
}
}
diff --git a/SabreTools.Metadata.DatItems/Formats/Configuration.cs b/SabreTools.Metadata.DatItems/Formats/Configuration.cs
index ab991b74..47639766 100644
--- a/SabreTools.Metadata.DatItems/Formats/Configuration.cs
+++ b/SabreTools.Metadata.DatItems/Formats/Configuration.cs
@@ -1,6 +1,7 @@
using System;
using System.Xml.Serialization;
using Newtonsoft.Json;
+using SabreTools.Metadata.Filter;
namespace SabreTools.Metadata.DatItems.Formats
{
@@ -128,5 +129,32 @@ namespace SabreTools.Metadata.DatItems.Formats
}
#endregion
+
+ #region Manipulation
+
+ ///
+ public override bool PassesFilter(FilterRunner filterRunner)
+ {
+ if (Machine is not null && !Machine.PassesFilter(filterRunner))
+ return false;
+
+ // TODO: Condition
+ // TODO: ConfLocation
+ // TODO: ConfSetting
+
+ return filterRunner.Run(_internal);
+ }
+
+ ///
+ public override bool PassesFilterDB(FilterRunner filterRunner)
+ {
+ // TODO: Condition
+ // TODO: ConfLocation
+ // TODO: ConfSetting
+
+ return filterRunner.Run(_internal);
+ }
+
+ #endregion
}
}
diff --git a/SabreTools.Metadata.DatItems/Formats/DataArea.cs b/SabreTools.Metadata.DatItems/Formats/DataArea.cs
index 1692e303..79c4a6fc 100644
--- a/SabreTools.Metadata.DatItems/Formats/DataArea.cs
+++ b/SabreTools.Metadata.DatItems/Formats/DataArea.cs
@@ -1,5 +1,4 @@
-using System;
-using System.Xml.Serialization;
+using System.Xml.Serialization;
using Newtonsoft.Json;
namespace SabreTools.Metadata.DatItems.Formats
@@ -29,11 +28,6 @@ namespace SabreTools.Metadata.DatItems.Formats
set => _internal.Name = value;
}
- public Rom[]? Rom { get; set; }
-
- [JsonIgnore]
- public bool RomSpecified => Rom is not null && Rom.Length > 0;
-
public long? Size
{
get => _internal.Size;
@@ -52,11 +46,12 @@ namespace SabreTools.Metadata.DatItems.Formats
public DataArea() : base() { }
- public DataArea(Data.Models.Metadata.DataArea item) : base(item)
+ public DataArea(Data.Models.Metadata.DataArea item)
{
- // Handle subitems
- if (item.Rom is not null)
- Rom = Array.ConvertAll(item.Rom, rom => new Rom(rom));
+ _internal = item.Clone() as Data.Models.Metadata.DataArea ?? new();
+
+ // Clear all lists
+ _internal.Rom = null;
}
public DataArea(Data.Models.Metadata.DataArea item, Machine machine, Source source) : this(item)
@@ -82,15 +77,9 @@ namespace SabreTools.Metadata.DatItems.Formats
///
public override object Clone() => new DataArea(GetInternalClone());
+ ///
public override Data.Models.Metadata.DataArea GetInternalClone()
- {
- var partItem = _internal.Clone() as Data.Models.Metadata.DataArea ?? new();
-
- if (Rom is not null)
- partItem.Rom = Array.ConvertAll(Rom, rom => rom.GetInternalClone());
-
- return partItem;
- }
+ => _internal.Clone() as Data.Models.Metadata.DataArea ?? new();
#endregion
diff --git a/SabreTools.Metadata.DatItems/Formats/Device.cs b/SabreTools.Metadata.DatItems/Formats/Device.cs
index 47ed37e0..3aee8489 100644
--- a/SabreTools.Metadata.DatItems/Formats/Device.cs
+++ b/SabreTools.Metadata.DatItems/Formats/Device.cs
@@ -1,6 +1,7 @@
using System;
using System.Xml.Serialization;
using Newtonsoft.Json;
+using SabreTools.Metadata.Filter;
namespace SabreTools.Metadata.DatItems.Formats
{
@@ -100,12 +101,6 @@ namespace SabreTools.Metadata.DatItems.Formats
{
var deviceItem = _internal.Clone() as Data.Models.Metadata.Device ?? new();
- deviceItem.DeviceType = DeviceType;
- deviceItem.FixedImage = FixedImage;
- deviceItem.Interface = Interface;
- deviceItem.Mandatory = Mandatory;
- deviceItem.Tag = Tag;
-
if (Instance is not null)
deviceItem.Instance = Instance.GetInternalClone();
@@ -135,5 +130,30 @@ namespace SabreTools.Metadata.DatItems.Formats
}
#endregion
+
+ #region Manipulation
+
+ ///
+ public override bool PassesFilter(FilterRunner filterRunner)
+ {
+ if (Machine is not null && !Machine.PassesFilter(filterRunner))
+ return false;
+
+ // TODO: Instance
+ // TODO: Extension
+
+ return filterRunner.Run(_internal);
+ }
+
+ ///
+ public override bool PassesFilterDB(FilterRunner filterRunner)
+ {
+ // TODO: Instance
+ // TODO: Extension
+
+ return filterRunner.Run(_internal);
+ }
+
+ #endregion
}
}
diff --git a/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs b/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs
index 1a505258..b5fcce0b 100644
--- a/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs
+++ b/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs
@@ -1,6 +1,7 @@
using System;
using System.Xml.Serialization;
using Newtonsoft.Json;
+using SabreTools.Metadata.Filter;
namespace SabreTools.Metadata.DatItems.Formats
{
@@ -158,5 +159,34 @@ namespace SabreTools.Metadata.DatItems.Formats
}
#endregion
+
+ #region Manipulation
+
+ ///
+ public override bool PassesFilter(FilterRunner filterRunner)
+ {
+ if (Machine is not null && !Machine.PassesFilter(filterRunner))
+ return false;
+
+ // TODO: Condition
+ // TODO: DipLocation
+ // TODO: DipValue
+ // TODO: Entry
+
+ return filterRunner.Run(_internal);
+ }
+
+ ///
+ public override bool PassesFilterDB(FilterRunner filterRunner)
+ {
+ // TODO: Condition
+ // TODO: DipLocation
+ // TODO: DipValue
+ // TODO: Entry
+
+ return filterRunner.Run(_internal);
+ }
+
+ #endregion
}
}
diff --git a/SabreTools.Metadata.DatItems/Formats/DipValue.cs b/SabreTools.Metadata.DatItems/Formats/DipValue.cs
index 07e9dda6..4e8adf02 100644
--- a/SabreTools.Metadata.DatItems/Formats/DipValue.cs
+++ b/SabreTools.Metadata.DatItems/Formats/DipValue.cs
@@ -1,5 +1,6 @@
using System.Xml.Serialization;
using Newtonsoft.Json;
+using SabreTools.Metadata.Filter;
namespace SabreTools.Metadata.DatItems.Formats
{
@@ -105,5 +106,28 @@ namespace SabreTools.Metadata.DatItems.Formats
}
#endregion
+
+ #region Manipulation
+
+ ///
+ public override bool PassesFilter(FilterRunner filterRunner)
+ {
+ if (Machine is not null && !Machine.PassesFilter(filterRunner))
+ return false;
+
+ // TODO: Condition
+
+ return filterRunner.Run(_internal);
+ }
+
+ ///
+ public override bool PassesFilterDB(FilterRunner filterRunner)
+ {
+ // TODO: Condition
+
+ return filterRunner.Run(_internal);
+ }
+
+ #endregion
}
}
diff --git a/SabreTools.Metadata.DatItems/Formats/Disk.cs b/SabreTools.Metadata.DatItems/Formats/Disk.cs
index b52dc849..1fab3548 100644
--- a/SabreTools.Metadata.DatItems/Formats/Disk.cs
+++ b/SabreTools.Metadata.DatItems/Formats/Disk.cs
@@ -2,6 +2,7 @@ using System.Xml.Serialization;
using Newtonsoft.Json;
using SabreTools.Data.Extensions;
using SabreTools.Data.Models.Metadata;
+using SabreTools.Metadata.Filter;
using SabreTools.Text.Extensions;
namespace SabreTools.Metadata.DatItems.Formats
@@ -209,6 +210,31 @@ namespace SabreTools.Metadata.DatItems.Formats
#endregion
+ #region Manipulation
+
+ ///
+ public override bool PassesFilter(FilterRunner filterRunner)
+ {
+ if (Machine is not null && !Machine.PassesFilter(filterRunner))
+ return false;
+
+ // TODO: DiskArea
+ // TODO: Part
+
+ return filterRunner.Run(_internal);
+ }
+
+ ///
+ public override bool PassesFilterDB(FilterRunner filterRunner)
+ {
+ // TODO: DiskArea
+ // TODO: Part
+
+ return filterRunner.Run(_internal);
+ }
+
+ #endregion
+
#region Sorting and Merging
///
diff --git a/SabreTools.Metadata.DatItems/Formats/DiskArea.cs b/SabreTools.Metadata.DatItems/Formats/DiskArea.cs
index 2a173a39..dd1b6b01 100644
--- a/SabreTools.Metadata.DatItems/Formats/DiskArea.cs
+++ b/SabreTools.Metadata.DatItems/Formats/DiskArea.cs
@@ -1,5 +1,4 @@
-using System;
-using System.Xml.Serialization;
+using System.Xml.Serialization;
using Newtonsoft.Json;
namespace SabreTools.Metadata.DatItems.Formats
@@ -13,11 +12,6 @@ namespace SabreTools.Metadata.DatItems.Formats
{
#region Properties
- public Disk[]? Disk { get; set; }
-
- [JsonIgnore]
- public bool DiskSpecified => Disk is not null && Disk.Length > 0;
-
/// />
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.DiskArea;
@@ -36,9 +30,10 @@ namespace SabreTools.Metadata.DatItems.Formats
public DiskArea(Data.Models.Metadata.DiskArea item) : base(item)
{
- // Handle subitems
- if (item.Disk is not null)
- Disk = Array.ConvertAll(item.Disk, rom => new Disk(rom));
+ _internal = item.Clone() as Data.Models.Metadata.DiskArea ?? new();
+
+ // Clear all lists
+ _internal.Disk = null;
}
public DiskArea(Data.Models.Metadata.DiskArea item, Machine machine, Source source) : this(item)
@@ -64,15 +59,9 @@ namespace SabreTools.Metadata.DatItems.Formats
///
public override object Clone() => new DiskArea(GetInternalClone());
+ ///
public override Data.Models.Metadata.DiskArea GetInternalClone()
- {
- var partItem = _internal.Clone() as Data.Models.Metadata.DiskArea ?? new();
-
- if (Disk is not null)
- partItem.Disk = Array.ConvertAll(Disk, rom => rom.GetInternalClone());
-
- return partItem;
- }
+ => _internal.Clone() as Data.Models.Metadata.DiskArea ?? new();
#endregion
diff --git a/SabreTools.Metadata.DatItems/Formats/Input.cs b/SabreTools.Metadata.DatItems/Formats/Input.cs
index 30af67e2..6ec0f510 100644
--- a/SabreTools.Metadata.DatItems/Formats/Input.cs
+++ b/SabreTools.Metadata.DatItems/Formats/Input.cs
@@ -1,6 +1,7 @@
using System;
using System.Xml.Serialization;
using Newtonsoft.Json;
+using SabreTools.Metadata.Filter;
namespace SabreTools.Metadata.DatItems.Formats
{
@@ -124,5 +125,28 @@ namespace SabreTools.Metadata.DatItems.Formats
}
#endregion
+
+ #region Manipulation
+
+ ///
+ public override bool PassesFilter(FilterRunner filterRunner)
+ {
+ if (Machine is not null && !Machine.PassesFilter(filterRunner))
+ return false;
+
+ // TODO: Control
+
+ return filterRunner.Run(_internal);
+ }
+
+ ///
+ public override bool PassesFilterDB(FilterRunner filterRunner)
+ {
+ // TODO: Control
+
+ return filterRunner.Run(_internal);
+ }
+
+ #endregion
}
}
diff --git a/SabreTools.Metadata.DatItems/Formats/Part.cs b/SabreTools.Metadata.DatItems/Formats/Part.cs
index c07231d8..2d1e828a 100644
--- a/SabreTools.Metadata.DatItems/Formats/Part.cs
+++ b/SabreTools.Metadata.DatItems/Formats/Part.cs
@@ -1,5 +1,4 @@
-using System;
-using System.Xml.Serialization;
+using System.Xml.Serialization;
using Newtonsoft.Json;
namespace SabreTools.Metadata.DatItems.Formats
@@ -13,26 +12,6 @@ namespace SabreTools.Metadata.DatItems.Formats
{
#region Properties
- public DataArea[]? DataArea { get; set; }
-
- [JsonIgnore]
- public bool DataAreaSpecified => DataArea is not null && DataArea.Length > 0;
-
- public DiskArea[]? DiskArea { get; set; }
-
- [JsonIgnore]
- public bool DiskAreaSpecified => DiskArea is not null && DiskArea.Length > 0;
-
- public DipSwitch[]? DipSwitch { get; set; }
-
- [JsonIgnore]
- public bool DipSwitchSpecified => DipSwitch is not null && DipSwitch.Length > 0;
-
- public PartFeature[]? Feature { get; set; }
-
- [JsonIgnore]
- public bool FeatureSpecified => Feature is not null && Feature.Length > 0;
-
public string? Interface
{
get => _internal.Interface;
@@ -57,18 +36,13 @@ namespace SabreTools.Metadata.DatItems.Formats
public Part(Data.Models.Metadata.Part item) : base(item)
{
- // Handle subitems
- if (item.DataArea is not null)
- DataArea = Array.ConvertAll(item.DataArea, dataArea => new DataArea(dataArea));
+ _internal = item.Clone() as Data.Models.Metadata.Part ?? new();
- if (item.DiskArea is not null)
- DiskArea = Array.ConvertAll(item.DiskArea, diskArea => new DiskArea(diskArea));
-
- if (item.DipSwitch is not null)
- DipSwitch = Array.ConvertAll(item.DipSwitch, dipSwitch => new DipSwitch(dipSwitch));
-
- if (item.Feature is not null)
- Feature = Array.ConvertAll(item.Feature, feature => new PartFeature(feature));
+ // Clear all lists
+ _internal.DataArea = null;
+ _internal.DiskArea = null;
+ _internal.DipSwitch = null;
+ _internal.Feature = null;
}
public Part(Data.Models.Metadata.Part item, Machine machine, Source source) : this(item)
@@ -96,23 +70,7 @@ namespace SabreTools.Metadata.DatItems.Formats
///
public override Data.Models.Metadata.Part GetInternalClone()
- {
- var partItem = _internal.Clone() as Data.Models.Metadata.Part ?? new();
-
- if (DataArea is not null)
- partItem.DataArea = Array.ConvertAll(DataArea, dataArea => dataArea.GetInternalClone());
-
- if (DiskArea is not null)
- partItem.DiskArea = Array.ConvertAll(DiskArea, diskArea => diskArea.GetInternalClone());
-
- if (DipSwitch is not null)
- partItem.DipSwitch = Array.ConvertAll(DipSwitch, dipSwitch => dipSwitch.GetInternalClone());
-
- if (Feature is not null)
- partItem.Feature = Array.ConvertAll(Feature, feature => feature.GetInternalClone());
-
- return partItem;
- }
+ => _internal.Clone() as Data.Models.Metadata.Part ?? new();
#endregion
diff --git a/SabreTools.Metadata.DatItems/Formats/PartFeature.cs b/SabreTools.Metadata.DatItems/Formats/PartFeature.cs
index de0c6ae5..0eef81ce 100644
--- a/SabreTools.Metadata.DatItems/Formats/PartFeature.cs
+++ b/SabreTools.Metadata.DatItems/Formats/PartFeature.cs
@@ -1,5 +1,6 @@
using System.Xml.Serialization;
using Newtonsoft.Json;
+using SabreTools.Metadata.Filter;
namespace SabreTools.Metadata.DatItems.Formats
{
@@ -105,5 +106,28 @@ namespace SabreTools.Metadata.DatItems.Formats
}
#endregion
+
+ #region Manipulation
+
+ ///
+ public override bool PassesFilter(FilterRunner filterRunner)
+ {
+ if (Machine is not null && !Machine.PassesFilter(filterRunner))
+ return false;
+
+ // TODO: Part
+
+ return filterRunner.Run(_internal);
+ }
+
+ ///
+ public override bool PassesFilterDB(FilterRunner filterRunner)
+ {
+ // TODO: Part
+
+ return filterRunner.Run(_internal);
+ }
+
+ #endregion
}
}
diff --git a/SabreTools.Metadata.DatItems/Formats/Port.cs b/SabreTools.Metadata.DatItems/Formats/Port.cs
index ea822baf..a0e6b1a0 100644
--- a/SabreTools.Metadata.DatItems/Formats/Port.cs
+++ b/SabreTools.Metadata.DatItems/Formats/Port.cs
@@ -1,6 +1,7 @@
using System;
using System.Xml.Serialization;
using Newtonsoft.Json;
+using SabreTools.Metadata.Filter;
namespace SabreTools.Metadata.DatItems.Formats
{
@@ -94,5 +95,28 @@ namespace SabreTools.Metadata.DatItems.Formats
}
#endregion
+
+ #region Manipulation
+
+ ///
+ public override bool PassesFilter(FilterRunner filterRunner)
+ {
+ if (Machine is not null && !Machine.PassesFilter(filterRunner))
+ return false;
+
+ // TODO: Analog
+
+ return filterRunner.Run(_internal);
+ }
+
+ ///
+ public override bool PassesFilterDB(FilterRunner filterRunner)
+ {
+ // TODO: Analog
+
+ return filterRunner.Run(_internal);
+ }
+
+ #endregion
}
}
diff --git a/SabreTools.Metadata.DatItems/Formats/Rom.cs b/SabreTools.Metadata.DatItems/Formats/Rom.cs
index 5d8b22d7..ae24c769 100644
--- a/SabreTools.Metadata.DatItems/Formats/Rom.cs
+++ b/SabreTools.Metadata.DatItems/Formats/Rom.cs
@@ -2,6 +2,7 @@ using System.Xml.Serialization;
using Newtonsoft.Json;
using SabreTools.Data.Extensions;
using SabreTools.Data.Models.Metadata;
+using SabreTools.Metadata.Filter;
using SabreTools.Text.Extensions;
namespace SabreTools.Metadata.DatItems.Formats
@@ -941,6 +942,31 @@ namespace SabreTools.Metadata.DatItems.Formats
#endregion
+ #region Manipulation
+
+ ///
+ public override bool PassesFilter(FilterRunner filterRunner)
+ {
+ if (Machine is not null && !Machine.PassesFilter(filterRunner))
+ return false;
+
+ // TODO: DataArea
+ // TODO: Part
+
+ return filterRunner.Run(_internal);
+ }
+
+ ///
+ public override bool PassesFilterDB(FilterRunner filterRunner)
+ {
+ // TODO: DataArea
+ // TODO: Part
+
+ return filterRunner.Run(_internal);
+ }
+
+ #endregion
+
#region Sorting and Merging
///
diff --git a/SabreTools.Metadata.DatItems/Formats/Slot.cs b/SabreTools.Metadata.DatItems/Formats/Slot.cs
index cfab5278..55a381cd 100644
--- a/SabreTools.Metadata.DatItems/Formats/Slot.cs
+++ b/SabreTools.Metadata.DatItems/Formats/Slot.cs
@@ -1,6 +1,7 @@
using System;
using System.Xml.Serialization;
using Newtonsoft.Json;
+using SabreTools.Metadata.Filter;
namespace SabreTools.Metadata.DatItems.Formats
{
@@ -94,5 +95,28 @@ namespace SabreTools.Metadata.DatItems.Formats
}
#endregion
+
+ #region Manipulation
+
+ ///
+ public override bool PassesFilter(FilterRunner filterRunner)
+ {
+ if (Machine is not null && !Machine.PassesFilter(filterRunner))
+ return false;
+
+ // TODO: SlotOption
+
+ return filterRunner.Run(_internal);
+ }
+
+ ///
+ public override bool PassesFilterDB(FilterRunner filterRunner)
+ {
+ // TODO: SlotOption
+
+ return filterRunner.Run(_internal);
+ }
+
+ #endregion
}
}