Constraints constraintsRemovingRedundantEqualities(Variables const &vars, Constraints const &constraints) { EqualityConstraintSet equalitySets(vars); Constraints cs = Constraints(constraints.size()); int csSize = 0; for (unsigned i = 0; i < constraints.size(); ++i) { Constraint *c = constraints[i]; if (c->equality) { if (!equalitySets.isRedundant(c->left, c->right, c->gap)) { // Only add non-redundant equalities equalitySets.mergeSets(c->left, c->right, c->gap); cs[csSize++] = c; } } else { // Add all non-equalities cs[csSize++] = c; } } cs.resize(csSize); return cs; }
vector<Subtask*> getSubtasks() { try { Constraints(); return ConstraintsCollector::collectSubtasks(); } catch (NotImplementedException& e1) { for (auto subtaskBlock : subtaskBlocks) { try { ConstraintsCollector::newSubtask(); (this->*subtaskBlock)(); } catch (NotImplementedException& e2) { vector<Subtask*> subtasks = ConstraintsCollector::collectSubtasks(); subtasks.pop_back(); return subtasks; } } return ConstraintsCollector::collectSubtasks(); } }