using System;
using SabreTools.Metadata.Filter;
namespace SabreTools.Metadata.DatItems
{
///
/// Base class for all items included in a set that are backed by an internal model
///
public abstract class DatItem : DatItem, ICloneable
where T : Data.Models.Metadata.DatItem, new()
{
#region Private Fields
///
/// Internal model
///
protected T _internal;
#endregion
#region Constructors
///
/// Create a default, empty object
///
public DatItem()
{
_internal = new T();
SetName(string.Empty);
Machine = new Machine();
}
///
/// Create an object from the internal model
///
public DatItem(T item)
{
_internal = item;
Machine = new Machine();
}
#endregion
#region Cloning Methods
///
/// Get a clone of the current internal model
///
public abstract T GetInternalClone();
#endregion
#region Manipulation
///
public override bool PassesFilter(FilterRunner filterRunner)
{
if (Machine is not null && !Machine.PassesFilter(filterRunner))
return false;
return filterRunner.Run(_internal);
}
///
public override bool PassesFilterDB(FilterRunner filterRunner)
=> filterRunner.Run(_internal);
#endregion
}
}