+/*
+ * we have enabled or disabled some of our rules. We now reenable all
+ * of our learnt rules but the ones that were learnt from rules that
+ * are now disabled.
+ */
+static void
+enabledisablelearntrules(Solver *solv)
+{
+ Pool *pool = solv->pool;
+ Rule *r;
+ Id why, *whyp;
+ int i;
+
+ if (pool->verbose)
+ printf("enabledisablelearntrules called\n");
+ for (i = solv->learntrules, r = solv->rules + i; i < solv->nrules; i++, r++)
+ {
+ whyp = solv->learnt_pool.elements + solv->learnt_why.elements[i - solv->learntrules];
+ while ((why = *whyp++) != 0)
+ {
+ if (why < 0 || why >= i)
+ abort(); /* cannot reference newer learnt rules */
+ if (!solv->rules[why].w1)
+ break;
+ }
+ /* why != 0: we found a disabled rule, disable the learnt rule */
+ if (why && r->w1)
+ {
+ if (pool->verbose)
+ {
+ printf("disabling learnt ");
+ printrule(solv, r);
+ }
+ disablerule(solv, r);
+ }
+ else if (!why && !r->w1)
+ {
+ if (pool->verbose)
+ {
+ printf("re-enabling learnt ");
+ printrule(solv, r);
+ }
+ enablerule(solv, r);
+ }
+ }
+}
+