Speaking personally, I can't convince myself this is an improvement. - Daniel
On Thu, Dec 3, 2009 at 3:53 AM, Gabor Greif <[email protected]> wrote: > Hi all, > > attached patch simplifies StringSwitch and gets rid of the > Copy{Constructible|Assignable} constraint on the type parameter. > > It should also be a bit more efficient, in runtime and space. > > I know that several PRs are open against LLVM optimizations > that focus on this construct, so I did not commit this directly. > > Ok to commit (someday) ? > > Cheers, > > Gabor > > Index: /home/ggreif/llvm/include/llvm/ADT/StringSwitch.h > =================================================================== > --- /home/ggreif/llvm/include/llvm/ADT/StringSwitch.h (revision 90445) > +++ /home/ggreif/llvm/include/llvm/ADT/StringSwitch.h (working copy) > @@ -43,23 +43,19 @@ > /// \brief The string we are matching. > StringRef Str; > > - /// \brief The result of this switch statement, once known. > - T Result; > + /// \brief The pointer to the result of this switch statement, once known, > + /// null before that. > + const 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) > - : Str(Str), ResultKnown(false) { } > + : Str(Str), Result(0) { } > > template<unsigned N> > StringSwitch& Case(const char (&S)[N], const T& Value) { > - if (!ResultKnown && N-1 == Str.size() && > + if (!Result && N-1 == Str.size() && > (std::memcmp(S, Str.data(), N-1) == 0)) { > - Result = Value; > - ResultKnown = true; > + Result = &Value; > } > > return *this; > @@ -92,16 +88,16 @@ > .Case(S4, Value); > } > > - T Default(const T& Value) { > - if (ResultKnown) > - return Result; > + const T& Default(const T& Value) { > + if (Result) > + return *Result; > > return Value; > } > > operator T() { > - assert(ResultKnown && "Fell off the end of a string-switch"); > - return Result; > + assert(Result && "Fell off the end of a string-switch"); > + return *Result; > } > }; > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > > _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
