14struct IntersectionExpr;
53 using Term = std::variant<const Expr *, const IndexMask *, IndexRange>;
60 const Expr &term_to_expr(
const Term &term);
67 return this->index + 1;
79 return static_cast<const UnionExpr &
>(*this);
std::variant< const Expr *, const IndexMask *, IndexRange > Term
const IntersectionExpr & intersect(const Span< Term > terms)
const UnionExpr & merge(const Span< Term > terms)
const DifferenceExpr & subtract(const Term &main_term, const Span< Term > subtract_terms)
IndexMask evaluate_expression(const Expr &expression, IndexMaskMemory &memory)
const DifferenceExpr & as_difference() const
const IntersectionExpr & as_intersection() const
const AtomicExpr & as_atomic() const
int expression_array_size() const
const UnionExpr & as_union() const
Vector< const Expr * > terms