]> git.ipfire.org Git - pakfire.git/commitdiff
pakfire: Improve performance when importing relation lists
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 11 Feb 2021 14:30:13 +0000 (14:30 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 11 Feb 2021 14:30:13 +0000 (14:30 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/include/pakfire/relationlist.h
src/libpakfire/package.c
src/libpakfire/relationlist.c

index b733efdb01fe67090606a96b7b4fbb7253109a7f..a907fcf3e252ac878add1d9b365f82999c06bdf7 100644 (file)
@@ -38,7 +38,7 @@ PakfireRelation pakfire_relationlist_get(PakfireRelationList relationlist, int i
 #ifdef PAKFIRE_PRIVATE
 
 int pakfire_relationlist_from_queue(PakfireRelationList* list, Pakfire pakfire, Queue q);
-void pakfire_relationlist_clone_to_queue(PakfireRelationList relationlist, Queue* q);
+Queue* pakfire_relationlist_get_queue(PakfireRelationList list);
 
 #endif
 
index 1fad60c81dc7c3de5428af70c0aabbcf5707012f..811e6c436fd0ec43829027c1bae46d85ddaadc4a 100644 (file)
@@ -547,27 +547,16 @@ static PakfireRelationList pakfire_package_get_relationlist(PakfirePackage pkg,
 }
 
 static void pakfire_package_set_relationlist(PakfirePackage pkg, Id type, PakfireRelationList relationlist) {
-#if 0
-       // This implemention should be the fastest, but unfortunately does not work.
-       Queue q;
-       pakfire_relationlist_clone_to_queue(relationlist, &q);
-
        Solvable* s = get_solvable(pkg);
-       solvable_set_idarray(s, type, &q);
+       Queue* q = pakfire_relationlist_get_queue(relationlist);
 
-       queue_free(&q);
+#if 0
+       // This implemention should be the fastest, but unfortunately does not work.
+       solvable_set_idarray(s, type, q);
+#else
+       for (int i = 0; i < q->count; i++)
+               solvable_add_idarray(s, type, q->elements[i]);
 #endif
-
-       Solvable* s = get_solvable(pkg);
-       solvable_unset(s, type);
-
-       size_t size = pakfire_relationlist_size(relationlist);
-       for (unsigned int i = 0; i < size; i++) {
-               PakfireRelation relation = pakfire_relationlist_get(relationlist, i);
-               solvable_add_idarray(s, type, pakfire_relation_get_id(relation));
-
-               pakfire_relation_unref(relation);
-       }
 }
 
 static void pakfire_package_add_relation(PakfirePackage pkg, Id type, PakfireRelation relation) {
index 52c4b7146864c42c346a07573621caf80356f9ca..1cfd95541c9bf10c0984968301c57009b5c4b09e 100644 (file)
@@ -134,6 +134,6 @@ PAKFIRE_EXPORT PakfireRelation pakfire_relationlist_get(PakfireRelationList rela
        return pakfire_relation_create_from_id(relationlist->pakfire, id);
 }
 
-void pakfire_relationlist_clone_to_queue(PakfireRelationList relationlist, Queue* q) {
-       queue_init_clone(q, &relationlist->queue);
+Queue* pakfire_relationlist_get_queue(PakfireRelationList list) {
+       return &list->queue;
 }