001 package lrs.visitor; 002 003 import lrs.IAlgo; 004 import lrs.LRStruct; 005 006 /** 007 * Remove all occurances of the item specified as input, if found. 008 * 009 * @author Mathias Ricken 010 */ 011 public class Remove implements IAlgo { 012 /// singleton instance 013 public static final Remove Singleton = new Remove(); 014 015 /// private singleton ctor 016 protected Remove() { 017 } 018 019 /** 020 * Operates on an empty LRStruct host, given an input object. 021 * 022 * @param host an empty LRStruct. 023 * @param inp item to remove. 024 * 025 * @return null 026 */ 027 public Object emptyCase(LRStruct host, Object inp) { 028 return null; 029 } 030 031 /** 032 * Operates on a non-empty LRStruct host, given an input object. 033 * 034 * @param host a non-empty LRStruct. 035 * @param inp item to remove. 036 * 037 * @return null 038 */ 039 public Object nonEmptyCase(LRStruct host, Object inp) { 040 if (host.getFirst() == inp) { 041 host.removeFront(); 042 // recur on this element (used to be rest) 043 return host.execute(this, inp); 044 } 045 else { 046 // recur on rest 047 return host.getRest().execute(this, inp); 048 } 049 } 050 }