示例#1
0
        public override List <FilePositionSpan> Search(SearchContentsData searchContentsData)
        {
            if (ReferenceEquals(this, _empty))
            {
                return(NoSpans);
            }
            // TODO(rpaquay): Maybe we will need this someday. For now, we use this class only for empty file content placeholder.
            throw new NotImplementedException();
#if false
            Logger.Log("Searching file contents");
            List <FilePositionSpan> result = null;
            var index = 0;
            while (true)
            {
                var newIndex = _text.IndexOf(searchContentsData.Text, index, StringComparison.Ordinal);
                if (newIndex < 0)
                {
                    break;
                }

                if (result == null)
                {
                    result = new List <FilePositionSpan>();
                }
                result.Add(newIndex);
                index = newIndex + searchContentsData.Text.Length;
            }
            return(result ?? NoPositions);
#endif
        }
示例#2
0
        public override List <FilePositionSpan> Search(SearchContentsData searchContentsData)
        {
            if (searchContentsData.ParsedSearchString.MainEntry.Text.Length > ByteLength)
            {
                return(NoSpans);
            }

            var algo = searchContentsData.GetSearchAlgorithms(searchContentsData.ParsedSearchString.MainEntry).AsciiStringSearchAlgo;
            // TODO(rpaquay): We are limited to 2GB for now.
            var result = algo.SearchAll(Pointer, (int)ByteLength);

            if (searchContentsData.ParsedSearchString.EntriesBeforeMainEntry.Count == 0 &&
                searchContentsData.ParsedSearchString.EntriesAfterMainEntry.Count == 0)
            {
                return(result.ToList());
            }

            return(FilterOnOtherEntries(searchContentsData, result).ToList());
        }
示例#3
0
        private IEnumerable <FilePositionSpan> FilterOnOtherEntries(SearchContentsData searchContentsData, IEnumerable <FilePositionSpan> matches)
        {
            FindEntryFunction findEntry = (position, length, entry) => {
                var algo   = searchContentsData.GetSearchAlgorithms(entry).AsciiStringSearchAlgo;
                var start  = Pointers.AddPtr(this.Pointer, position);
                var result = algo.Search(start, length);
                if (result == IntPtr.Zero)
                {
                    return(-1);
                }
                return(position + Pointers.Offset32(start, result));
            };
            GetLineExtentFunction getLineExtent = position => {
                int lineStart;
                int lineLength;
                NativeMethods.Ascii_GetLineExtentFromPosition(this.Pointer, (int)this.CharacterCount, position, out lineStart, out lineLength);
                return(new FilePositionSpan {
                    Position = lineStart, Length = lineLength
                });
            };

            return(new TextSourceTextSearch(getLineExtent, findEntry).FilterOnOtherEntries(searchContentsData.ParsedSearchString, matches));
        }
示例#4
0
 public virtual List <FilePositionSpan> Search(SearchContentsData searchContentsData)
 {
     return(NoSpans);
 }