45 lines · cpp
1//===-- HeaderMapCoolector.h - find all symbols------------------*- C++ -*-===//2//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-exception6//7//===----------------------------------------------------------------------===//8 9#include "HeaderMapCollector.h"10#include "llvm/Support/Regex.h"11 12namespace clang {13namespace find_all_symbols {14 15HeaderMapCollector::HeaderMapCollector(16 const RegexHeaderMap *RegexHeaderMappingTable) {17 assert(RegexHeaderMappingTable);18 this->RegexHeaderMappingTable.reserve(RegexHeaderMappingTable->size());19 for (const auto &Entry : *RegexHeaderMappingTable) {20 this->RegexHeaderMappingTable.emplace_back(llvm::Regex(Entry.first),21 Entry.second);22 }23}24 25llvm::StringRef26HeaderMapCollector::getMappedHeader(llvm::StringRef Header) const {27 auto Iter = HeaderMappingTable.find(Header);28 if (Iter != HeaderMappingTable.end())29 return Iter->second;30 // If there is no complete header name mapping for this header, check the31 // regex header mapping.32 for (auto &Entry : RegexHeaderMappingTable) {33#ifndef NDEBUG34 std::string Dummy;35 assert(Entry.first.isValid(Dummy) && "Regex should never be invalid!");36#endif37 if (Entry.first.match(Header))38 return Entry.second;39 }40 return Header;41}42 43} // namespace find_all_symbols44} // namespace clang45