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-exception
6//
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(n: RegexHeaderMappingTable->size());
19 for (const auto &Entry : *RegexHeaderMappingTable) {
20 this->RegexHeaderMappingTable.emplace_back(args: llvm::Regex(Entry.first),
21 args: Entry.second);
22 }
23}
24
25llvm::StringRef
26HeaderMapCollector::getMappedHeader(llvm::StringRef Header) const {
27 auto Iter = HeaderMappingTable.find(Key: Header);
28 if (Iter != HeaderMappingTable.end())
29 return Iter->second;
30 // If there is no complete header name mapping for this header, check the
31 // regex header mapping.
32 for (auto &Entry : RegexHeaderMappingTable) {
33#ifndef NDEBUG
34 std::string Dummy;
35 assert(Entry.first.isValid(Dummy) && "Regex should never be invalid!");
36#endif
37 if (Entry.first.match(String: Header))
38 return Entry.second;
39 }
40 return Header;
41}
42
43} // namespace find_all_symbols
44} // namespace clang
45

source code of clang-tools-extra/clang-include-fixer/find-all-symbols/HeaderMapCollector.cpp