コード例 #1
0
  /*@  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;