001 package lrs;
002
003 import lrs.lazyLRSEvaluators.*;
004 /**
005 * Decorator for NonNullState, adding lazy evaluation capability.
006 * @author D. X. Nguyen & S. B. Wong
007 */
008 public class LazyNonNullState extends ANode{
009 ALazyEval aLazyEval;
010 NENode neNode;
011
012 LazyNonNullState(Object first, ALazyEval aLazyEval) {
013 neNode = new NENode (first, new LRStruct());
014 this.aLazyEval = aLazyEval;
015 }
016
017 LRStruct getRest(LRStruct owner) {
018 eval (owner);
019 return (neNode.getRest (owner));
020 }
021
022 LRStruct setRest(LRStruct tail, LRStruct owner) {
023 eval (owner);
024 return neNode.setRest (tail, owner);
025 }
026
027 LRStruct setFirst(Object first, LRStruct owner) {
028 return neNode.setFirst (first, owner);
029 }
030
031 LRStruct insertFront(Object dat, LRStruct owner) {
032 return neNode.insertFront (dat, owner);
033 }
034
035 Object removeFront(LRStruct owner) {
036 eval (owner);
037 return (neNode.removeFront (owner));
038 }
039
040 void eval(LRStruct owner) {
041 owner.setHead (neNode); // owner no longer needs lazy eval.
042 owner.setRest (aLazyEval.nextLRS ()); // But owner's tail does!
043 }
044
045 Object getFirst(LRStruct owner) {
046 return (neNode.getFirst (owner)); // lazy eval not needed.
047 }
048
049 Object execute(LRStruct host, IAlgo visitor, Object... param) {
050 return (neNode.execute (host, visitor, param));
051 }
052 }
053