Added reachability classes, all of which are extensions of Canonical such that
[IRC.git] / Robust / src / Analysis / OwnershipAnalysis / TokenTupleSet.java
index 9a81a6583d1fb99f79ceec2e66f8ea949acc823e..d853290158d56f3c6bdd802589be45a92d83f864 100644 (file)
@@ -6,7 +6,7 @@ import java.util.*;
 import java.io.*;
 
 
-public class TokenTupleSet {
+public class TokenTupleSet extends Canonical {
 
     private HashSet<TokenTuple> tokenTuples;
 
@@ -23,6 +23,10 @@ public class TokenTupleSet {
        tokenTuples = (HashSet<TokenTuple>) tts.tokenTuples.clone(); //COPY?!
     }
 
+    public TokenTupleSet makeCanonical() {
+       return (TokenTupleSet) Canonical.makeCanonical( this );
+    }
+
     public Iterator iterator() {
        return tokenTuples.iterator();
     }
@@ -30,7 +34,7 @@ public class TokenTupleSet {
     public TokenTupleSet union( TokenTupleSet ttsIn ) {
        TokenTupleSet ttsOut = new TokenTupleSet( this );
        ttsOut.tokenTuples.addAll( ttsIn.tokenTuples );
-       return ttsOut;
+       return ttsOut.makeCanonical();
     }
 
     public boolean isEmpty() {
@@ -41,6 +45,19 @@ public class TokenTupleSet {
        return tokenTuples.contains( tt );
     }
 
+    public boolean equals( Object o ) {
+       if( !(o instanceof TokenTupleSet) ) {
+           return false;
+       }
+
+       TokenTupleSet tts = (TokenTupleSet) o;
+       return tokenTuples.equals( tts.tokenTuples );
+    }
+
+    public int hashCode() {
+       return tokenTuples.hashCode();
+    }
+
     // this should be a hash table so we can do this by key
     public boolean containsToken( Integer token ) {
        Iterator itr = tokenTuples.iterator();