diff options
Diffstat (limited to 'main/src/core/MonoDevelop.Core/MonoDevelop.Core.Text/ITextSourceVersion.cs')
-rw-r--r-- | main/src/core/MonoDevelop.Core/MonoDevelop.Core.Text/ITextSourceVersion.cs | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Text/ITextSourceVersion.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Text/ITextSourceVersion.cs new file mode 100644 index 0000000000..e63b8214fd --- /dev/null +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Text/ITextSourceVersion.cs @@ -0,0 +1,74 @@ +// +// ITextSourceVersion.cs +// +// Author: +// Mike Krüger <mkrueger@xamarin.com> +// +// Copyright (c) 2014 Xamarin Inc. (http://xamarin.com) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +using System.Collections.Generic; + +namespace MonoDevelop.Core.Text +{ + /// <summary> + /// Represents a version identifier for a text source. + /// </summary> + /// <remarks> + /// Verions can be used to efficiently detect whether a document has changed and needs reparsing; + /// or even to implement incremental parsers. + /// It is a separate class from ITextSource to allow the GC to collect the text source while + /// the version checkpoint is still in use. + /// </remarks> + public interface ITextSourceVersion + { + /// <summary> + /// Gets whether this checkpoint belongs to the same document as the other checkpoint. + /// </summary> + /// <remarks> + /// Returns false when given <c>null</c>. + /// </remarks> + bool BelongsToSameDocumentAs (ITextSourceVersion other); + + /// <summary> + /// Compares the age of this checkpoint to the other checkpoint. + /// </summary> + /// <remarks>This method is thread-safe.</remarks> + /// <exception cref="ArgumentException">Raised if 'other' belongs to a different document than this version.</exception> + /// <returns>-1 if this version is older than <paramref name="other"/>. + /// 0 if <c>this</c> version instance represents the same version as <paramref name="other"/>. + /// 1 if this version is newer than <paramref name="other"/>.</returns> + int CompareAge (ITextSourceVersion other); + + /// <summary> + /// Gets the changes from this checkpoint to the other checkpoint. + /// If 'other' is older than this checkpoint, reverse changes are calculated. + /// </summary> + /// <remarks>This method is thread-safe.</remarks> + /// <exception cref="ArgumentException">Raised if 'other' belongs to a different document than this checkpoint.</exception> + IEnumerable<TextChangeEventArgs> GetChangesTo (ITextSourceVersion other); + + /// <summary> + /// Calculates where the offset has moved in the other buffer version. + /// </summary> + /// <exception cref="ArgumentException">Raised if 'other' belongs to a different document than this checkpoint.</exception> + int MoveOffsetTo (ITextSourceVersion other, int oldOffset); + } +} |