From: Gabor Greif Date: Tue, 1 Dec 2009 12:53:56 +0000 (+0000) Subject: demonstrate usage of Cases() mapping several strings to the same value; remove traili... X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=6c2a7a04da2a6c8829b82cecb355b718f350c4f1;p=oota-llvm.git demonstrate usage of Cases() mapping several strings to the same value; remove trailing spaces git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90230 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/ADT/StringSwitch.h b/include/llvm/ADT/StringSwitch.h index 6562d57d3bb..68974980c21 100644 --- a/include/llvm/ADT/StringSwitch.h +++ b/include/llvm/ADT/StringSwitch.h @@ -18,7 +18,7 @@ #include namespace llvm { - + /// \brief A switch()-like statement whose cases are string literals. /// /// The StringSwitch class is a simple form of a switch() statement that @@ -35,48 +35,48 @@ namespace llvm { /// .Case("green", Green) /// .Case("blue", Blue) /// .Case("indigo", Indigo) -/// .Case("violet", Violet) +/// .Cases("violet", "purple", Violet) /// .Default(UnknownColor); /// \endcode template class StringSwitch { /// \brief The string we are matching. StringRef Str; - + /// \brief The result of this switch statement, once known. T Result; - + /// \brief Set true when the result of this switch is already known; in this /// case, Result is valid. bool ResultKnown; - + public: - explicit StringSwitch(StringRef Str) + explicit StringSwitch(StringRef Str) : Str(Str), ResultKnown(false) { } - + template StringSwitch& Case(const char (&S)[N], const T& Value) { - if (!ResultKnown && N-1 == Str.size() && + if (!ResultKnown && N-1 == Str.size() && (std::memcmp(S, Str.data(), N-1) == 0)) { Result = Value; ResultKnown = true; } - + return *this; } - + template StringSwitch& Cases(const char (&S0)[N0], const char (&S1)[N1], const T& Value) { return Case(S0, Value).Case(S1, Value); } - + template StringSwitch& Cases(const char (&S0)[N0], const char (&S1)[N1], const char (&S2)[N2], const T& Value) { return Case(S0, Value).Case(S1, Value).Case(S2, Value); } - + template StringSwitch& Cases(const char (&S0)[N0], const char (&S1)[N1], const char (&S2)[N2], const char (&S3)[N3], @@ -87,18 +87,18 @@ public: template StringSwitch& Cases(const char (&S0)[N0], const char (&S1)[N1], const char (&S2)[N2], const char (&S3)[N3], - const char (&S4)[N4], const T& Value) { + const char (&S4)[N4], const T& Value) { return Case(S0, Value).Case(S1, Value).Case(S2, Value).Case(S3, Value) .Case(S4, Value); } - + T Default(const T& Value) { if (ResultKnown) return Result; - + return Value; } - + operator T() { assert(ResultKnown && "Fell off the end of a string-switch"); return Result;