using System;
namespace SabreTools.Helper
{
public class Rom : Disk
{
#region Private instance variables
// Rom information
protected long _size;
protected string _crc;
private string _date;
#endregion
#region Publicly facing variables
// Rom information
public long Size
{
get { return _size; }
set { _size = value; }
}
public string CRC
{
get { return _crc; }
set { _crc = value; }
}
public string Date
{
get { return _date; }
set { _date = value; }
}
#endregion
#region Constructors
///
/// Create a default, empty Rom object
///
public Rom()
{
_name = "";
_itemType = ItemType.Rom;
_dupeType = DupeType.None;
_itemStatus = ItemStatus.None;
_date = "";
}
///
/// Create a "blank" Rom object
///
///
///
public Rom(string name, string machineName) :
this(name, -1, "null", "null", "null", ItemStatus.None, null, machineName, null, machineName, null, null, null, null, null, null, false, null, null, -1, null, -1, null)
{
}
///
/// Create a new Rom object with the included information
///
/// Name of the item, including extension
/// Long size of the item
/// String representation of the CRC
/// String representation of the MD5
/// String representation of the SHA-1
/// Status of the current item
/// String representation of the Date
public Rom(string name, long size, string crc, string md5, string sha1, ItemStatus itemStatus, string date)
{
_name = name;
_itemType = ItemType.Rom;
_size = size;
_crc = crc?.ToLowerInvariant();
_md5 = md5?.ToLowerInvariant();
_sha1 = sha1?.ToLowerInvariant();
_itemStatus = itemStatus;
_date = date;
}
///
/// Create a new Rom object with the included information
///
/// Name of the item, including extension
/// Long size of the item
/// String representation of the CRC
/// String representation of the MD5
/// String representation of the SHA-1
/// Status of the current item
/// String representation of the Date
/// Name for the machine/game
/// Comment for the machine/game
/// Description for the machine/game
/// Year for the machine/game
/// Manufacturer name for the machine/game
/// Set that this machine/game is a rom of
/// Set that this machine/game is a clone of
/// Set that this machine/game is a sample of
/// Source file for the machine/game
/// True if this game is a BIOS, false otherwise
/// Name of the board for this machine/game
/// Name of the game to rebuild to
/// System ID to be associated with
/// System Name to be associated with
/// Source ID to be associated with
/// Source Name to be associated with
public Rom(string name, long size, string crc, string md5, string sha1, ItemStatus itemStatus, string date, string machineName,
string comment, string machineDescription, string year, string manufacturer, string romOf, string cloneOf, string sampleOf,
string sourceFile, bool isBios, string board, string rebuildTo, int systemId, string systemName, int sourceId, string sourceName)
{
_name = name;
_itemType = ItemType.Rom;
_size = size;
_crc = crc?.ToLowerInvariant();
_md5 = md5?.ToLowerInvariant();
_sha1 = sha1?.ToLowerInvariant();
_itemStatus = itemStatus;
_date = date;
_machineName = machineName;
_comment = comment;
_machineDescription = machineDescription;
_year = year;
_manufacturer = manufacturer;
_romOf = romOf;
_cloneOf = cloneOf;
_sampleOf = sampleOf;
_sourceFile = sourceFile;
_isBios = isBios;
_board = board;
_rebuildTo = rebuildTo;
_systemId = systemId;
_systemName = systemName;
_sourceId = sourceId;
_sourceName = sourceName;
}
#endregion
#region Comparision Methods
public override bool Equals(DatItem other)
{
bool dupefound = false;
// If we don't have a rom, return false
if (_itemType != other.Type)
{
return dupefound;
}
// Otherwise, treat it as a rom
Rom newOther = (Rom)other;
// If either is a nodump, it's never a match
if (_itemStatus == ItemStatus.Nodump || newOther.ItemStatus == ItemStatus.Nodump)
{
return dupefound;
}
if ((this.Size == newOther.Size) &&
((String.IsNullOrEmpty(this.CRC) || String.IsNullOrEmpty(newOther.CRC)) || this.CRC == newOther.CRC) &&
((String.IsNullOrEmpty(this.MD5) || String.IsNullOrEmpty(newOther.MD5)) || this.MD5 == newOther.MD5) &&
((String.IsNullOrEmpty(this.SHA1) || String.IsNullOrEmpty(newOther.SHA1)) || this.SHA1 == newOther.SHA1))
{
dupefound = true;
}
return dupefound;
}
#endregion
}
}