r3936 - trunk/src/target/opkg
thomas at sita.openmoko.org
thomas at sita.openmoko.org
Wed Jan 23 13:43:56 CET 2008
Author: thomas
Date: 2008-01-23 13:43:55 +0100 (Wed, 23 Jan 2008)
New Revision: 3936
Modified:
trunk/src/target/opkg/pkg_vec.c
Log:
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.
Modified: trunk/src/target/opkg/pkg_vec.c
===================================================================
--- trunk/src/target/opkg/pkg_vec.c 2008-01-23 12:34:44 UTC (rev 3935)
+++ trunk/src/target/opkg/pkg_vec.c 2008-01-23 12:43:55 UTC (rev 3936)
@@ -104,6 +104,7 @@
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 @@
found = 1;
break;
}
+#endif
/* we didn't find one, add it */
if(!found){
@@ -191,6 +193,7 @@
{
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 @@
/* 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)
More information about the commitlog
mailing list