1
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team
3
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
4
// software and associated documentation files (the "Software"), to deal in the Software
5
// without restriction, including without limitation the rights to use, copy, modify, merge,
6
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
7
// to whom the Software is furnished to do so, subject to the following conditions:
9
// The above copyright notice and this permission notice shall be included in all copies or
10
// substantial portions of the Software.
12
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
13
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
14
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
15
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
16
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
17
// DEALINGS IN THE SOFTWARE.
21
namespace ICSharpCode.NRefactory.Editor
24
/// An (Offset,Length)-pair.
26
public interface ISegment
29
/// Gets the start offset of the segment.
34
/// Gets the length of the segment.
36
/// <remarks>For line segments (IDocumentLine), the length does not include the line delimeter.</remarks>
40
/// Gets the end offset of the segment.
42
/// <remarks>EndOffset = Offset + Length;</remarks>
43
int EndOffset { get; }
47
/// Extension methods for <see cref="ISegment"/>.
49
public static class ISegmentExtensions
52
/// Gets whether <paramref name="segment"/> fully contains the specified segment.
55
/// Use <c>segment.Contains(offset, 0)</c> to detect whether a segment (end inclusive) contains offset;
56
/// use <c>segment.Contains(offset, 1)</c> to detect whether a segment (end exclusive) contains offset.
58
public static bool Contains (this ISegment segment, int offset, int length)
60
return segment.Offset <= offset && offset + length <= segment.EndOffset;
64
/// Gets whether <paramref name="thisSegment"/> fully contains the specified segment.
66
public static bool Contains (this ISegment thisSegment, ISegment segment)
68
return segment != null && thisSegment.Offset <= segment.Offset && segment.EndOffset <= thisSegment.EndOffset;