public ImmutableArray <DynamicAnalysisSpan> GetSpans(BlobHandle handle) { if (handle.IsNil) { return(ImmutableArray <DynamicAnalysisSpan> .Empty); } var builder = ArrayBuilder <DynamicAnalysisSpan> .GetInstance(); var reader = GetBlobReader(handle); // header: int documentRowId = ReadDocumentRowId(ref reader); int previousStartLine = -1; ushort previousStartColumn = 0; // records: while (reader.RemainingBytes > 0) { int deltaLines, deltaColumns; ReadDeltaLinesAndColumns(ref reader, out deltaLines, out deltaColumns); // document: if (deltaLines == 0 && deltaColumns == 0) { documentRowId = ReadDocumentRowId(ref reader); continue; } int startLine; ushort startColumn; // delta Start Line & Column: if (previousStartLine < 0) { Debug.Assert(previousStartColumn == 0); startLine = ReadLine(ref reader); startColumn = ReadColumn(ref reader); } else { startLine = AddLines(previousStartLine, reader.ReadCompressedSignedInteger()); startColumn = AddColumns(previousStartColumn, reader.ReadCompressedSignedInteger()); } previousStartLine = startLine; previousStartColumn = startColumn; int endLine = AddLines(startLine, deltaLines); int endColumn = AddColumns(startColumn, deltaColumns); var linePositionSpan = new DynamicAnalysisSpan(documentRowId, startLine, startColumn, endLine, endColumn); builder.Add(linePositionSpan); } return(builder.ToImmutableAndFree()); }
public ImmutableArray<DynamicAnalysisSpan> GetSpans(BlobHandle handle) { if (handle.IsNil) { return ImmutableArray<DynamicAnalysisSpan>.Empty; } var builder = ArrayBuilder<DynamicAnalysisSpan>.GetInstance(); var reader = GetBlobReader(handle); // header: int documentRowId = ReadDocumentRowId(ref reader); int previousStartLine = -1; ushort previousStartColumn = 0; // records: while (reader.RemainingBytes > 0) { int deltaLines, deltaColumns; ReadDeltaLinesAndColumns(ref reader, out deltaLines, out deltaColumns); // document: if (deltaLines == 0 && deltaColumns == 0) { documentRowId = ReadDocumentRowId(ref reader); continue; } int startLine; ushort startColumn; // delta Start Line & Column: if (previousStartLine < 0) { Debug.Assert(previousStartColumn == 0); startLine = ReadLine(ref reader); startColumn = ReadColumn(ref reader); } else { startLine = AddLines(previousStartLine, reader.ReadCompressedSignedInteger()); startColumn = AddColumns(previousStartColumn, reader.ReadCompressedSignedInteger()); } previousStartLine = startLine; previousStartColumn = startColumn; int endLine = AddLines(startLine, deltaLines); int endColumn = AddColumns(startColumn, deltaColumns); var linePositionSpan = new DynamicAnalysisSpan(documentRowId, startLine, startColumn, endLine, endColumn); builder.Add(linePositionSpan); } return builder.ToImmutableAndFree(); }