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 } }