001package org.clafer.ir;
002
003/**
004 * An immutable expression that evaluates to an integer.
005 *
006 * @author jimmy
007 */
008public interface IrIntExpr extends IrExpr {
009
010    /**
011     * Domain cannot be empty.
012     *
013     * @return the domain of values this expression can take
014     */
015    public IrDomain getDomain();
016
017    /**
018     * Dynamic dispatch on the visitor.
019     *
020     * @param <A> the parameter type
021     * @param <B> the return type
022     * @param visitor the visitor
023     * @param a the parameter
024     * @return the return value
025     */
026    public <A, B> B accept(IrIntExprVisitor<A, B> visitor, A a);
027}