// finally, create the actual reference edge hrn->hrnSrc
ReferenceEdgeProperties repNew
- = new ReferenceEdgeProperties( false, false, repSrc.getBetaNew() );
+ = new ReferenceEdgeProperties( false,
+ false,
+ repSrc.getBetaNew().pruneBy( hrn.getAlpha() )
+ );
addReferenceEdge( hrn, hrnSrc, repNew );
}
public ReachabilitySet ageTokens( AllocationSite as ) {
-
+ assert as != null;
+
ReachabilitySet rsOut = new ReachabilitySet();
Iterator itrS = this.iterator();
}
+ public ReachabilitySet pruneBy( ReachabilitySet rsIn ) {
+ assert rsIn != null;
+
+ ReachabilitySet rsOut = new ReachabilitySet();
+
+ Iterator itrB = this.iterator();
+ while( itrB.hasNext() ) {
+ TokenTupleSet ttsB = (TokenTupleSet) itrB.next();
+
+ boolean subsetExists = false;
+
+ Iterator itrA = rsIn.iterator();
+ while( itrA.hasNext() && !subsetExists ) {
+ TokenTupleSet ttsA = (TokenTupleSet) itrA.next();
+
+ if( ttsA.isSubset( ttsB ) ) {
+ subsetExists = true;
+ rsOut.possibleReachabilities.add( ttsB );
+ }
+ }
+ }
+
+ return rsOut.makeCanonical();
+ }
+
+
public boolean equals( Object o ) {
if( !(o instanceof ReachabilitySet) ) {
return false;
return tokenTuples.isEmpty();
}
+ public boolean isSubset( TokenTupleSet ttsIn ) {
+ assert ttsIn != null;
+ return ttsIn.tokenTuples.containsAll( this.tokenTuples );
+ }
+
public boolean containsTuple( TokenTuple tt ) {
return tokenTuples.contains( tt );
}