implement a proper copy ctor, operator= and add a helper method.
authorChris Lattner <sabre@nondot.org>
Sat, 19 Mar 2005 19:26:14 +0000 (19:26 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 19 Mar 2005 19:26:14 +0000 (19:26 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20690 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/EquivalenceClasses.h

index eb6bfa2cad634f95478793af608be2d767132826..e318919421d2e3fc327ca99b2453fd4ef6d1b832 100644 (file)
@@ -112,6 +112,19 @@ class EquivalenceClasses {
   std::set<ECValue> TheMapping;
 
 public:
+  EquivalenceClasses() {}
+  EquivalenceClasses(const EquivalenceClasses &RHS) {
+    operator=(RHS);
+  }
+
+  const EquivalenceClasses &operator=(const EquivalenceClasses &RHS) {
+    for (iterator I = RHS.begin(), E = RHS.end(); I != E; ++I)
+      if (I->isLeader())
+        insert(I->getData());
+      else
+        unionSets(I->getData(), *RHS.findLeader(I));
+    return *this;
+  }
   
   //===--------------------------------------------------------------------===//
   // Inspection methods
@@ -133,6 +146,17 @@ public:
     return member_iterator(0);
   }
 
+  /// getNumClasses - Return the number of equivalence classes in this set.
+  /// Note that this is a linear time operation.
+  unsigned getNumClasses() const {
+    unsigned NC = 0;
+    for (iterator I = begin(), E = end(); I != E; ++I)
+      if (I->isLeader()) ++NC;
+    return NC;
+  }
+
+
+
   //===--------------------------------------------------------------------===//
   // Mutation methods