001 package lrs; 002 003 import java.util.NoSuchElementException; 004 005 /** 006 * Represents the empty state of a mutable list LRStruct. Uses the Singleton pattern. 007 * 008 * @author Dung X. Nguyen Copyright 2001 - All rights reserved. 009 * @since 10/09/01 010 */ 011 class EmptyNode extends ANode { 012 /** 013 * Singleton Pattern. 014 */ 015 static final EmptyNode Singleton = new EmptyNode(); 016 017 private EmptyNode() { 018 } 019 020 /** 021 * Throws java.util.NoSuchElementException. 022 */ 023 LRStruct getRest(LRStruct owner) { 024 throw new NoSuchElementException("Empty list has no first."); 025 } 026 027 /** 028 * Throws java.util.NoSuchElementException. 029 */ 030 Object getFirst(LRStruct owner) { 031 throw new NoSuchElementException("Empty list has no first."); 032 } 033 034 /** 035 * Throws java.util.NoSuchElementException. 036 */ 037 LRStruct setRest(LRStruct tail, LRStruct owner) { 038 throw new NoSuchElementException("Empty list has no tail."); 039 } 040 041 /** 042 * Throws java.util.NoSuchElementException. 043 */ 044 LRStruct setFirst(Object dat, LRStruct owner) { 045 throw new NoSuchElementException("Empty list has no first."); 046 } 047 048 /** 049 * The owner becomes non-empty and has dat as its first element. 050 */ 051 LRStruct insertFront(Object dat, LRStruct owner) { 052 return owner.setHead(new NENode(dat, new LRStruct(this))); 053 } 054 055 /** 056 * Throws java.util.NoSuchElementException. 057 */ 058 Object removeFront(LRStruct owner) { 059 throw new NoSuchElementException("Empty list has no front."); 060 } 061 062 /** 063 * Calls the <code>IAlgo</code> visitor's empty case. 064 */ 065 Object execute(IAlgo algo, Object inp, LRStruct owner) { 066 return algo.emptyCase(owner, inp); 067 } 068 } 069