]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
Add a solver_decisionlist_merged() function
authorMichael Schroeder <mls@suse.de>
Mon, 12 Dec 2022 09:03:30 +0000 (10:03 +0100)
committerMichael Schroeder <mls@suse.de>
Mon, 12 Dec 2022 09:03:30 +0000 (10:03 +0100)
This returns the number of merged decisions for a decisionlist
entry, i.e. the number of decisions minus one.

src/decision.c
src/libsolv.ver
src/solver.h

index 982eabb18322c37de40bf6f6d67c487bb1ef6d96..d364f7ea705d3606835fb2c8c98e1683db38ff64 100644 (file)
@@ -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)
index 2eeec6cd38bfb6bb0e39196f9c5a0b09970ef36d..a9cefa6d80fa43983edb1f5b663400b3647a5bfd 100644 (file)
@@ -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;
index c9f70c4d18268db0f94d9a0a4e25b8ebbf7cf88a..f89e12099a25ec98aca258ca02eff4fcb54240ac 100644 (file)
@@ -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);