package org.basex.query.util; import org.basex.query.expr.Cast; import org.basex.query.expr.Expr; import org.basex.query.func.JavaMapping; import org.basex.query.item.FuncType; import org.basex.query.item.SeqType; /** * Wrapper that provides types for function expressions. * * @author BaseX Team 2005-12, BSD License * @author Leo Woerteler */ public final class TypedFunc { /** Function expression. */ public final Expr fun; /** Function type. */ public final FuncType type; /** * Constructor. * @param f function expression * @param ret return type * @param args argument types */ private TypedFunc(final Expr f, final SeqType ret, final SeqType... args) { this(f, FuncType.get(ret, args)); } /** * Constructor. * @param f function expression * @param ft function type */ public TypedFunc(final Expr f, final FuncType ft) { fun = f; type = ft; } /** * Gets the function's return type. * @return return type */ public SeqType ret() { return type.ret; } /** * Creates a type constructor function. * @param cast cast expression * @param to type to cast to * @return typed function */ public static TypedFunc constr(final Cast cast, final SeqType to) { return new TypedFunc(cast, to, SeqType.AAT_ZO); } /** * Creates a type constructor function. * @param f java function * @return typed function */ public static TypedFunc java(final JavaMapping f) { return new TypedFunc(f, FuncType.arity(f.expr.length)); } }