コード例 #1
0
  /*@  public normal_behavior
  @    requires dv != null && rv != null;
  @    ensures \result.theRelation.equals(
  @                theRelation.remove(new JMLEqualsEqualsPair(dv, rv)));
  @   also
  @    requires dv == null || rv == null;
  @    ensures \result != null && \result.equals(this);
  @*/
  public /*@ non_null @*/ JMLEqualsToEqualsRelation remove(Object dv, Object rv) {
    if (!domain_.has(dv)) {
      return (this);
    }
    // @ assume dv != null;

    JMLValueSet newImagePairSet = new JMLValueSet();
    JMLEqualsSet newDom = domain_;
    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;
      int imgSize = img.int_size();
      if (imagePair.keyEquals(dv)) {
        img = img.remove(rv);
        imgSize = img.int_size();
        if (imgSize > 0) {
          newImagePairSet = newImagePairSet.insert(new JMLEqualsValuePair(dv, img));
          newSize = newSize + imgSize;
        } else {
          // @ assert imgSize == 0;
          newDom = newDom.remove(dv);
        }
      } else {
        newImagePairSet = newImagePairSet.insert(imagePair);
        newSize = newSize + imgSize;
      }
    }
    return new JMLEqualsToEqualsRelation(newImagePairSet, newDom, newSize);
  } // @ nowarn Exception;
コード例 #2
0
  /*@  public normal_behavior
  @    ensures \result != null
  @         && (\forall Object val; domain().has(val);
  @             (\forall Object r; r != null;
  @                   (elementImage(val).has(r)
  @                      <==> \result.theRelation
  @                            .has(new JMLEqualsEqualsPair(val,r))
  @                          && !val.equals(dv))));
  @ implies_that
  @   public normal_behavior
  @    requires dv == null;
  @    ensures \result != null && \result.equals(this);
  @*/
  public /*@ non_null @*/ JMLEqualsToEqualsRelation removeFromDomain(/*@ nullable @*/ Object dv) {
    if (!domain_.has(dv)) {
      return (this);
    }

    JMLValueSet newImagePairSet = new JMLValueSet();
    JMLEqualsSet newDom = domain_.remove(dv);
    int newSize = 0;

    JMLEqualsToEqualsRelationImageEnumerator imagePairEnum = this.imagePairs();
    JMLEqualsValuePair imagePair;
    while (imagePairEnum.hasMoreElements()) {
      imagePair = imagePairEnum.nextImagePair();
      // @ assume imagePair.value != null;
      // @ assume imagePair.value instanceof JMLEqualsSet;
      if (!imagePair.keyEquals(dv)) {
        newImagePairSet = newImagePairSet.insert(imagePair);
        JMLEqualsSet img = (JMLEqualsSet) imagePair.value;
        newSize = newSize + img.int_size();
      }
    }
    return new JMLEqualsToEqualsRelation(newImagePairSet, newDom, newSize);
  } // @ nowarn Exception;