From: Michael Schroeder Date: Mon, 12 Dec 2022 09:03:30 +0000 (+0100) Subject: Add a solver_decisionlist_merged() function X-Git-Tag: 0.7.23~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e4acd4a875405874c803d4a6b7af05fb9ee2267d;p=thirdparty%2Flibsolv.git Add a solver_decisionlist_merged() function This returns the number of merged decisions for a decisionlist entry, i.e. the number of decisions minus one. --- diff --git a/src/decision.c b/src/decision.c index 982eabb1..d364f7ea 100644 --- a/src/decision.c +++ b/src/decision.c @@ -904,6 +904,16 @@ solver_decisionlist_solvables(Solver *solv, Queue *decisionlistq, int pos, Queue } } +int +solver_decisionlist_merged(Solver *solv, Queue *decisionlistq, int pos) +{ + int cnt = 0; + for (; pos < decisionlistq->count; pos += 8, cnt++) + if ((decisionlistq->elements[pos + 3] & DMS_MERGED) == 0) + break; + return cnt; +} + /* special version of solver_ruleinfo2str which supports merged decisions */ const char * solver_decisioninfo2str(Solver *solv, int bits, int type, Id from, Id to, Id dep) diff --git a/src/libsolv.ver b/src/libsolv.ver index 2eeec6cd..a9cefa6d 100644 --- a/src/libsolv.ver +++ b/src/libsolv.ver @@ -355,6 +355,7 @@ SOLV_1.0 { solver_create_state_maps; solver_create_transaction; solver_decisioninfo2str; + solver_decisionlist_merged; solver_decisionlist_solvables; solver_decisionreason2str; solver_describe_decision; diff --git a/src/solver.h b/src/solver.h index c9f70c4d..f89e1209 100644 --- a/src/solver.h +++ b/src/solver.h @@ -381,6 +381,7 @@ extern void solver_get_decisionlist(Solver *solv, Id p, int flags, Queue *decisi extern void solver_get_decisionlist_multiple(Solver *solv, Queue *pq, int flags, Queue *decisionlistq); extern void solver_get_learnt(Solver *solv, Id id, int flags, Queue *q); extern void solver_decisionlist_solvables(Solver *solv, Queue *decisionlistq, int pos, Queue *q); +extern int solver_decisionlist_merged(Solver *solv, Queue *decisionlistq, int pos); extern int solver_alternatives_count(Solver *solv); extern int solver_get_alternative(Solver *solv, Id alternative, Id *idp, Id *fromp, Id *chosenp, Queue *choices, int *levelp);