// SetIntBinOp - Abstract base class for (Op S, N) operators.
struct SetIntBinOp : public SetTheory::Operator {
- virtual void apply(SetTheory &ST, DagInit *Expr,
+ virtual void apply2(SetTheory &ST, DagInit *Expr,
RecSet &Set, int64_t N,
RecSet &Elts) =0;
IntInit *II = dynamic_cast<IntInit*>(Expr->arg_begin()[1]);
if (!II)
throw "Second argument must be an integer: " + Expr->getAsString();
- apply(ST, Expr, Set, II->getValue(), Elts);
+ apply2(ST, Expr, Set, II->getValue(), Elts);
}
};
// (shl S, N) Shift left, remove the first N elements.
struct ShlOp : public SetIntBinOp {
- void apply(SetTheory &ST, DagInit *Expr,
+ void apply2(SetTheory &ST, DagInit *Expr,
RecSet &Set, int64_t N,
RecSet &Elts) {
if (N < 0)
// (trunc S, N) Truncate after the first N elements.
struct TruncOp : public SetIntBinOp {
- void apply(SetTheory &ST, DagInit *Expr,
+ void apply2(SetTheory &ST, DagInit *Expr,
RecSet &Set, int64_t N,
RecSet &Elts) {
if (N < 0)
RotOp(bool Rev) : Reverse(Rev) {}
- void apply(SetTheory &ST, DagInit *Expr,
+ void apply2(SetTheory &ST, DagInit *Expr,
RecSet &Set, int64_t N,
RecSet &Elts) {
if (Reverse)
// (decimate S, N) Pick every N'th element of S.
struct DecimateOp : public SetIntBinOp {
- void apply(SetTheory &ST, DagInit *Expr,
+ void apply2(SetTheory &ST, DagInit *Expr,
RecSet &Set, int64_t N,
RecSet &Elts) {
if (N <= 0)
/// Operator - A callback representing a DAG operator.
struct Operator {
+ virtual ~Operator() {}
+
/// apply - Apply this operator to Expr's arguments and insert the result
/// in Elts.
virtual void apply(SetTheory&, DagInit *Expr, RecSet &Elts) =0;
/// set into a fully expanded list of elements. Expanders provide a way for
/// users to define named sets that can be used in DAG expressions.
struct Expander {
+ virtual ~Expander() {}
+
virtual void expand(SetTheory&, Record*, RecSet &Elts) =0;
};