summaryrefslogtreecommitdiffstats
path: root/lib/libalpm/be_sync.c
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2012-01-02 20:29:40 +0100
committerDan McGee <dan@archlinux.org>2012-01-03 02:41:42 +0100
commit0b9cd9448c16dcf5e21ee8822698dbe908db520f (patch)
tree51061eb85fe69c880cf2497977102e022484152f /lib/libalpm/be_sync.c
parent177beb91c96a078f729bd11c2f6c1144082e69e3 (diff)
downloadpacman-0b9cd9448c16dcf5e21ee8822698dbe908db520f.tar.gz
pacman-0b9cd9448c16dcf5e21ee8822698dbe908db520f.tar.xz
pkghash improvements/modifications
This patch changes a variety of small things related to our pkghash implementation with an eye toward performance, especially on native 32-bit systems. * Use `unsigned int` rather than `size_t` for hash sizes. We already return ERANGE for any attempted creation of a hash greater than 1 million elements, so unsigned int is more than large enough for our purposes. Switching to this type allows 32 bit systems to do native math without helper functions from libgcc. * _alpm_pkghash_create() now internally adds extra padding for additional array elements, rather than that being the responsibility of the caller. * #define values are moved into static const values in pkghash.c; a new `stride` value is also extracted (but remains set at 1). * Division and modulus operators are removed from the normal find and add paths if possible. We store the upper limit of the number of elements in the hash so we no longer need to calculate this every element addition. When doing wraparound position calculations, we only apply the modulus operator if the value is greater than the number of buckets. Signed-off-by: Dan McGee <dan@archlinux.org>
Diffstat (limited to 'lib/libalpm/be_sync.c')
-rw-r--r--lib/libalpm/be_sync.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/lib/libalpm/be_sync.c b/lib/libalpm/be_sync.c
index 07134e79..76c31f5a 100644
--- a/lib/libalpm/be_sync.c
+++ b/lib/libalpm/be_sync.c
@@ -439,8 +439,7 @@ static int sync_db_populate(alpm_db_t *db)
}
est_count = estimate_package_count(&buf, archive);
- /* initialize hash at 66% full */
- db->pkgcache = _alpm_pkghash_create(est_count * 3 / 2);
+ db->pkgcache = _alpm_pkghash_create(est_count);
if(db->pkgcache == NULL) {
db->handle->pm_errno = ALPM_ERR_MEMORY;
goto cleanup;