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