Jass - Documentation

Buffer Example

1 Buffer Example

package jass.examples;

public class Buffer implements Cloneable {

  protected int in,out;
  protected Object[] buf;

  public Buffer() {
    buf = new Object[0];
  }

  public Buffer (int anzahl) {
    /** require anzahl > 0; **/
    buf = new Object[anzahl];
    /** ensure buf.length == anzahl; **/
  }

  public boolean empty() {
    return in - out == 0;
    /** ensure changeonly{}; **/
  }

  public boolean full() {
    return in - out == buf.length;
    /** ensure changeonly{}; **/    
  }

  public void add(Object o) {
    /** require [valid_object] o != null; [buffer_not_full] !full(); **/
    buf[in % buf.length] = o;
    in++;
    /** ensure changeonly{in,buf}; Old.in == in - 1; **/
  }

  public Object remove() {
    /** require [buffer_not_empty] !empty(); **/
    Object o = buf[out % buf.length];
    out++;
    return o;
    /** ensure changeonly{out}; [valid_object] Result != null; **/
  } 

  public boolean contains(Object o) {
    /** require o != null; **/
    boolean found = false;
    for (int i = 0; i < buf.length; i++) 
      /** invariant 0 <= i && i <= buf.length; **/
      /** variant buf.length - i **/
      if (buf[i].equals(o)) 
        found = true;
    return found;
    /** ensure changeonly{}; **/    
  }   

  protected Object clone() {
    /* Use the Objects clone method. This is enough cause only in and out 
       are refered with Old expressions. */
    Object b = null;
    try {
      b = super.clone();
    }     
    catch (CloneNotSupportedException e){;}
    return b;
  }

  /** invariant [range] 0 <= in - out && in - out <= buf.length; 
        [valid_content] buf.length == 0 || 
	   (forall i : {out%buf.length .. in%buf.length-1} # buf[i] != null);
   **/
}


The Jass Page - printer friendly - last update 11/09/05
online version at http://csd.informatik.uni-oldenburg.de/~jass