001 package lrs.visitor; 002 import lrs.*; 003 import logic.*; 004 // This visitor removes the node whose value matches the param's value. 005 // Returns true if remove was successful, returns false othewise. 006 007 public class RemoveItem implements IAlgo{ 008 public static RemoveItem Singleton = new RemoveItem(); 009 010 private RemoveItem(){ 011 } 012 013 public Object emptyCase(LRStruct host, Object... param) { 014 return BooleanFactory.Singleton.makeBoolean(false); // item not found. 015 } 016 017 public Object nonEmptyCase(final LRStruct host, final Object... param) { 018 //Integer item = (Integer) param[0]; // saves recasting all the time 019 020 // Remove this node if the local data equals the param. 021 return BooleanFactory.Singleton.makeBoolean(param[0].equals(host.getFirst())). 022 execute( new IBooleanAlgo() { 023 public Object trueCase(IBoolean h, Object... inp) {; 024 host.removeFront(); 025 return BooleanFactory.Singleton.makeBoolean(true); 026 } 027 public Object falseCase(IBoolean h, Object... inp) { 028 return host.getRest().execute(RemoveItem.this, param); 029 } 030 }); 031 032 // if (item.equals((Integer)host.getFirst())) 033 // { 034 // host.removeFront(); 035 // return new Boolean(true); 036 // } 037 // else // otherwise recurse and return the result 038 // { 039 // return host.getRest().execute(this, param); 040 // } 041 } 042 }