From a3d823336a4953ee1f06a9a2dea17cdf69081640 Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Fri, 13 May 2016 09:27:54 +0000 Subject: [include-fixer] Rename XrefsDB to SymbolIndex. It's not really containing xrefs so the name didn't fit. No functional change. llvm-svn: 269403 --- .../include-fixer/InMemorySymbolIndex.cpp | 47 ++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 clang-tools-extra/include-fixer/InMemorySymbolIndex.cpp (limited to 'clang-tools-extra/include-fixer/InMemorySymbolIndex.cpp') diff --git a/clang-tools-extra/include-fixer/InMemorySymbolIndex.cpp b/clang-tools-extra/include-fixer/InMemorySymbolIndex.cpp new file mode 100644 index 00000000000..388bab20cb1 --- /dev/null +++ b/clang-tools-extra/include-fixer/InMemorySymbolIndex.cpp @@ -0,0 +1,47 @@ +//===-- InMemorySymbolIndex.cpp--------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "InMemorySymbolIndex.h" + +using clang::find_all_symbols::SymbolInfo; + +namespace clang { +namespace include_fixer { + +InMemorySymbolIndex::InMemorySymbolIndex( + const std::map> &LookupTable) { + for (const auto &Entry : LookupTable) { + llvm::StringRef Identifier(Entry.first); + llvm::SmallVector Names; + Identifier.split(Names, "::"); + for (const auto &Header : Entry.second) { + std::vector Contexts; + for (auto IdentiferContext = Names.rbegin() + 1; + IdentiferContext != Names.rend(); ++IdentiferContext) { + Contexts.emplace_back(SymbolInfo::ContextType::Namespace, + *IdentiferContext); + } + + SymbolInfo Symbol(Names.back(), SymbolInfo::SymbolKind::Class, Header, + Contexts, 1); + this->LookupTable[Symbol.getName()].push_back(Symbol); + } + } +} + +std::vector +InMemorySymbolIndex::search(llvm::StringRef Identifier) { + auto I = LookupTable.find(Identifier); + if (I != LookupTable.end()) + return I->second; + return {}; +} + +} // namespace include_fixer +} // namespace clang -- cgit v1.2.3