185 lines
4.9 KiB
C#
185 lines
4.9 KiB
C#
using System;
|
|
using System.Linq;
|
|
|
|
namespace DALI.Toolkit.Utils
|
|
{
|
|
/// <summary>
|
|
/// Value name for a point
|
|
/// </summary>
|
|
public class NamePoint : IEquatable<NamePoint>
|
|
{
|
|
public char Letter { get; set; }
|
|
public int Index { get; set; }
|
|
public bool HavePrime { get; set; }
|
|
|
|
public NamePoint()
|
|
{
|
|
Letter = '*';
|
|
Index = 0;
|
|
HavePrime = false;
|
|
}
|
|
|
|
public NamePoint(string name)
|
|
{
|
|
if (name.Length > 0)
|
|
{
|
|
Letter = name.First();
|
|
|
|
char lastChar = name.Last();
|
|
|
|
if (lastChar.ToString().Equals(ParamNamePoint.PrimeValue))
|
|
{
|
|
HavePrime = true;
|
|
}
|
|
else
|
|
{
|
|
HavePrime = false;
|
|
}
|
|
|
|
if (HavePrime)
|
|
{
|
|
//Case A'
|
|
if (name.Length <= 2)
|
|
{
|
|
Index = 0;
|
|
}
|
|
//Cas A1'
|
|
else
|
|
{
|
|
string indexString = name.Substring(1, name.Length - 2);
|
|
Index = Int32.Parse(indexString);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//Case A
|
|
if (name.Length <= 1)
|
|
{
|
|
Index = 0;
|
|
}
|
|
//Case A1
|
|
else
|
|
{
|
|
string indexString = name.Substring(1, name.Length - 1);
|
|
Index = Int32.Parse(indexString);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("Error name empty for point");
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Allow to sorted => A A' B B' A1 B1
|
|
/// </summary>
|
|
/// <param name="nametoCompate"></param>
|
|
/// <returns></returns>
|
|
public bool NameIsStrictUpTo(NamePoint nametoCompate)
|
|
{
|
|
if (this.Index > nametoCompate.Index)
|
|
{
|
|
return true;
|
|
}
|
|
else if (this.Index == nametoCompate.Index)
|
|
{
|
|
if (this.Letter != nametoCompate.Letter)
|
|
{
|
|
if (this.Letter < nametoCompate.Letter)
|
|
{
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//A1 and A1'
|
|
if (this.HavePrime && !nametoCompate.HavePrime)
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
|
|
}
|
|
|
|
public NamePoint GetNextName()
|
|
{
|
|
char nextLetter = Letter;
|
|
|
|
if(nextLetter == 'Z')
|
|
{
|
|
nextLetter = 'A';
|
|
int nextIndex = Index + 1;
|
|
|
|
string nextName = nextLetter.ToString() + nextIndex;
|
|
|
|
return new NamePoint(nextName);
|
|
}
|
|
else
|
|
{
|
|
nextLetter++;
|
|
|
|
string nextName = nextLetter.ToString() + Index;
|
|
|
|
return new NamePoint(nextName);
|
|
}
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
if(Index != 0)
|
|
{
|
|
if(HavePrime)
|
|
{
|
|
return Letter.ToString() + Index + ParamNamePoint.PrimeValue;
|
|
}
|
|
else
|
|
{
|
|
return Letter.ToString() + Index;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (HavePrime)
|
|
{
|
|
return Letter.ToString() + ParamNamePoint.PrimeValue;
|
|
}
|
|
else
|
|
{
|
|
return Letter.ToString();
|
|
}
|
|
}
|
|
}
|
|
|
|
public override int GetHashCode()
|
|
{
|
|
return Letter.GetHashCode() + Index.GetHashCode() + HavePrime.GetHashCode();
|
|
}
|
|
|
|
public bool Equals(NamePoint other)
|
|
{
|
|
if (this.Letter == other.Letter && this.Index == other.Index && this.HavePrime.Equals(other.HavePrime))
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
}
|