Get rid of template templates that were preventing VC from compiling the

set_intersect template.  Thanks to Morten Ofstad and Jeff Cohen for the
patch!

llvm-svn: 16954
This commit is contained in:
Chris Lattner 2004-10-13 15:09:21 +00:00
parent 79843fb7d9
commit a4756fd6be

View File

@ -17,8 +17,8 @@
namespace llvm {
// set_union(A, B) - Compute A := A u B, return whether A changed.
//
/// set_union(A, B) - Compute A := A u B, return whether A changed.
///
template <class S1Ty, class S2Ty>
bool set_union(S1Ty &S1, const S2Ty &S2) {
bool Changed = false;
@ -31,22 +31,22 @@ bool set_union(S1Ty &S1, const S2Ty &S2) {
return Changed;
}
// set_intersect(A, B) - Compute A := A ^ B
// Identical to set_intersection, except that it works on set<>'s and
// is nicer to use. Functionally, this iterates through S1, removing
// elements that are not contained in S2.
//
template <template<class S1ElTy> class S1Ty, class ETy, class S2Ty>
void set_intersect(S1Ty<ETy> &S1, const S2Ty &S2) {
for (typename S1Ty<ETy>::iterator I = S1.begin(); I != S1.end();) {
const ETy &E = *I;
++I;
if (!S2.count(E)) S1.erase(E); // Erase element if not in S2
}
/// set_intersect(A, B) - Compute A := A ^ B
/// Identical to set_intersection, except that it works on set<>'s and
/// is nicer to use. Functionally, this iterates through S1, removing
/// elements that are not contained in S2.
///
template <class S1Ty, class S2Ty>
void set_intersect(S1Ty &S1, const S2Ty &S2) {
for (typename S1Ty::iterator I = S1.begin(); I != S1.end();) {
const typename S1Ty::key_type &E = *I;
++I;
if (!S2.count(E)) S1.erase(E); // Erase element if not in S2
}
}
// set_difference(A, B) - Return A - B
//
/// set_difference(A, B) - Return A - B
///
template <class S1Ty, class S2Ty>
S1Ty set_difference(const S1Ty &S1, const S2Ty &S2) {
S1Ty Result;
@ -57,8 +57,8 @@ S1Ty set_difference(const S1Ty &S1, const S2Ty &S2) {
return Result;
}
// set_subtract(A, B) - Compute A := A - B
//
/// set_subtract(A, B) - Compute A := A - B
///
template <class S1Ty, class S2Ty>
void set_subtract(S1Ty &S1, const S2Ty &S2) {
for (typename S2Ty::const_iterator SI = S2.begin(), SE = S2.end();