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