Index: clang-tools-extra/clangd/index/dex/Iterator.h =================================================================== --- clang-tools-extra/clangd/index/dex/Iterator.h +++ clang-tools-extra/clangd/index/dex/Iterator.h @@ -101,9 +101,12 @@ virtual llvm::raw_ostream &dump(llvm::raw_ostream &OS) const = 0; }; -/// Exhausts given iterator and returns all processed DocIDs. The result -/// contains sorted DocumentIDs. -std::vector consume(Iterator &It); +/// Advances the iterator until it is either exhausted or the number of +/// requested items is reached. The result contains sorted DocumentIDs. Size of +/// the returned vector is min(Limit, IteratorSize) where IteratorSize stands +/// for the number of elements obtained before the iterator is exhausted. +std::vector consume(Iterator &It, + size_t Limit = std::numeric_limits::max()); /// Returns a document iterator over given PostingList. std::unique_ptr create(PostingListRef Documents); Index: clang-tools-extra/clangd/index/dex/Iterator.cpp =================================================================== --- clang-tools-extra/clangd/index/dex/Iterator.cpp +++ clang-tools-extra/clangd/index/dex/Iterator.cpp @@ -218,9 +218,10 @@ } // end namespace -std::vector consume(Iterator &It) { +std::vector consume(Iterator &It, size_t Limit) { std::vector Result; - for (; !It.reachedEnd(); It.advance()) + for (size_t Retreived = 0; !It.reachedEnd() && Retreived < Limit; + It.advance()) Result.push_back(It.peek()); return Result; }