Added some functionality to reachability classes that is apparently
[IRC.git] / Robust / src / Analysis / OwnershipAnalysis / TokenTupleSet.java
index d853290158d56f3c6bdd802589be45a92d83f864..d08c00732cac7940a226d8abdf26822143790e04 100644 (file)
@@ -31,12 +31,45 @@ public class TokenTupleSet extends Canonical {
        return tokenTuples.iterator();
     }
 
+    public TokenTupleSet add( TokenTuple tt ) {
+       TokenTupleSet ttsOut = new TokenTupleSet( tt );
+       return this.union( ttsOut );
+    }
+
     public TokenTupleSet union( TokenTupleSet ttsIn ) {
        TokenTupleSet ttsOut = new TokenTupleSet( this );
        ttsOut.tokenTuples.addAll( ttsIn.tokenTuples );
        return ttsOut.makeCanonical();
     }
 
+    /*
+    public TokenTupleSet unionUpArity( TokenTupleSet ttsIn ) {
+       TokenTupleSet ttsOut = new TokenTupleSet();
+       
+       Iterator itrIn = ttsIn.iterator();
+       while( itrIn.hasNext() ) {
+           TokenTuple ttIn = (TokenTuple) itrIn.next();
+
+           if( this.containsToken( ttIn.getToken() ) ) {       
+               ttsOut.tokenTuples.add( ttIn.increaseArity() );
+           } else {
+               ttsOut.tokenTuples.add( ttIn );
+           }
+       }
+
+       Iterator itrThis = this.iterator();
+       while( itrThis.hasNext() ) {
+           TokenTuple ttThis = (TokenTuple) itrThis.next();
+
+           if( !ttsIn.containsToken( ttThis.getToken() ) ) {
+               ttsOut.tokenTuples.add( ttThis );
+           }
+       }
+       
+       return ttsOut.makeCanonical();
+    }
+    */
+
     public boolean isEmpty() {
        return tokenTuples.isEmpty();
     }
@@ -45,6 +78,20 @@ public class TokenTupleSet extends Canonical {
        return tokenTuples.contains( tt );
     }
 
+    // only needs to be done if newSummary is true?  RIGHT?
+    public TokenTupleSet increaseArity( Integer token ) {
+       TokenTuple tt 
+           = new TokenTuple( token, true, TokenTuple.ARITY_ONE ).makeCanonical();
+       if( tokenTuples.contains( tt ) ) {
+           tokenTuples.remove( tt );
+           tokenTuples.add( 
+              new TokenTuple( token, true, TokenTuple.ARITY_MANY ).makeCanonical()
+                            );
+       }
+       
+       return makeCanonical();
+    }
+
     public boolean equals( Object o ) {
        if( !(o instanceof TokenTupleSet) ) {
            return false;
@@ -58,6 +105,32 @@ public class TokenTupleSet extends Canonical {
        return tokenTuples.hashCode();
     }
 
+    /*
+    public boolean equalWithoutArity( TokenTupleSet ttsIn ) {
+       Iterator itrIn = ttsIn.iterator();
+       while( itrIn.hasNext() ) {
+           TokenTuple ttIn = (TokenTuple) itrIn.next();
+
+           if( !this.containsToken( ttIn.getToken() ) )
+           {
+               return false;
+           }
+       }
+
+       Iterator itrThis = this.iterator();
+       while( itrThis.hasNext() ) {
+           TokenTuple ttThis = (TokenTuple) itrThis.next();
+
+           if( !ttsIn.containsToken( ttThis.getToken() ) )
+           {
+               return false;
+           }
+       }
+       
+       return true;
+    }
+    */
+
     // this should be a hash table so we can do this by key
     public boolean containsToken( Integer token ) {
        Iterator itr = tokenTuples.iterator();