package org.basex.query.expr; import static org.basex.query.QueryText.*; import java.io.IOException; import org.basex.io.serial.Serializer; import org.basex.query.QueryContext; import org.basex.query.QueryException; import org.basex.query.item.Bln; import org.basex.query.item.SeqType; import org.basex.util.InputInfo; import org.basex.util.Token; import org.basex.util.Util; /** * Instance test. * * @author BaseX Team 2005-12, BSD License * @author Christian Gruen */ public final class Instance extends Single { /** Instance. */ private final SeqType seq; /** * Constructor. * @param ii input info * @param e expression * @param s sequence type */ public Instance(final InputInfo ii, final Expr e, final SeqType s) { super(ii, e); seq = s; type = SeqType.BLN; } @Override public Expr comp(final QueryContext ctx) throws QueryException { super.comp(ctx); return checkUp(expr, ctx).isValue() ? preEval(ctx) : this; } @Override public Bln item(final QueryContext ctx, final InputInfo ii) throws QueryException { return Bln.get(seq.instance(ctx.value(expr))); } @Override public void plan(final Serializer ser) throws IOException { ser.openElement(this, TYP, Token.token(seq.toString())); expr.plan(ser); ser.closeElement(); } @Override public String toString() { return Util.info("% instance of %", expr, seq); } }