| //===-- HeaderMapCoolector.h - find all symbols------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "HeaderMapCollector.h" |
| #include "llvm/Support/Regex.h" |
| |
| namespace clang { |
| namespace find_all_symbols { |
| |
| HeaderMapCollector::HeaderMapCollector( |
| const RegexHeaderMap *RegexHeaderMappingTable) { |
| assert(RegexHeaderMappingTable); |
| this->RegexHeaderMappingTable.reserve(RegexHeaderMappingTable->size()); |
| for (const auto &Entry : *RegexHeaderMappingTable) { |
| this->RegexHeaderMappingTable.emplace_back(llvm::Regex(Entry.first), |
| Entry.second); |
| } |
| } |
| |
| llvm::StringRef |
| HeaderMapCollector::getMappedHeader(llvm::StringRef Header) const { |
| auto Iter = HeaderMappingTable.find(Header); |
| if (Iter != HeaderMappingTable.end()) |
| return Iter->second; |
| // If there is no complete header name mapping for this header, check the |
| // regex header mapping. |
| for (auto &Entry : RegexHeaderMappingTable) { |
| #ifndef NDEBUG |
| std::string Dummy; |
| assert(Entry.first.isValid(Dummy) && "Regex should never be invalid!"); |
| #endif |
| if (Entry.first.match(Header)) |
| return Entry.second; |
| } |
| return Header; |
| } |
| |
| } // namespace find_all_symbols |
| } // namespace clang |