/** listes d'objets */

public class ListObject implements Suite {
/** Premier element */
  private Chainon first ;
/** dernier element */
  private Chainon last ;
/** Nombre d'elements */
  private int nbelem ;
/** Pointeur vers un element */
  private Chainon cursor;
  
  public ListObject() {
    first = last = null ;
    nbelem = 0;
  }
    
  public int length() {
    return nbelem ;
  }
  
  public boolean isEmpty() {
    return (first == null) ;
  }
  
  public void resetCursor() {
    cursor = first ;
  }
  
  public Object here() {
    return cursor.getContents() ;
  }
  
  public void moveCursor() {
    if (cursor != null)
      cursor = cursor.next() ;
  }

  public boolean atEnd() {
    return ( cursor == null) ;
  }

  public void addLast(Object m) {
    Chainon c1 = new Chainon(m) ;
    if (isEmpty()) {
      last=first = c1 ;
    } 
    else {
      Chainon l = last; 
      l.setSuiv(c1);
      last = c1 ;
    }
    nbelem ++;
  }
  
  public void addFirst(Object m) {
    Chainon c1 = new Chainon(m) ;
    if (isEmpty()) {
      last=first = c1 ;
    }
    else {
      c1.setSuiv(first);
      first = c1 ;
    }
    nbelem ++;
  }
  
  public void listing() {
    if (!isEmpty()){
      Chainon saveCursor = cursor ;
      for(resetCursor(); !atEnd() ; moveCursor()) 
	System.out.println(here());
      cursor= saveCursor; 
    }
    else 
      System.out.println("");
  }
}