namespace IStation.Epanet.Network.Structures
{
public enum ElementType { NODE, LINK, PATTERN, CURVE, CONTROL, RULE }
/// Base class for all IStation.Epanet elements - Links, Nodes etc.
public abstract class Element : IComparable, IEquatable
{
private readonly string _name;
protected Element(string name)
{
if (name == null)
throw new ArgumentNullException(nameof(name));
if (name.Length == 0 || name.Length > Constants.MAXID)
throw new ArgumentException(nameof(name));
_name = name;
}
public abstract ElementType ElementType { get; }
public string Name => _name;
public string Tag { get; set; } = string.Empty;
/// Element comment (parsed from INP or excel file)
public string Comment { get; set; }
#region Overrides of Object
public override string ToString()
{
return string.Format("{0}{{{1}}}", GetType().Name, _name);
}
#endregion
#region Implementation of IComparable, IEquatable
public int CompareTo(Element other)
{
return other == null ? 1 : string.Compare(Name, other.Name, StringComparison.OrdinalIgnoreCase);
}
public bool Equals(Element other)
{
return other != null && string.Equals(_name, other._name, StringComparison.OrdinalIgnoreCase);
}
public override int GetHashCode()
{
return string.IsNullOrEmpty(_name)
? 0
: _name.GetHashCode();
}
#endregion
}
}