From: Michael Tremer Date: Thu, 11 Feb 2021 14:30:13 +0000 (+0000) Subject: pakfire: Improve performance when importing relation lists X-Git-Tag: 0.9.28~1285^2~765 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=97eb9a5877a67135b039c66524d2060d536a1011;p=pakfire.git pakfire: Improve performance when importing relation lists Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/include/pakfire/relationlist.h b/src/libpakfire/include/pakfire/relationlist.h index b733efdb0..a907fcf3e 100644 --- a/src/libpakfire/include/pakfire/relationlist.h +++ b/src/libpakfire/include/pakfire/relationlist.h @@ -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 diff --git a/src/libpakfire/package.c b/src/libpakfire/package.c index 1fad60c81..811e6c436 100644 --- a/src/libpakfire/package.c +++ b/src/libpakfire/package.c @@ -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) { diff --git a/src/libpakfire/relationlist.c b/src/libpakfire/relationlist.c index 52c4b7146..1cfd95541 100644 --- a/src/libpakfire/relationlist.c +++ b/src/libpakfire/relationlist.c @@ -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; }