return solv->ruletojob.elements[rid - solv->jobrules] + 1;
}
+/* job rule introspection */
Id
solver_rule2job(Solver *solv, Id rid, Id *whatp)
{
return solv->job.elements[idx];
}
+/* update/feature rule introspection */
Id
solver_rule2solvable(Solver *solv, Id rid)
{
return 0;
}
+static void
+solver_rule2rules_rec(Solver *solv, Id rid, Queue *q, Map *seen)
+{
+ int i;
+ Id rid2;
+
+ if (seen)
+ MAPSET(seen, rid);
+ for (i = solv->learnt_why.elements[rid - solv->learntrules]; (rid2 = solv->learnt_pool.elements[i]) != 0; i++)
+ {
+ if (seen)
+ {
+ if (MAPTST(seen, rid2))
+ continue;
+ if (rid2 >= solv->learntrules)
+ solver_rule2rules_rec(solv, rid2, q, seen);
+ continue;
+ }
+ queue_push(q, rid2);
+ }
+}
+
+/* learnt rule introspection */
+void
+solver_rule2rules(Solver *solv, Id rid, Queue *q, int recursive)
+{
+ queue_empty(q);
+ if (rid < solv->learntrules || rid >= solv->nrules)
+ return;
+ if (recursive)
+ {
+ Map seen;
+ map_init(&seen, solv->nrules);
+ solver_rule2rules_rec(solv, rid, q, &seen);
+ map_free(&seen);
+ }
+ else
+ solver_rule2rules_rec(solv, rid, q, 0);
+}
+
+
/* check if the newest versions of pi still provides the dependency we're looking for */
static int
solver_choicerulecheck(Solver *solv, Id pi, Rule *r, Map *m)
extern int solver_rule2jobidx(struct _Solver *solv, Id rid);
extern Id solver_rule2job(struct _Solver *solv, Id rid, Id *whatp);
extern Id solver_rule2solvable(struct _Solver *solv, Id rid);
+extern void solver_rule2rules(struct _Solver *solv, Id rid, Queue *q, int recursive);
#ifdef __cplusplus