private IEnumerable <SearchResult> SearchContentInFile(FileInfo file, IContentSelector contentSelector) { int lineNumber = 1; foreach (string line in File.ReadLines(file.FullName)) { if (_cancellationTokenSource.IsCancellationRequested) { yield break; } List <MatchPosition> matches = contentSelector.GetMatches(line).ToList(); if (matches.Count > 0) { yield return(new SearchResult(file, lineNumber, line, file.LastWriteTime.Ticks, matches)); } ++lineNumber; } }
private List <LineInfo> GetMatchesInContent(CachedFileContent fileContent, IContentSelector contentSelector, int lineMin, int lineMax) { List <LineInfo> lineInfos = new List <LineInfo>(); var index = 1; foreach (string line in fileContent.Content) { if (index >= lineMin && index <= lineMax) { LineInfo lineInfo = fileContent.GetCachedLinfoForLine(index - 1); if (lineInfo == null) { lineInfo = new LineInfo(line, index, contentSelector.GetMatches(line).OrderBy(l => l.Begin).ToList()); fileContent.SetCachedLinfoForLine(index - 1, lineInfo); } lineInfos.Add(lineInfo); } ++index; } return(lineInfos); }