1 package Analysis.OwnershipAnalysis;
9 public class TokenTupleSet extends Canonical {
11 private HashSet<TokenTuple> tokenTuples;
13 public TokenTupleSet() {
14 tokenTuples = new HashSet<TokenTuple>();
17 public TokenTupleSet( TokenTuple tt ) {
19 tokenTuples.add( tt );
22 public TokenTupleSet( TokenTupleSet tts ) {
23 tokenTuples = (HashSet<TokenTuple>) tts.tokenTuples.clone(); //COPY?!
26 public TokenTupleSet makeCanonical() {
27 return (TokenTupleSet) Canonical.makeCanonical( this );
30 public Iterator iterator() {
31 return tokenTuples.iterator();
34 public TokenTupleSet add( TokenTuple tt ) {
35 TokenTupleSet ttsOut = new TokenTupleSet( tt );
36 return this.union( ttsOut );
39 public TokenTupleSet union( TokenTupleSet ttsIn ) {
40 TokenTupleSet ttsOut = new TokenTupleSet( this );
41 ttsOut.tokenTuples.addAll( ttsIn.tokenTuples );
42 return ttsOut.makeCanonical();
46 public TokenTupleSet unionUpArity( TokenTupleSet ttsIn ) {
47 TokenTupleSet ttsOut = new TokenTupleSet();
49 Iterator itrIn = ttsIn.iterator();
50 while( itrIn.hasNext() ) {
51 TokenTuple ttIn = (TokenTuple) itrIn.next();
53 if( this.containsToken( ttIn.getToken() ) ) {
54 ttsOut.tokenTuples.add( ttIn.increaseArity() );
56 ttsOut.tokenTuples.add( ttIn );
60 Iterator itrThis = this.iterator();
61 while( itrThis.hasNext() ) {
62 TokenTuple ttThis = (TokenTuple) itrThis.next();
64 if( !ttsIn.containsToken( ttThis.getToken() ) ) {
65 ttsOut.tokenTuples.add( ttThis );
69 return ttsOut.makeCanonical();
73 public boolean isEmpty() {
74 return tokenTuples.isEmpty();
77 public boolean containsTuple( TokenTuple tt ) {
78 return tokenTuples.contains( tt );
81 // only needs to be done if newSummary is true? RIGHT?
82 public TokenTupleSet increaseArity( Integer token ) {
84 = new TokenTuple( token, true, TokenTuple.ARITY_ONE ).makeCanonical();
85 if( tokenTuples.contains( tt ) ) {
86 tokenTuples.remove( tt );
88 new TokenTuple( token, true, TokenTuple.ARITY_MANY ).makeCanonical()
92 return makeCanonical();
95 public boolean equals( Object o ) {
96 if( !(o instanceof TokenTupleSet) ) {
100 TokenTupleSet tts = (TokenTupleSet) o;
101 return tokenTuples.equals( tts.tokenTuples );
104 public int hashCode() {
105 return tokenTuples.hashCode();
109 public boolean equalWithoutArity( TokenTupleSet ttsIn ) {
110 Iterator itrIn = ttsIn.iterator();
111 while( itrIn.hasNext() ) {
112 TokenTuple ttIn = (TokenTuple) itrIn.next();
114 if( !this.containsToken( ttIn.getToken() ) )
120 Iterator itrThis = this.iterator();
121 while( itrThis.hasNext() ) {
122 TokenTuple ttThis = (TokenTuple) itrThis.next();
124 if( !ttsIn.containsToken( ttThis.getToken() ) )
134 // this should be a hash table so we can do this by key
135 public boolean containsToken( Integer token ) {
136 Iterator itr = tokenTuples.iterator();
137 while( itr.hasNext() ) {
138 TokenTuple tt = (TokenTuple) itr.next();
139 if( token.equals( tt.getToken() ) ) {
146 public String toString() {
147 return tokenTuples.toString();