]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
bindings: add get_disabled_list() and set_disabled_list()
authorMichael Schroeder <mls@suse.de>
Mon, 17 Jun 2019 09:20:04 +0000 (11:20 +0200)
committerMichael Schroeder <mls@suse.de>
Mon, 17 Jun 2019 09:20:04 +0000 (11:20 +0200)
bindings/solv.i

index 107192ffd3e99278b15c6513df7b4394de774902..984d085a83c665bb84c8e090cb5c75cc5720ca55 100644 (file)
@@ -2057,9 +2057,18 @@ typedef struct {
     queue_init(&q);
     int i;
     for (i = 2; i < $self->nsolvables; i++) {
-      if (!$self->solvables[i].repo)
-        continue;
-      if (!$self->considered || MAPTST($self->considered, i))
+      if ($self->solvables[i].repo && (!$self->considered || MAPTST($self->considered, i)))
+        queue_push(&q, i);
+    }
+    return q;
+  }
+
+  Queue get_disabled_list() {
+    Queue q;
+    queue_init(&q);
+    int i;
+    for (i = 2; i < $self->nsolvables; i++) {
+      if ($self->solvables[i].repo && ($self->considered && !MAPTST($self->considered, i)))
         queue_push(&q, i);
     }
     return q;
@@ -2081,6 +2090,28 @@ typedef struct {
     }
   }
 
+  void set_disabled_list(Queue q) {
+    int i;
+    Id p;
+    if (!q.count) {
+      if ($self->considered) {
+        map_free($self->considered);
+        $self->considered = solv_free($self->considered);
+      }
+      return;
+    }
+    if (!$self->considered) {
+      $self->considered = solv_calloc(1, sizeof(Map));
+      map_init($self->considered, $self->nsolvables);
+    }
+    map_setall($self->considered);
+    for (i = 0; i < q.count; i++) {
+      p = q.elements[i];
+      if (p > 0 && p < $self->nsolvables)
+        MAPCLR($self->considered, p);
+    }
+  }
+
   void setpooljobs(Queue solvejobs) {
     queue_free(&$self->pooljobs);
     queue_init_clone(&$self->pooljobs, &solvejobs);