// 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); } } }