/**
 * AlgoDat SS00 Aufgabe 50 (von 49 adaptiert)
 * Selbstanordnende Liste
 * Die Elemente der einfach verketteten Liste
 * Es werden nicht ganze Zahlen vom Typ <code>int</code> gespeichert,
 * sondern Objekte beliebigen Typs.
 * 
 * @author Christian Semrau, 16.05.2000
 * <a href="mailto:gsemrau@cs.uni-magdeburg.de">gsemrau@cs.uni-magdeburg.de</a>
 */
class SingleListElement {

    // Zugriffszaehler
    private int accessCounter;

    // die Daten des Elements
    private Object data;

    // Nachfolger
    private SingleListElement next;

/**
 * Erzeugt ein neues SingleListElement.
 * next wird auf null gesetzt.
 * @param o die Daten des neuen Elements
 */
public SingleListElement(Object o) {
    this(o, null);
}

/**
 * Erzeugt ein neues SingleListElement.
 * @param d die Daten des neuen Elements
 * @param n der Nachfolger
 */
public SingleListElement(Object d, SingleListElement n){
    myIndex = ++counter;
    data = d;
    next = n;
    accessCounter = 0;
}

public SingleListElement getNext(){
    return next;
}
public void setNext(SingleListElement e){
    next = e;
}
public Object getElement(){
    return data;
}
public void setElement(Object o){
    data = o;
}
public int getAccessCounter(){
    return accessCounter;
}
public void incAccessCounter(){
    accessCounter++;
}


/**
 * Liefert eine String-Repraesentation dieses Objekts.
 * Wenn verbose==true, werden zusaetzlich interne Daten angezeigt.
 */
public String toString(){
    StringBuffer sb = new StringBuffer();
    if (verbose){
        sb.append("[").append(myIndex).append(",(");
    }
    sb.append(data.toString());
    if (verbose){
        sb.append(")");
        if (next != null) sb.append(",next:").append(next.myIndex);
        sb.append("]");
    }
    return sb.toString();
}

    // -------------------------------------------------------
    // ein paar Attribute, die nicht wirklich benoetigt werden
    // -------------------------------------------------------

    // einfache oder detaillierte toString()-Methode
    static boolean verbose = false;

    // zaehlt die erzeugten Elemente
    private static int counter = 0;

    // identifiziert die Elemente fuer die ausfuehrliche Darstellung
    private int myIndex;

}
