1*43356f56SNico Weber //===-- HeaderMapCoolector.h - find all symbols------------------*- C++ -*-===// 2*43356f56SNico Weber // 3*43356f56SNico Weber // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*43356f56SNico Weber // See https://llvm.org/LICENSE.txt for license information. 5*43356f56SNico Weber // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*43356f56SNico Weber // 7*43356f56SNico Weber //===----------------------------------------------------------------------===// 8*43356f56SNico Weber 9*43356f56SNico Weber #include "HeaderMapCollector.h" 10*43356f56SNico Weber #include "llvm/Support/Regex.h" 11*43356f56SNico Weber 12*43356f56SNico Weber namespace clang { 13*43356f56SNico Weber namespace find_all_symbols { 14*43356f56SNico Weber HeaderMapCollector(const RegexHeaderMap * RegexHeaderMappingTable)15*43356f56SNico WeberHeaderMapCollector::HeaderMapCollector( 16*43356f56SNico Weber const RegexHeaderMap *RegexHeaderMappingTable) { 17*43356f56SNico Weber assert(RegexHeaderMappingTable); 18*43356f56SNico Weber this->RegexHeaderMappingTable.reserve(RegexHeaderMappingTable->size()); 19*43356f56SNico Weber for (const auto &Entry : *RegexHeaderMappingTable) { 20*43356f56SNico Weber this->RegexHeaderMappingTable.emplace_back(llvm::Regex(Entry.first), 21*43356f56SNico Weber Entry.second); 22*43356f56SNico Weber } 23*43356f56SNico Weber } 24*43356f56SNico Weber 25*43356f56SNico Weber llvm::StringRef getMappedHeader(llvm::StringRef Header) const26*43356f56SNico WeberHeaderMapCollector::getMappedHeader(llvm::StringRef Header) const { 27*43356f56SNico Weber auto Iter = HeaderMappingTable.find(Header); 28*43356f56SNico Weber if (Iter != HeaderMappingTable.end()) 29*43356f56SNico Weber return Iter->second; 30*43356f56SNico Weber // If there is no complete header name mapping for this header, check the 31*43356f56SNico Weber // regex header mapping. 32*43356f56SNico Weber for (auto &Entry : RegexHeaderMappingTable) { 33*43356f56SNico Weber #ifndef NDEBUG 34*43356f56SNico Weber std::string Dummy; 35*43356f56SNico Weber assert(Entry.first.isValid(Dummy) && "Regex should never be invalid!"); 36*43356f56SNico Weber #endif 37*43356f56SNico Weber if (Entry.first.match(Header)) 38*43356f56SNico Weber return Entry.second; 39*43356f56SNico Weber } 40*43356f56SNico Weber return Header; 41*43356f56SNico Weber } 42*43356f56SNico Weber 43*43356f56SNico Weber } // namespace find_all_symbols 44*43356f56SNico Weber } // namespace clang 45