/* * HashSet<DocumentLine> deletedLines = new HashSet<DocumentLine>(); * readonly HashSet<DocumentLine> changedLines = new HashSet<DocumentLine>(); * HashSet<DocumentLine> deletedOrChangedLines = new HashSet<DocumentLine>(); * * /// <summary> * /// Gets the list of lines deleted since the last RetrieveChangedLines() call. * /// The returned list is unsorted. * /// </summary> * public ICollection<DocumentLine> RetrieveDeletedLines() * { * var r = deletedLines; * deletedLines = new HashSet<DocumentLine>(); * return r; * } * * /// <summary> * /// Gets the list of lines changed since the last RetrieveChangedLines() call. * /// The returned list is sorted by line number and does not contain deleted lines. * /// </summary> * public List<DocumentLine> RetrieveChangedLines() * { * var list = (from line in changedLines * where !line.IsDeleted * let number = line.LineNumber * orderby number * select line).ToList(); * changedLines.Clear(); * return list; * } * * /// <summary> * /// Gets the list of lines changed since the last RetrieveDeletedOrChangedLines() call. * /// The returned list is not sorted. * /// </summary> * public ICollection<DocumentLine> RetrieveDeletedOrChangedLines() * { * var r = deletedOrChangedLines; * deletedOrChangedLines = new HashSet<DocumentLine>(); * return r; * } */ #endregion #region Rebuild public void Rebuild() { // keep the first document line DocumentLine ls = documentLineTree.GetByNumber(1); SimpleSegment ds = NewLineFinder.NextNewLine(document, 0); List <DocumentLine> lines = new List <DocumentLine>(); int lastDelimiterEnd = 0; while (ds != SimpleSegment.Invalid) { ls.TotalLength = ds.Offset + ds.Length - lastDelimiterEnd; ls.DelimiterLength = ds.Length; lastDelimiterEnd = ds.Offset + ds.Length; lines.Add(ls); ls = new DocumentLine(document); ds = NewLineFinder.NextNewLine(document, lastDelimiterEnd); } ls.ResetLine(); ls.TotalLength = document.TextLength - lastDelimiterEnd; lines.Add(ls); documentLineTree.RebuildTree(lines); foreach (ILineTracker lineTracker in lineTrackers) { lineTracker.RebuildDocument(); } }
/* * HashSet<DocumentLine> deletedLines = new HashSet<DocumentLine>(); * readonly HashSet<DocumentLine> changedLines = new HashSet<DocumentLine>(); * HashSet<DocumentLine> deletedOrChangedLines = new HashSet<DocumentLine>(); * * /// <summary> * /// Gets the list of lines deleted since the last RetrieveChangedLines() call. * /// The returned list is unsorted. * /// </summary> * public ICollection<DocumentLine> RetrieveDeletedLines() * { * var r = deletedLines; * deletedLines = new HashSet<DocumentLine>(); * return r; * } * * /// <summary> * /// Gets the list of lines changed since the last RetrieveChangedLines() call. * /// The returned list is sorted by line number and does not contain deleted lines. * /// </summary> * public List<DocumentLine> RetrieveChangedLines() * { * var list = (from line in changedLines * where !line.IsDeleted * let number = line.LineNumber * orderby number * select line).ToList(); * changedLines.Clear(); * return list; * } * * /// <summary> * /// Gets the list of lines changed since the last RetrieveDeletedOrChangedLines() call. * /// The returned list is not sorted. * /// </summary> * public ICollection<DocumentLine> RetrieveDeletedOrChangedLines() * { * var r = deletedOrChangedLines; * deletedOrChangedLines = new HashSet<DocumentLine>(); * return r; * } */ #endregion #region Rebuild public void Rebuild() { // keep the first document line DocumentLine ls = documentLineTree.GetByNumber(1); // but mark all other lines as deleted, and detach them from the other nodes for (DocumentLine line = ls.NextLine; line != null; line = line.NextLine) { line.isDeleted = true; line.parent = line.left = line.right = null; } // Reset the first line to detach it from the deleted lines ls.ResetLine(); SimpleSegment ds = NewLineFinder.NextNewLine(document, 0); List <DocumentLine> lines = new List <DocumentLine>(); int lastDelimiterEnd = 0; while (ds != SimpleSegment.Invalid) { ls.TotalLength = ds.Offset + ds.Length - lastDelimiterEnd; ls.DelimiterLength = ds.Length; lastDelimiterEnd = ds.Offset + ds.Length; lines.Add(ls); ls = new DocumentLine(document); ds = NewLineFinder.NextNewLine(document, lastDelimiterEnd); } ls.TotalLength = document.TextLength - lastDelimiterEnd; lines.Add(ls); documentLineTree.RebuildTree(lines); foreach (ILineTracker lineTracker in lineTrackers) { lineTracker.RebuildDocument(); } }
/* HashSet<DocumentLine> deletedLines = new HashSet<DocumentLine>(); readonly HashSet<DocumentLine> changedLines = new HashSet<DocumentLine>(); HashSet<DocumentLine> deletedOrChangedLines = new HashSet<DocumentLine>(); /// <summary> /// Gets the list of lines deleted since the last RetrieveChangedLines() call. /// The returned list is unsorted. /// </summary> public ICollection<DocumentLine> RetrieveDeletedLines() { var r = deletedLines; deletedLines = new HashSet<DocumentLine>(); return r; } /// <summary> /// Gets the list of lines changed since the last RetrieveChangedLines() call. /// The returned list is sorted by line number and does not contain deleted lines. /// </summary> public List<DocumentLine> RetrieveChangedLines() { var list = (from line in changedLines where !line.IsDeleted let number = line.LineNumber orderby number select line).ToList(); changedLines.Clear(); return list; } /// <summary> /// Gets the list of lines changed since the last RetrieveDeletedOrChangedLines() call. /// The returned list is not sorted. /// </summary> public ICollection<DocumentLine> RetrieveDeletedOrChangedLines() { var r = deletedOrChangedLines; deletedOrChangedLines = new HashSet<DocumentLine>(); return r; } */ #endregion #region Rebuild public void Rebuild() { // keep the first document line DocumentLine ls = documentLineTree.GetByNumber(1); SimpleSegment ds = NewLineFinder.NextNewLine(document, 0); List<DocumentLine> lines = new List<DocumentLine>(); int lastDelimiterEnd = 0; while (ds != SimpleSegment.Invalid) { ls.TotalLength = ds.Offset + ds.Length - lastDelimiterEnd; ls.DelimiterLength = ds.Length; lastDelimiterEnd = ds.Offset + ds.Length; lines.Add(ls); ls = new DocumentLine(document); ds = NewLineFinder.NextNewLine(document, lastDelimiterEnd); } ls.ResetLine(); ls.TotalLength = document.TextLength - lastDelimiterEnd; lines.Add(ls); documentLineTree.RebuildTree(lines); foreach (ILineTracker lineTracker in lineTrackers) lineTracker.RebuildDocument(); }