typedef std::set<const Value*> ValueSet;
void printSet(const ValueSet &S);
-
-// set_union(A, B) - Compute A := A u B, return whether A changed.
-//
-template <class E>
-bool set_union(std::set<E> &S1, const std::set<E> &S2) {
- bool Changed = false;
-
- for (std::set<E>::const_iterator SI = S2.begin(), SE = S2.end();
- SI != SE; ++SI)
- if (S1.insert(*SI).second)
- Changed = true;
-
- return Changed;
-}
-
-// set_difference(A, B) - Return A - B
-//
-template <class E>
-std::set<E> set_difference(const std::set<E> &S1, const std::set<E> &S2) {
- std::set<E> Result;
- for (std::set<E>::const_iterator SI = S1.begin(), SE = S1.end();
- SI != SE; ++SI)
- if (S2.find(*SI) == S2.end()) // if the element is not in set2
- Result.insert(*SI);
- return Result;
-}
-
-// set_subtract(A, B) - Compute A := A - B
-//
-template <class E>
-void set_subtract(std::set<E> &S1, const std::set<E> &S2) {
- for (std::set<E>::const_iterator SI = S2.begin() ; SI != S2.end(); ++SI)
- S1.erase(*SI);
-}
-
#endif
typedef std::set<const Value*> ValueSet;
void printSet(const ValueSet &S);
-
-// set_union(A, B) - Compute A := A u B, return whether A changed.
-//
-template <class E>
-bool set_union(std::set<E> &S1, const std::set<E> &S2) {
- bool Changed = false;
-
- for (std::set<E>::const_iterator SI = S2.begin(), SE = S2.end();
- SI != SE; ++SI)
- if (S1.insert(*SI).second)
- Changed = true;
-
- return Changed;
-}
-
-// set_difference(A, B) - Return A - B
-//
-template <class E>
-std::set<E> set_difference(const std::set<E> &S1, const std::set<E> &S2) {
- std::set<E> Result;
- for (std::set<E>::const_iterator SI = S1.begin(), SE = S1.end();
- SI != SE; ++SI)
- if (S2.find(*SI) == S2.end()) // if the element is not in set2
- Result.insert(*SI);
- return Result;
-}
-
-// set_subtract(A, B) - Compute A := A - B
-//
-template <class E>
-void set_subtract(std::set<E> &S1, const std::set<E> &S2) {
- for (std::set<E>::const_iterator SI = S2.begin() ; SI != S2.end(); ++SI)
- S1.erase(*SI);
-}
-
#endif
#include "llvm/Method.h"
#include "Support/DepthFirstIterator.h"
#include "Support/STLExtras.h"
+#include "Support/SetOperations.h"
#include <algorithm>
using std::set;
-
-//===----------------------------------------------------------------------===//
-// Helper Template
-//===----------------------------------------------------------------------===//
-
-// set_intersect - 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 Ty, class Ty2>
-void set_intersect(set<Ty> &S1, const set<Ty2> &S2) {
- for (typename set<Ty>::iterator I = S1.begin(); I != S1.end();) {
- const Ty &E = *I;
- ++I;
- if (!S2.count(E)) S1.erase(E); // Erase element if not in S2
- }
-}
-
//===----------------------------------------------------------------------===//
// DominatorSet Implementation
//===----------------------------------------------------------------------===//
#include "llvm/Method.h"
#include "Support/DepthFirstIterator.h"
#include "Support/STLExtras.h"
+#include "Support/SetOperations.h"
#include <algorithm>
using std::set;
-
-//===----------------------------------------------------------------------===//
-// Helper Template
-//===----------------------------------------------------------------------===//
-
-// set_intersect - 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 Ty, class Ty2>
-void set_intersect(set<Ty> &S1, const set<Ty2> &S2) {
- for (typename set<Ty>::iterator I = S1.begin(); I != S1.end();) {
- const Ty &E = *I;
- ++I;
- if (!S2.count(E)) S1.erase(E); // Erase element if not in S2
- }
-}
-
//===----------------------------------------------------------------------===//
// DominatorSet Implementation
//===----------------------------------------------------------------------===//