001 002 package brs; 003 004 /** 005 * Represents the empty state of a BiTree. Uses the singleton pattern to model 006 * the uniqueness of "emptiness". 007 * @author Dung X. Nguyen - Copyright 2002 - All rights reserved. 008 * @author Mathias Ricken - Copyright 2008 - All rights reserved. 009 * @since 03/11/02 010 */ 011 class EmptyNode<T> extends ANode<T> { 012 /** 013 * Throws java.util.NoSuchElementException. 014 * @param owner the BiTree holding this EmptyNode. 015 */ 016 T getRootDat (BiTree<T> owner) { 017 throw new java.util.NoSuchElementException ("EmptyNode.getRootDat()"); 018 } 019 020 /** 021 * Throws java.util.NoSuchElementException. 022 * @param dat a data Object. 023 * @param owner the BiTree holding this EmptyNode. 024 */ 025 void setRootDat (BiTree<T> owner, T dat) { 026 throw new java.util.NoSuchElementException ("EmptyNode.setRootDat()"); 027 } 028 029 /** 030 * Throws java.util.NoSuchElementException. 031 * @param owner the BiTree holding this EmptyNode. 032 */ 033 BiTree<T> getLeftSubTree (BiTree<T> owner) { 034 throw new java.util.NoSuchElementException ("EmptyNode.getLeftSubTree()"); 035 } 036 037 /** 038 * Throws java.util.NoSuchElementException. 039 * @param owner the BiTree holding this EmptyNode. 040 */ 041 BiTree<T> getRightSubTree(BiTree<T> owner) { 042 throw new java.util.NoSuchElementException ("EmptyNode.getRightSubTree()"); 043 } 044 045 /** 046 * Throws java.util.NoSuchElementException. 047 * @param biTree a given BiTree. 048 * @param owner the BiTree holding this EmptyNode. 049 */ 050 void setLeftSubTree(BiTree<T> owner, BiTree<T> biTree) { 051 throw new java.util.NoSuchElementException ("EmptyNode.setLeftSubTree()"); 052 } 053 054 /** 055 * Throws java.util.NoSuchElementException. 056 * @param biTree a given BiTree. 057 * @param owner the BiTree holding this EmptyNode. 058 */ 059 void setRightSubTree(BiTree<T> owner, BiTree<T> biTree) { 060 throw new java.util.NoSuchElementException ("EmptyNode.setRightSubTree()"); 061 } 062 063 /** 064 * Asks the owner tree to set the root node to a new DatNode containing dat, 065 * resulting in a state change from empty to non-empty. 066 * @param dat a given data Object. 067 * @param owner the context of this state. 068 */ 069 void insertRoot(BiTree<T> owner, T dat) { 070 owner.setRootNode(new DatNode<T>(dat)); 071 } 072 073 /** 074 * Throws java.util.NoSuchElementException. 075 * @param owner the BiTree holding this EmptyNode. 076 */ 077 T remRoot (BiTree<T> owner) { 078 throw new java.util.NoSuchElementException ("EmptyNode.remRoot()"); 079 } 080 081 /** 082 * Calls algo's emptyCase () method to execute the algorithm algo. 083 * @param owner the BiTree holding this EmptyNode. 084 * @param algo the visiting algorithm 085 * @param inp the vararg input algo needs. 086 * @return the output for the emptyCase() of algo. 087 */ 088 <R,P> R execute(BiTree<T> owner, IVisitor<T,R,P> algo, P... inp) { 089 return algo.emptyCase(owner, inp); 090 } 091 } 092