/*@ public normal_behavior @ requires rng != null; @ ensures (\forall JMLEqualsEqualsPair pair; ; @ \result.theRelation.has(pair) @ == rng.has(pair.value) @ && elementImage(pair.key).has(pair.value) @ ); @*/ public /*@ non_null @*/ JMLEqualsToEqualsRelation restrictRangeTo( /*@ non_null @*/ JMLEqualsSet rng) { JMLValueSet newImagePairSet = new JMLValueSet(); JMLEqualsSet newDom = new JMLEqualsSet(); int newSize = 0; JMLEqualsToEqualsRelationImageEnumerator imagePairEnum = this.imagePairs(); JMLEqualsValuePair imagePair; JMLEqualsSet img; while (imagePairEnum.hasMoreElements()) { imagePair = imagePairEnum.nextImagePair(); // @ assume imagePair.value != null; // @ assume imagePair.value instanceof JMLEqualsSet; img = ((JMLEqualsSet) imagePair.value).intersection(rng); if (!img.isEmpty()) { newImagePairSet = newImagePairSet.insert(new JMLEqualsValuePair(imagePair.key, img)); newDom = newDom.insert(imagePair.key); newSize = newSize + img.int_size(); } } return new JMLEqualsToEqualsRelation(newImagePairSet, newDom, newSize); } // @ nowarn Exception;