mirror of https://github.com/icsharpcode/ILSpy.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
129 lines
3.0 KiB
129 lines
3.0 KiB
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) |
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) |
|
|
|
using System; |
|
using Location = ICSharpCode.NRefactory.Location; |
|
|
|
namespace ICSharpCode.SharpDevelop.Dom |
|
{ |
|
[Serializable] |
|
public struct DomRegion : IEquatable<DomRegion> |
|
{ |
|
readonly int beginLine; |
|
readonly int endLine; |
|
readonly int beginColumn; |
|
readonly int endColumn; |
|
|
|
public readonly static DomRegion Empty = new DomRegion(-1, -1); |
|
|
|
public bool IsEmpty { |
|
get { |
|
return BeginLine <= 0; |
|
} |
|
} |
|
|
|
public int BeginLine { |
|
get { |
|
return beginLine; |
|
} |
|
} |
|
|
|
/// <value> |
|
/// if the end line is == -1 the end column is -1 too |
|
/// this stands for an unknwon end |
|
/// </value> |
|
public int EndLine { |
|
get { |
|
return endLine; |
|
} |
|
} |
|
|
|
public int BeginColumn { |
|
get { |
|
return beginColumn; |
|
} |
|
} |
|
|
|
/// <value> |
|
/// if the end column is == -1 the end line is -1 too |
|
/// this stands for an unknown end |
|
/// </value> |
|
public int EndColumn { |
|
get { |
|
return endColumn; |
|
} |
|
} |
|
|
|
public static DomRegion FromLocation(Location start, Location end) |
|
{ |
|
return new DomRegion(start.Y, start.X, end.Y, end.X); |
|
} |
|
|
|
public DomRegion(int beginLine, int beginColumn, int endLine, int endColumn) |
|
{ |
|
this.beginLine = beginLine; |
|
this.beginColumn = beginColumn; |
|
this.endLine = endLine; |
|
this.endColumn = endColumn; |
|
} |
|
|
|
public DomRegion(int beginLine, int beginColumn) |
|
{ |
|
this.beginLine = beginLine; |
|
this.beginColumn = beginColumn; |
|
this.endLine = -1; |
|
this.endColumn = -1; |
|
} |
|
|
|
/// <remarks> |
|
/// Returns true, if the given coordinates (row, column) are in the region. |
|
/// This method assumes that for an unknown end the end line is == -1 |
|
/// </remarks> |
|
public bool IsInside(int row, int column) |
|
{ |
|
if (IsEmpty) |
|
return false; |
|
return row >= BeginLine && |
|
(row <= EndLine || EndLine == -1) && |
|
(row != BeginLine || column >= BeginColumn) && |
|
(row != EndLine || column <= EndColumn); |
|
} |
|
|
|
public override string ToString() |
|
{ |
|
return String.Format("[Region: BeginLine = {0}, EndLine = {1}, BeginColumn = {2}, EndColumn = {3}]", |
|
beginLine, |
|
endLine, |
|
beginColumn, |
|
endColumn); |
|
} |
|
|
|
public override bool Equals(object obj) |
|
{ |
|
return obj is DomRegion && Equals((DomRegion)obj); |
|
} |
|
|
|
public override int GetHashCode() |
|
{ |
|
unchecked { |
|
return BeginColumn + 1100009 * BeginLine + 1200007 * BeginColumn + 1300021 * EndColumn; |
|
} |
|
} |
|
|
|
public bool Equals(DomRegion other) |
|
{ |
|
return BeginLine == other.BeginLine && BeginColumn == other.BeginColumn |
|
&& EndLine == other.EndLine && EndColumn == other.EndColumn; |
|
} |
|
|
|
public static bool operator ==(DomRegion lhs, DomRegion rhs) |
|
{ |
|
return lhs.Equals(rhs); |
|
} |
|
|
|
public static bool operator !=(DomRegion lhs, DomRegion rhs) |
|
{ |
|
return !lhs.Equals(rhs); |
|
} |
|
} |
|
}
|
|
|