SymmetryPropagator::SymmetryPropagator(PCSolver* solver, const Symmetry& sym) : Propagator(DEFAULTCONSTRID, solver, "symmetry propagator"), symmetrical(sym.getSymmetrical()), inverse(sym.getInverse()), nextToPropagate(0) { getPCSolver().accept(this); getPCSolver().accept(this, EV_BACKTRACK); getPCSolver().accept(this, EV_PROPAGATE); for (auto litpair : symmetrical) { getPCSolver().accept(this, litpair.first, FAST); // NOTE: negation of litpair.first is always in the symmetrical-map, so no need to add it twice. } }