10 #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_MEMINDEX_H 11 #define LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_MEMINDEX_H 24 template <
typename SymbolRange,
typename RefRange>
25 MemIndex(SymbolRange &&Symbols, RefRange &&Refs) {
26 for (
const Symbol &S : Symbols)
28 for (
const std::pair<
SymbolID, llvm::ArrayRef<Ref>> &R : Refs)
29 this->Refs.try_emplace(R.first, R.second.begin(), R.second.end());
32 template <
typename SymbolRange,
typename RefRange,
typename Payload>
33 MemIndex(SymbolRange &&Symbols, RefRange &&Refs, Payload &&BackingData,
34 size_t BackingDataSize)
35 :
MemIndex(std::forward<SymbolRange>(Symbols),
36 std::forward<RefRange>(Refs)) {
37 KeepAlive = std::shared_ptr<void>(
38 std::make_shared<Payload>(std::move(BackingData)),
nullptr);
39 this->BackingDataSize = BackingDataSize;
53 llvm::function_ref<
void(
const Ref &)>
Callback)
const override;
59 llvm::DenseMap<SymbolID, const Symbol *> Index;
61 llvm::DenseMap<SymbolID, llvm::ArrayRef<Ref>> Refs;
62 std::shared_ptr<void> KeepAlive;
64 size_t BackingDataSize = 0;
70 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_MEMINDEX_H
void refs(const RefsRequest &Req, llvm::function_ref< void(const Ref &)> Callback) const override
Finds all occurrences (e.g.
Interface for symbol indexes that can be used for searching or matching symbols among a set of symbol...
static std::unique_ptr< SymbolIndex > build(SymbolSlab Symbols, RefSlab Refs)
Builds an index from slabs. The index takes ownership of the data.
MemIndex(SymbolRange &&Symbols, RefRange &&Refs, Payload &&BackingData, size_t BackingDataSize)
llvm::unique_function< void(llvm::Expected< T >)> Callback
A Callback<T> is a void function that accepts Expected<T>.
MemIndex(SymbolRange &&Symbols, RefRange &&Refs)
size_t estimateMemoryUsage() const override
Returns estimated size of index (in bytes).
MemIndex is a naive in-memory index suitable for a small set of symbols.
===– Representation.cpp - ClangDoc Representation --------—*- C++ -*-===//
void lookup(const LookupRequest &Req, llvm::function_ref< void(const Symbol &)> Callback) const override
Looks up symbols with any of the given symbol IDs and applies Callback on each matched symbol...
bool fuzzyFind(const FuzzyFindRequest &Req, llvm::function_ref< void(const Symbol &)> Callback) const override
Matches symbols in the index fuzzily and applies Callback on each matched symbol before returning...