using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Metadata.DatItems.Formats { /// /// SoftwareList dataarea information /// /// One DataArea can contain multiple Rom items [JsonObject("dataarea"), XmlRoot("dataarea")] public sealed class DataArea : DatItem { #region Properties public Data.Models.Metadata.Endianness? Endianness { get => _internal.Endianness; set => _internal.Endianness = value; } /// /> public override Data.Models.Metadata.ItemType ItemType => Data.Models.Metadata.ItemType.DataArea; public string? Name { get => _internal.Name; 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; set => _internal.Size = value; } public Data.Models.Metadata.Width? Width { get => _internal.Width; set => _internal.Width = value; } #endregion #region Constructors public DataArea() : base() { } public DataArea(Data.Models.Metadata.DataArea item) : base(item) { // Handle subitems if (item.Rom is not null) Rom = Array.ConvertAll(item.Rom, rom => new Rom(rom)); } public DataArea(Data.Models.Metadata.DataArea item, Machine machine, Source source) : this(item) { Source = source; CopyMachineInformation(machine); } #endregion #region Accessors /// public override string? GetName() => Name; /// public override void SetName(string? name) => Name = name; #endregion #region Cloning Methods /// 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; } #endregion #region Comparision Methods /// public override bool Equals(DatItem? other) { // If the other item is null if (other is null) return false; // If the type matches if (other is DataArea otherDataArea) return _internal.Equals(otherDataArea._internal); // Everything else fails return false; } #endregion } }