- //===--- HeaderInclude.h - Header Include -----------------------*- C++ -*-===// 
- // 
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 
- // See https://llvm.org/LICENSE.txt for license information. 
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 
- // 
- //===----------------------------------------------------------------------===// 
- /// 
- /// \file 
- /// Defines enums used when emitting included header information. 
- /// 
- //===----------------------------------------------------------------------===// 
-   
- #ifndef LLVM_CLANG_BASIC_HEADERINCLUDEFORMATKIND_H 
- #define LLVM_CLANG_BASIC_HEADERINCLUDEFORMATKIND_H 
- #include "llvm/ADT/StringSwitch.h" 
- #include "llvm/Support/ErrorHandling.h" 
- #include <utility> 
-   
- namespace clang { 
- /// The format in which header information is emitted. 
- enum HeaderIncludeFormatKind { HIFMT_None, HIFMT_Textual, HIFMT_JSON }; 
-   
- /// Whether header information is filtered or not. If HIFIL_Only_Direct_System 
- /// is used, only information on system headers directly included from 
- /// non-system headers is emitted. 
- enum HeaderIncludeFilteringKind { HIFIL_None, HIFIL_Only_Direct_System }; 
-   
- inline HeaderIncludeFormatKind 
- stringToHeaderIncludeFormatKind(const char *Str) { 
-   return llvm::StringSwitch<HeaderIncludeFormatKind>(Str) 
-       .Case("textual", HIFMT_Textual) 
-       .Case("json", HIFMT_JSON) 
-       .Default(HIFMT_None); 
- } 
-   
- inline bool stringToHeaderIncludeFiltering(const char *Str, 
-                                            HeaderIncludeFilteringKind &Kind) { 
-   std::pair<bool, HeaderIncludeFilteringKind> P = 
-       llvm::StringSwitch<std::pair<bool, HeaderIncludeFilteringKind>>(Str) 
-           .Case("none", {true, HIFIL_None}) 
-           .Case("only-direct-system", {true, HIFIL_Only_Direct_System}) 
-           .Default({false, HIFIL_None}); 
-   Kind = P.second; 
-   return P.first; 
- } 
-   
- inline const char *headerIncludeFormatKindToString(HeaderIncludeFormatKind K) { 
-   switch (K) { 
-   case HIFMT_None: 
-     llvm_unreachable("unexpected format kind"); 
-   case HIFMT_Textual: 
-     return "textual"; 
-   case HIFMT_JSON: 
-     return "json"; 
-   } 
-   llvm_unreachable("Unknown HeaderIncludeFormatKind enum"); 
- } 
-   
- inline const char * 
- headerIncludeFilteringKindToString(HeaderIncludeFilteringKind K) { 
-   switch (K) { 
-   case HIFIL_None: 
-     return "none"; 
-   case HIFIL_Only_Direct_System: 
-     return "only-direct-system"; 
-   } 
-   llvm_unreachable("Unknown HeaderIncludeFilteringKind enum"); 
- } 
-   
- } // end namespace clang 
-   
- #endif // LLVM_CLANG_BASIC_HEADERINCLUDEFORMATKIND_H 
-