13#ifndef LLVM_ADT_STRINGSWITCH_H 
   14#define LLVM_ADT_STRINGSWITCH_H 
   20#include <initializer_list> 
   46template<
typename T, 
typename R = T>
 
   53  std::optional<T> Result;
 
   57  : Str(S), Result() { }
 
 
   75    if (!Result && Str.ends_with(S)) {
 
   76      Result = std::move(
Value);
 
 
   82    if (!Result && Str.starts_with(S)) {
 
   83      Result = std::move(
Value);
 
 
   90    return CasesImpl(CaseStrings, 
Value);
 
 
   93  [[deprecated(
"Pass cases in std::initializer_list instead")]]
 
   95    return CasesImpl({S0, 
S1}, 
Value);
 
 
   98  [[deprecated(
"Pass cases in std::initializer_list instead")]]
 
  101    return CasesImpl({S0, 
S1, S2}, 
Value);
 
 
  104  [[deprecated(
"Pass cases in std::initializer_list instead")]]
 
  107    return CasesImpl({S0, 
S1, S2, S3}, 
Value);
 
 
  110  [[deprecated(
"Pass cases in std::initializer_list instead")]]
 
  113    return CasesImpl({S0, 
S1, S2, S3, S4}, 
Value);
 
 
  116  [[deprecated(
"Pass cases in std::initializer_list instead")]]
 
  120    return CasesImpl({S0, 
S1, S2, S3, S4, S5}, 
Value);
 
 
  123  [[deprecated(
"Pass cases in std::initializer_list instead")]]
 
  127    return CasesImpl({S0, 
S1, S2, S3, S4, S5, S6}, 
Value);
 
 
  130  [[deprecated(
"Pass cases in std::initializer_list instead")]]
 
  134    return CasesImpl({S0, 
S1, S2, S3, S4, S5, S6, S7}, 
Value);
 
 
  137  [[deprecated(
"Pass cases in std::initializer_list instead")]]
 
  142    return CasesImpl({S0, 
S1, S2, S3, S4, S5, S6, S7, 
S8}, 
Value);
 
 
  145  [[deprecated(
"Pass cases in std::initializer_list instead")]]
 
  150    return CasesImpl({S0, 
S1, S2, S3, S4, S5, S6, S7, 
S8, S9}, 
Value);
 
 
  155    CaseLowerImpl(S, 
Value);
 
 
  160    if (!Result && Str.ends_with_insensitive(S))
 
 
  167    if (!Result && Str.starts_with_insensitive(S))
 
  168      Result = std::move(
Value);
 
 
  175    return CasesLowerImpl(CaseStrings, 
Value);
 
 
  178  [[deprecated(
"Pass cases in std::initializer_list instead")]]
 
  180    return CasesLowerImpl({S0, 
S1}, 
Value);
 
 
  183  [[deprecated(
"Pass cases in std::initializer_list instead")]]
 
  186    return CasesLowerImpl({S0, 
S1, S2}, 
Value);
 
 
  189  [[deprecated(
"Pass cases in std::initializer_list instead")]]
 
  192    return CasesLowerImpl({S0, 
S1, S2, S3}, 
Value);
 
 
  195  [[deprecated(
"Pass cases in std::initializer_list instead")]]
 
  198    return CasesLowerImpl({S0, 
S1, S2, S3, S4}, 
Value);
 
 
  203      return std::move(*Result);
 
 
  209      const char *Message = 
"Fell off the end of a string-switch") {
 
  211      return std::move(*Result);
 
 
  227    Result = std::move(
Value);
 
  237    if (!Str.equals_insensitive(S))
 
  240    Result = std::move(Value);
 
  247    for (StringLiteral S : 
Cases)
 
  248      if (CaseImpl(S, 
Value))
 
  256    for (StringLiteral S : 
Cases)
 
  257      if (CaseLowerImpl(S, 
Value))
 
 
A wrapper around a string literal that serves as a proxy for constructing global tables of StringRefs...
 
StringRef - Represent a constant reference to a string, i.e.
 
StringSwitch & CasesLower(StringLiteral S0, StringLiteral S1, StringLiteral S2, StringLiteral S3, StringLiteral S4, T Value)
 
StringSwitch & Cases(StringLiteral S0, StringLiteral S1, StringLiteral S2, StringLiteral S3, StringLiteral S4, StringLiteral S5, T Value)
 
StringSwitch & EndsWithLower(StringLiteral S, T Value)
 
StringSwitch & StartsWithLower(StringLiteral S, T Value)
 
StringSwitch & CaseLower(StringLiteral S, T Value)
 
StringSwitch & Case(StringLiteral S, T Value)
 
StringSwitch & CasesLower(StringLiteral S0, StringLiteral S1, T Value)
 
StringSwitch & Cases(StringLiteral S0, StringLiteral S1, StringLiteral S2, StringLiteral S3, StringLiteral S4, T Value)
 
void operator=(StringSwitch &&)=delete
 
void operator=(const StringSwitch &)=delete
 
StringSwitch & CasesLower(StringLiteral S0, StringLiteral S1, StringLiteral S2, StringLiteral S3, T Value)
 
R DefaultUnreachable(const char *Message="Fell off the end of a string-switch")
Declare default as unreachable, making sure that all cases were handled.
 
StringSwitch & CasesLower(std::initializer_list< StringLiteral > CaseStrings, T Value)
 
StringSwitch & StartsWith(StringLiteral S, T Value)
 
StringSwitch & Cases(StringLiteral S0, StringLiteral S1, StringLiteral S2, StringLiteral S3, StringLiteral S4, StringLiteral S5, StringLiteral S6, StringLiteral S7, StringLiteral S8, T Value)
 
StringSwitch & Cases(StringLiteral S0, StringLiteral S1, T Value)
 
StringSwitch(const StringSwitch &)=delete
 
StringSwitch & Cases(StringLiteral S0, StringLiteral S1, StringLiteral S2, StringLiteral S3, T Value)
 
StringSwitch & EndsWith(StringLiteral S, T Value)
 
StringSwitch & Cases(StringLiteral S0, StringLiteral S1, StringLiteral S2, StringLiteral S3, StringLiteral S4, StringLiteral S5, StringLiteral S6, StringLiteral S7, T Value)
 
StringSwitch & Cases(StringLiteral S0, StringLiteral S1, StringLiteral S2, StringLiteral S3, StringLiteral S4, StringLiteral S5, StringLiteral S6, T Value)
 
StringSwitch(StringSwitch &&)=default
 
StringSwitch & Cases(StringLiteral S0, StringLiteral S1, StringLiteral S2, T Value)
 
StringSwitch & Cases(std::initializer_list< StringLiteral > CaseStrings, T Value)
 
StringSwitch(StringRef S)
 
StringSwitch & Cases(StringLiteral S0, StringLiteral S1, StringLiteral S2, StringLiteral S3, StringLiteral S4, StringLiteral S5, StringLiteral S6, StringLiteral S7, StringLiteral S8, StringLiteral S9, T Value)
 
StringSwitch & CasesLower(StringLiteral S0, StringLiteral S1, StringLiteral S2, T Value)
 
LLVM Value Representation.
 
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
 
This is an optimization pass for GlobalISel generic memory operations.
 
FunctionAddr VTableAddr Value