1 //===--- Merge.h -------------------------------------------------*- C++-*-===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_MERGE_H
10 #define LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_MERGE_H
12 #include "index/Index.h"
17 // Merge symbols L and R, preferring data from L in case of conflict.
18 // The two symbols must have the same ID.
19 // Returned symbol may contain data owned by either source.
20 Symbol
mergeSymbol(const Symbol
&L
, const Symbol
&R
);
22 // MergedIndex is a composite index based on two provided Indexes:
23 // - the Dynamic index covers few files, but is relatively up-to-date.
24 // - the Static index covers a bigger set of files, but is relatively stale.
25 // The returned index attempts to combine results, and avoid duplicates.
26 class MergedIndex
: public SymbolIndex
{
27 const SymbolIndex
*Dynamic
, *Static
;
30 // The constructor does not access the symbols.
31 // It's safe to inherit from this class and pass pointers to derived members.
32 MergedIndex(const SymbolIndex
*Dynamic
, const SymbolIndex
*Static
)
33 : Dynamic(Dynamic
), Static(Static
) {}
35 bool fuzzyFind(const FuzzyFindRequest
&,
36 llvm::function_ref
<void(const Symbol
&)>) const override
;
37 void lookup(const LookupRequest
&,
38 llvm::function_ref
<void(const Symbol
&)>) const override
;
39 bool refs(const RefsRequest
&,
40 llvm::function_ref
<void(const Ref
&)>) const override
;
41 void relations(const RelationsRequest
&,
42 llvm::function_ref
<void(const SymbolID
&, const Symbol
&)>)
44 llvm::unique_function
<IndexContents(llvm::StringRef
) const>
45 indexedFiles() const override
;
46 size_t estimateMemoryUsage() const override
{
47 return Dynamic
->estimateMemoryUsage() + Static
->estimateMemoryUsage();
54 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_MERGE_H