/*----------------------------------------------------------------------
Prof-It for C#
Copyright (c) 2004 Klaus Lehner, University of Linz
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
----------------------------------------------------------------------*/
using System;
namespace at.jku.ssw.ProfIt.Components{
/// <summary>
/// Represents a position in the source code
/// </summary>
[Serializable]
public class Position : IComparable {
private int abs;
private int abs2;
public Position(int abs, int line, int offset) {
this.abs = abs + offset;
this.abs2 = abs - line + 1;;
}
/// <summary>
/// Returns the absolute position including all line breaks
/// </summary>
public int Abs {
get { return this.abs; }
}
/// <summary>
/// Returns the absolute position without all line breaks
/// </summary>
public int Abs2 {
get { return this.abs2; }
}
#region CompareTo, ToString, Equals, HashCode
public int CompareTo(object p1) {
Position p = (Position)p1;
try {
if (this.Abs2 < p.Abs2) return -1;
if (this.Abs2 > p.Abs2) return 1;
} catch (Exception e) {
Console.WriteLine(e.StackTrace);
}
return 0;
}
public override string ToString() {
return "(" + abs + ")";
}
public override bool Equals(object obj) {
Position pos = (Position)obj;
return (pos.abs == this.abs);
}
public override int GetHashCode() {
return abs;
}
#endregion
#region operators
public static bool operator < (Position p1, Position p2) {
IComparable itfComp = (IComparable)p1;
return (itfComp.CompareTo(p2) < 0);
}
public static bool operator > (Position p1, Position p2) {
IComparable itfComp = (IComparable)p1;
return (itfComp.CompareTo(p2) > 0);
}
public static bool operator <= (Position p1, Position p2) {
IComparable itfComp = (IComparable)p1;
return (itfComp.CompareTo(p2) <= 0);
}
public static bool operator >= (Position p1, Position p2) {
IComparable itfComp = (IComparable)p1;
return (itfComp.CompareTo(p2) >= 0);
}
public static Position operator + (Position p1, int i) {
Position p = new Position(p1.Abs +1, -1, 0);
p.abs2 = p1.abs2 + 1;
return p;
}
#endregion
}
}
|