// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using Roslyn.Utilities;
namespace Microsoft.CodeAnalysis.Text
{
///
/// Immutable span represented by a pair of line number and index within the line.
///
public struct LinePositionSpan : IEquatable
{
private readonly LinePosition _start;
private readonly LinePosition _end;
///
/// Creates .
///
/// Start position.
/// End position.
/// preceeds .
public LinePositionSpan(LinePosition start, LinePosition end)
{
if (end < start)
{
throw new ArgumentException(CodeAnalysisResources.EndMustNotBeLessThanStart, nameof(end));
}
_start = start;
_end = end;
}
///
/// Gets the start position of the span.
///
public LinePosition Start
{
get { return _start; }
}
///
/// Gets the end position of the span.
///
public LinePosition End
{
get { return _end; }
}
public override bool Equals(object obj)
{
return obj is LinePositionSpan && Equals((LinePositionSpan)obj);
}
public bool Equals(LinePositionSpan other)
{
return _start.Equals(other._start)
&& _end.Equals(other._end);
}
public override int GetHashCode()
{
return Hash.Combine(_start.GetHashCode(), _end.GetHashCode());
}
public static bool operator ==(LinePositionSpan left, LinePositionSpan right)
{
return left.Equals(right);
}
public static bool operator !=(LinePositionSpan left, LinePositionSpan right)
{
return !left.Equals(right);
}
///
/// Provides a string representation for .
///
/// (0,0)-(5,6)
public override string ToString()
{
return string.Format("({0})-({1})", _start, _end);
}
}
}