jmud-0.11/
jmud-0.11/bin/
jmud-0.11/doc/
jmud-0.11/rec/
jmud-0.11/rec/mun/
jmud-0.11/rec/mun/grecia/
jmud-0.11/rec/mun/gunnar/
jmud-0.11/rec/qua/
jmud-0.11/src/bool/
jmud-0.11/src/clone/
jmud-0.11/src/integer/
jmud-0.11/src/misc/
jmud-0.11/src/string/
jmud-0.11/src/util/bit/
jmud-0.11/src/util/color/
jmud-0.11/src/util/file/
jmud-0.11/src/util/jgp/adaptor/
jmud-0.11/src/util/jgp/algorithm/
jmud-0.11/src/util/jgp/container/
jmud-0.11/src/util/jgp/functor/
jmud-0.11/src/util/jgp/interfaces/
jmud-0.11/src/util/jgp/predicate/
jmud-0.11/src/util/log/
jmud-0.11/src/util/state/
jmud-0.11/trash/
package util.list;

import java.util.Enumeration;
import java.util.NoSuchElementException;
import java.io.Serializable;

public class List implements Cloneable, Serializable, Iterateable {

  protected ListLink head = null;

  ListLink getHead() {
    return head;
  }

  public List() {
  }

  private void add(ListLink aLink) {
    aLink.setNext(head);
    head = aLink;
  }

  public boolean isEmpty() {
    return head == null;
  }

  public void insert(Object info) {
    add(new ListLink(info, null));
  }

  public void remove(Object info) throws NoSuchElementException {
    
    if (head != null) {
      ListLink prevLink = head;
      
      if (prevLink.getInfo() == info) {
	head = prevLink.getNext();
	return;
      }
      
      while (prevLink.getNext() != null) {
	ListLink currLink = prevLink.getNext();
	
	if (currLink.getInfo() == info) {
	  prevLink.setNext(currLink.getNext());
	  return;
	}
	
	prevLink = currLink;
      }
    }

    throw new NoSuchElementException();
  }

  public ListEnumeration elements() {
    return new ListEnumeration(this);
  }

  public Object clone() {

    List cloneList = new List();
    ListEnumeration myElements = elements();

    if (myElements.hasMoreElements()) {

      ListLink prevLink = new ListLink(myElements.nextElement(), null);
      cloneList.add(prevLink);

      while (myElements.hasMoreElements()) {
	prevLink.setNext(new ListLink(myElements.nextElement(), null));
	prevLink = prevLink.getNext();
      }

    }

    return cloneList;
  }

  public Iterator getIterator() {
    return new ListIterator(this);
  }
}