diff options
author | Mike Krüger <mkrueger@xamarin.com> | 2011-11-09 17:58:38 +0400 |
---|---|---|
committer | Mike Krüger <mkrueger@xamarin.com> | 2011-11-09 18:07:22 +0400 |
commit | 63a2069ad92ea0836adf4a6d5a5d401aee510a31 (patch) | |
tree | 91c44702ef03b03311821f22845f8c03d0c2000e /main/src/core | |
parent | 00f53d719bf6313272333e719fc5083b8aa23d75 (diff) |
[TextEditor] Fixed bug in segment tree (Part of "Bug 1963 - Replacing
collapsed code acts strangely").
Diffstat (limited to 'main/src/core')
-rw-r--r-- | main/src/core/Mono.Texteditor/Mono.TextEditor/SegmentTree.cs | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/main/src/core/Mono.Texteditor/Mono.TextEditor/SegmentTree.cs b/main/src/core/Mono.Texteditor/Mono.TextEditor/SegmentTree.cs index 51c01508bb..28649d0e9a 100644 --- a/main/src/core/Mono.Texteditor/Mono.TextEditor/SegmentTree.cs +++ b/main/src/core/Mono.Texteditor/Mono.TextEditor/SegmentTree.cs @@ -84,7 +84,7 @@ namespace Mono.TextEditor } int delta = (e.Value != null ? e.Value.Length : 0) - e.Count; foreach (var segment in new List<T> (GetSegmentsOverlapping (e.Offset, e.Count))) { - if (segment.Offset <= e.Offset) { + if (segment.Offset < e.Offset) { if (segment.EndOffset >= e.Offset + e.Count) { segment.Length += delta; } else { @@ -95,14 +95,12 @@ namespace Mono.TextEditor } int remainingLength = segment.EndOffset - (e.Offset + e.Count); Remove (segment); - if (remainingLength > 0) { segment.Offset = e.Offset + e.Count; segment.Length = remainingLength; Add (segment); } } - var next = SearchFirstSegmentWithStartAfter (e.Offset + 1); if (next != null) { @@ -215,6 +213,11 @@ namespace Mono.TextEditor this.start = start; this.end = end; } + + public override string ToString () + { + return string.Format ("[Interval: start={0},end={1}]", start, end); + } } public IEnumerable<T> GetSegmentsOverlapping (int offset, int length) @@ -245,7 +248,7 @@ namespace Mono.TextEditor if (nodeEnd < 0) continue; - if (nodeStart <= node.Length) + if (nodeStart <= node.Length) yield return (T)node; if (node.right != null) |