    001// Copyright 2010 The Apache Software Foundation
    002//
    003// Licensed under the Apache License, Version 2.0 (the "License");
    004// you may not use this file except in compliance with the License.
    005// You may obtain a copy of the License at
    006//
    007// http://www.apache.org/licenses/LICENSE-2.0
    008//
    009// Unless required by applicable law or agreed to in writing, software
    010// distributed under the License is distributed on an "AS IS" BASIS,
    011// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    012// See the License for the specific language governing permissions and
    013// limitations under the License.
    014
    015package org.apache.tapestry5.func;
    016
    017/**
    018 * The result of the evaluation of a {@link LazyFunction}.
    019 *
    020 * @since 5.2.0
    021 */
    022public class LazyContinuation<T>
    023{
    024    private final LazyValue<T> nextValue;
    025
    026    private final LazyFunction<T> nextFunction;
    027
    028    public LazyContinuation(T nextValue, LazyFunction<T> nextFunction)
    029    {
    030        this(new StaticValue<T>(nextValue), nextFunction);
    031    }
    032
    033    public LazyContinuation(LazyValue<T> nextValue, LazyFunction<T> nextFunction)
    034    {
    035        assert nextValue != null;
    036        assert nextFunction != null;
    037
    038        this.nextValue = nextValue;
    039        this.nextFunction = nextFunction;
    040    }
    041
    042    /**
    043     * Returns, indirectly, the next value computed by the lazy function. The LazyValue represents
    044     * a deferred computation.
    045     */
    046    public LazyValue<T> nextValue()
    047    {
    048        return nextValue;
    049    }
    050
    051    /** Returns a new lazy function that will return the next continuation. */
    052    public LazyFunction<T> nextFunction()
    053    {
    054        return nextFunction;
    055    }
    056
    057}