I'm wondering if we need to keep on adding specialized "Add" methods to FoldingSet.
For example, APInt already has a "Profile" method for adding its profile to a FoldingSetNodeID, and APFloat could easily have a Profile method added to it. Now that FoldingSet uses FoldingSetTrait<> to profile its contained elements, perhaps we can just include a single "Add" member template to FoldingSetNodeID that uses the FoldingSetTrait<> to profile a generic item. When people want to include profiling support for a datatype, they need only specialize FoldingSetTrait<> (if the datatype doesn't already have a Profile method). This avoids bloat in the API for FoldingSetNodeID. If anyone else thinks this is a good idea, I'll go ahead and make the change. On Feb 6, 2008, at 3:09 PM, Dan Gohman wrote: > Author: djg > Date: Wed Feb 6 17:09:15 2008 > New Revision: 46833 > > URL: http://llvm.org/viewvc/llvm-project?rev=46833&view=rev > Log: > Add support to FoldingSet for hashing APInt objects. > > Modified: > llvm/trunk/include/llvm/ADT/FoldingSet.h > llvm/trunk/lib/Support/FoldingSet.cpp > > Modified: llvm/trunk/include/llvm/ADT/FoldingSet.h > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/FoldingSet.h?rev=46833&r1=46832&r2=46833&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- llvm/trunk/include/llvm/ADT/FoldingSet.h (original) > +++ llvm/trunk/include/llvm/ADT/FoldingSet.h Wed Feb 6 17:09:15 2008 > @@ -22,6 +22,7 @@ > > namespace llvm { > class APFloat; > + class APInt; > > /// This folding set used for two purposes: > /// 1. Given information about a node we want to create, look up > the unique > @@ -206,6 +207,7 @@ > void AddFloat(float F); > void AddDouble(double D); > void AddAPFloat(const APFloat& apf); > + void AddAPInt(const APInt& api); > void AddString(const std::string &String); > > /// clear - Clear the accumulated profile, allowing this > FoldingSetNodeID > > Modified: llvm/trunk/lib/Support/FoldingSet.cpp > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/FoldingSet.cpp?rev=46833&r1=46832&r2=46833&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- llvm/trunk/lib/Support/FoldingSet.cpp (original) > +++ llvm/trunk/lib/Support/FoldingSet.cpp Wed Feb 6 17:09:15 2008 > @@ -16,6 +16,7 @@ > > #include "llvm/ADT/FoldingSet.h" > #include "llvm/ADT/APFloat.h" > +#include "llvm/ADT/APInt.h" > #include "llvm/Support/MathExtras.h" > #include <cassert> > using namespace llvm; > @@ -59,6 +60,9 @@ > } > void FoldingSetNodeID::AddAPFloat(const APFloat& apf) { > APInt api = apf.convertToAPInt(); > + AddAPInt(api); > +} > +void FoldingSetNodeID::AddAPInt(const APInt& api) { > const uint64_t *p = api.getRawData(); > for (unsigned i=0; i<api.getNumWords(); i++) > AddInteger(*p++); > > > _______________________________________________ > llvm-commits mailing list > llvm-commits@cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits