20 #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_DEX_DEX_H
21 #define LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_DEX_DEX_H
28 #include "llvm/ADT/StringSet.h"
38 template <
typename SymbolRange,
typename RefsRange,
typename RelationsRange>
39 Dex(SymbolRange &&Symbols, RefsRange &&Refs, RelationsRange &&Relations)
41 for (
auto &&Sym : Symbols)
42 this->Symbols.push_back(&Sym);
43 for (
auto &&
Ref : Refs)
44 this->Refs.try_emplace(
Ref.first,
Ref.second);
45 for (
auto &&Rel : Relations)
46 this->Relations[std::make_pair(Rel.Subject,
47 static_cast<uint8_t
>(Rel.Predicate))]
48 .push_back(Rel.Object);
52 template <
typename SymbolRange,
typename RefsRange,
typename RelationsRange,
54 Dex(SymbolRange &&Symbols, RefsRange &&Refs, RelationsRange &&Relations,
55 Payload &&BackingData,
size_t BackingDataSize)
56 :
Dex(std::forward<SymbolRange>(Symbols), std::forward<RefsRange>(Refs),
57 std::forward<RelationsRange>(Relations)) {
58 KeepAlive = std::shared_ptr<void>(
59 std::make_shared<Payload>(std::move(BackingData)),
nullptr);
60 this->BackingDataSize = BackingDataSize;
63 template <
typename SymbolRange,
typename RefsRange,
typename RelationsRange,
64 typename FileRange,
typename Payload>
65 Dex(SymbolRange &&Symbols, RefsRange &&Refs, RelationsRange &&Relations,
67 size_t BackingDataSize)
68 :
Dex(std::forward<SymbolRange>(Symbols), std::forward<RefsRange>(Refs),
69 std::forward<RelationsRange>(Relations),
70 std::forward<
Payload>(BackingData), BackingDataSize) {
71 this->Files = std::forward<FileRange>(Files);
72 this->IdxContents = IdxContents;
86 llvm::function_ref<
void(
const Ref &)>
Callback)
const override;
99 std::unique_ptr<Iterator> iterator(
const Token &Tok)
const;
100 std::unique_ptr<Iterator>
101 createFileProximityIterator(llvm::ArrayRef<std::string> ProximityPaths)
const;
102 std::unique_ptr<Iterator>
103 createTypeBoostingIterator(llvm::ArrayRef<std::string> Types)
const;
106 std::vector<const Symbol *> Symbols;
108 std::vector<float> SymbolQuality;
109 llvm::DenseMap<SymbolID, const Symbol *> LookupTable;
116 llvm::DenseMap<Token, PostingList> InvertedIndex;
118 llvm::DenseMap<SymbolID, llvm::ArrayRef<Ref>> Refs;
120 "RelationKind should be of same size as a uint8_t");
121 llvm::DenseMap<std::pair<SymbolID, uint8_t>, std::vector<SymbolID>> Relations;
122 std::shared_ptr<void> KeepAlive;
124 llvm::StringSet<> Files;
128 size_t BackingDataSize = 0;
141 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_DEX_DEX_H