using System.Xml.Serialization; using SabreTools.Core; using Newtonsoft.Json; namespace SabreTools.DatItems.Formats { /// /// SoftwareList dataarea information /// /// One DataArea can contain multiple Rom items [JsonObject("dataarea"), XmlRoot("dataarea")] public class DataArea : DatItem { #region Fields /// /// Name of the item /// [JsonProperty("name", DefaultValueHandling = DefaultValueHandling.Ignore)] [XmlElement("name")] public string Name { get; set; } /// /// Total size of the area /// [JsonProperty("size", DefaultValueHandling = DefaultValueHandling.Ignore)] [XmlElement("size")] public long? Size { get; set; } [JsonIgnore] public bool SizeSpecified { get { return Size != null; } } /// /// Word width for the area /// [JsonProperty("width", DefaultValueHandling = DefaultValueHandling.Ignore)] [XmlElement("width")] public long? Width { get; set; } [JsonIgnore] public bool WidthSpecified { get { return Width != null; } } /// /// Byte endianness of the area /// [JsonProperty("endianness", DefaultValueHandling = DefaultValueHandling.Ignore)] [XmlElement("endianness")] public Endianness Endianness { get; set; } [JsonIgnore] public bool EndiannessSpecified { get { return Endianness != Endianness.NULL; } } #endregion #region Accessors /// public override string GetName() => Name; /// public override void SetName(string name) => Name = name; #endregion #region Constructors /// /// Create a default, empty DataArea object /// public DataArea() { Name = string.Empty; ItemType = ItemType.DataArea; } #endregion #region Cloning Methods public override object Clone() { return new DataArea() { ItemType = this.ItemType, DupeType = this.DupeType, Machine = this.Machine.Clone() as Machine, Source = this.Source.Clone() as Source, Remove = this.Remove, Name = this.Name, Size = this.Size, Width = this.Width, Endianness = this.Endianness, }; } #endregion #region Comparision Methods public override bool Equals(DatItem other) { // If we don't have a DataArea, return false if (ItemType != other.ItemType) return false; // Otherwise, treat it as a DataArea DataArea newOther = other as DataArea; // If the DataArea information matches return (Name == newOther.Name && Size == newOther.Size && Width == newOther.Width && Endianness == newOther.Endianness); } #endregion } }