001    /*
002    // $Id: //open/mondrian/src/main/mondrian/calc/TupleCalc.java#5 $
003    // This software is subject to the terms of the Common Public License
004    // Agreement, available at the following URL:
005    // http://www.opensource.org/licenses/cpl.html.
006    // Copyright (C) 2006-2007 Julian Hyde
007    // All Rights Reserved.
008    // You must accept the terms of that agreement to use this software.
009    */
010    package mondrian.calc;
011    
012    import mondrian.olap.Member;
013    import mondrian.olap.Evaluator;
014    
015    /**
016     * Expression which yields a tuple.
017     *
018     * <p>The tuple is represented as an array of {@link Member} objects,
019     * <code>null</code> to represent the null tuple.
020     *
021     * <p>When implementing this interface, it is convenient to extend
022     * {@link mondrian.calc.impl.AbstractTupleCalc}, but it is not required.
023     *
024     * @author jhyde
025     * @version $Id: //open/mondrian/src/main/mondrian/calc/TupleCalc.java#5 $
026     * @since Sep 27, 2005
027     */
028    public interface TupleCalc extends Calc {
029        /**
030         * Evaluates this expression to yield a tuple.
031         *
032         * <p>A tuple cannot contain any null members. If any of the members is
033         * null, this method must return a null.
034         *
035         * @post result == null || !tupleContainsNullMember(result)
036         *
037         * @param evaluator Evaluation context
038         * @return an array of members, or null to represent the null tuple
039         */
040        Member[] evaluateTuple(Evaluator evaluator);
041    }
042    
043    // End TupleCalc.java