143356f56SNico Weber //===-- HeaderMapCoolector.h - find all symbols------------------*- C++ -*-===// 243356f56SNico Weber // 343356f56SNico Weber // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 443356f56SNico Weber // See https://llvm.org/LICENSE.txt for license information. 543356f56SNico Weber // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 643356f56SNico Weber // 743356f56SNico Weber //===----------------------------------------------------------------------===// 843356f56SNico Weber 943356f56SNico Weber #ifndef LLVM_CLANG_TOOLS_EXTRA_FIND_ALL_SYMBOLS_HEADER_MAP_COLLECTOR_H 1043356f56SNico Weber #define LLVM_CLANG_TOOLS_EXTRA_FIND_ALL_SYMBOLS_HEADER_MAP_COLLECTOR_H 1143356f56SNico Weber 1243356f56SNico Weber #include "llvm/ADT/StringMap.h" 1343356f56SNico Weber #include "llvm/Support/Regex.h" 1443356f56SNico Weber #include <string> 1543356f56SNico Weber #include <vector> 1643356f56SNico Weber 1743356f56SNico Weber namespace clang { 1843356f56SNico Weber namespace find_all_symbols { 1943356f56SNico Weber 20282dc72cSDmitri Gribenko /// HeaderMappCollector collects all remapping header files. This maps 2143356f56SNico Weber /// complete header names or header name regex patterns to header names. 2243356f56SNico Weber class HeaderMapCollector { 2343356f56SNico Weber public: 2443356f56SNico Weber typedef llvm::StringMap<std::string> HeaderMap; 2543356f56SNico Weber typedef std::vector<std::pair<const char *, const char *>> RegexHeaderMap; 2643356f56SNico Weber 2743356f56SNico Weber HeaderMapCollector() = default; 2843356f56SNico Weber explicit HeaderMapCollector(const RegexHeaderMap *RegexHeaderMappingTable); 2943356f56SNico Weber addHeaderMapping(llvm::StringRef OrignalHeaderPath,llvm::StringRef MappingHeaderPath)3043356f56SNico Weber void addHeaderMapping(llvm::StringRef OrignalHeaderPath, 3143356f56SNico Weber llvm::StringRef MappingHeaderPath) { 32*adcd0268SBenjamin Kramer HeaderMappingTable[OrignalHeaderPath] = std::string(MappingHeaderPath); 3343356f56SNico Weber }; 3443356f56SNico Weber 3543356f56SNico Weber /// Check if there is a mapping from \p Header or a regex pattern that matches 3643356f56SNico Weber /// it to another header name. 3743356f56SNico Weber /// \param Header A header name. 3843356f56SNico Weber /// \return \p Header itself if there is no mapping for it; otherwise, return 3943356f56SNico Weber /// a mapped header name. 4043356f56SNico Weber llvm::StringRef getMappedHeader(llvm::StringRef Header) const; 4143356f56SNico Weber 4243356f56SNico Weber private: 4343356f56SNico Weber /// A string-to-string map saving the mapping relationship. 4443356f56SNico Weber HeaderMap HeaderMappingTable; 4543356f56SNico Weber 4643356f56SNico Weber // A map from header patterns to header names. 4743356f56SNico Weber // The header names are not owned. This is only threadsafe because the regexes 4843356f56SNico Weber // never fail. 4943356f56SNico Weber mutable std::vector<std::pair<llvm::Regex, const char *>> 5043356f56SNico Weber RegexHeaderMappingTable; 5143356f56SNico Weber }; 5243356f56SNico Weber 5343356f56SNico Weber } // namespace find_all_symbols 5443356f56SNico Weber } // namespace clang 5543356f56SNico Weber 5643356f56SNico Weber #endif // LLVM_CLANG_TOOLS_EXTRA_FIND_ALL_SYMBOLS_HEADER_MAP_COLLECTOR_H 57