001    package lrs;
002    
003    public abstract class ALazyEval {
004     /**
005      * Performs lazy evaluation to compute the next LRStruct when needed.
006      */
007     public abstract LRStruct nextLRS();
008    
009     /**
010      * Factory method to correctly  create the lazy list with this ILazyEval as the strategy for lazy evaluation.
011      */
012     public abstract LRStruct makeLRS();
013    
014      protected LRStruct makeLazyLRS(Object value){
015        LRStruct lrs = new LRStruct();
016        lrs.setHead(new LazyNonNullState(value, this));
017        return lrs;
018      }
019    }