/*************************** AusnahmeKeller.java ******************************/

/** Implementation des Interface Keller unter Verwendung von Exceptions       */

public class AusnahmeKeller {

    private static class KellerEintrag {
        Object inhalt;                  // Inhalt des KellerEintrags
        KellerEintrag next;             // Verweis auf naechsten KellerEintrag
    }

    private KellerEintrag top;          // zeigt auf obersten KellerEintrag

    public AusnahmeKeller () {                         // legt leeren Keller an
        top = null;
    }

    public boolean empty() {                           // liefert true,
        return top == null;                            // falls Keller leer
    }

    public void push(Object x) {                       // legt Objekt x    
        KellerEintrag hilf = new KellerEintrag();      // auf den Keller
        hilf.inhalt = x;
        hilf.next   = top;
        top         = hilf;
    }

    public Object top() throws KellerFehler {          // liefert oberstes 
        if (empty())                                   // Kellerelement 
          throw new KellerFehler("in top: Keller leer");   
        return top.inhalt;                            
    }

    public void pop() throws KellerFehler  {           // entfernt oberstes
        if (empty())                                   // Kellerelement
          throw new KellerFehler("in pop: Keller leer");  
        top = top.next;
    }
}
