From: ticktock35 Date: Mon, 15 Dec 2008 04:19:43 +0000 (+0000) Subject: opkg: apply "2-pkg-vec--Optimize-gross-inefficiency.patch" from OpenEmbedded X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=b67dc062ae9c689f0453d46bba47ceba832f676f;p=oweals%2Fopkg-lede.git opkg: apply "2-pkg-vec--Optimize-gross-inefficiency.patch" from OpenEmbedded pkg_vec: Optimize gross inefficiency. This module tries to implement *unique* vector (without duplicating objects), and does this by iterating thru all already existing elements. Thus, complexity of adding N elements was O(N^2). However, there're no grave reasons to do uniqueness at all: 1. First of all, if feeds are correct, there won't be duplicates. 2. Then, even if there will be, there won't be serious problems like segfaults. 3. Finally, for quite a few operations vectors is constructed from a hashtable, thus uniqueness is guaranteed (which reduces possible cases of non-uniqueness to values of Depends: and friends). All an all, remove dup check, and make ipkg work order of magnitude faster on a feed with few thousands of packages. git-svn-id: http://opkg.googlecode.com/svn/trunk@18 e8e0d7a0-c8d9-11dd-a880-a1081c7ac358 --- diff --git a/pkg_vec.c b/pkg_vec.c index 0fc47f8..2d22d91 100644 --- a/pkg_vec.c +++ b/pkg_vec.c @@ -104,6 +104,7 @@ void pkg_vec_insert(pkg_vec_t *vec, const pkg_t *pkg) int i; int found = 0; +#if 0 /* look for a duplicate pkg by name, version, and architecture */ for (i = 0; i < vec->len; i++) if ((strcmp(pkg->name, vec->pkgs[i]->name) == 0) @@ -112,6 +113,7 @@ void pkg_vec_insert(pkg_vec_t *vec, const pkg_t *pkg) found = 1; break; } +#endif /* we didn't find one, add it */ if(!found){ @@ -191,6 +193,7 @@ void abstract_pkg_vec_insert(abstract_pkg_vec_t *vec, abstract_pkg_t *pkg) { int i; +#if 0 /* look for a duplicate pkg by name */ for(i = 0; i < vec->len; i++) if (strcmp(pkg->name, vec->pkgs[i]->name) == 0) @@ -198,12 +201,15 @@ void abstract_pkg_vec_insert(abstract_pkg_vec_t *vec, abstract_pkg_t *pkg) /* we didn't find one, add it */ if(i == vec->len){ +#endif vec->pkgs = (abstract_pkg_t **) realloc(vec->pkgs, (vec->len + 1) * sizeof(abstract_pkg_t *)); vec->pkgs[vec->len] = pkg; vec->len++; +#if 0 } +#endif } abstract_pkg_t * abstract_pkg_vec_get(abstract_pkg_vec_t *vec, int i)