summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPang Yan Han <pangyanhan@gmail.com>2011-02-08 07:15:13 +0800
committerDan McGee <dan@archlinux.org>2011-02-07 20:26:11 -0600
commitda3b93460258fd24e2535360586fea668fa055fb (patch)
tree2e67b39e815a4307fc56a74fd315152b7461563f
parentbe9a60a338fd8591918711f5e826012a0d83136e (diff)
downloadpacman-da3b93460258fd24e2535360586fea668fa055fb.tar.gz
pacman-da3b93460258fd24e2535360586fea668fa055fb.zip
Refactor out common code in pkghash add functions
The overlapping code in _alpm_pkghash_add() and _alpm_pkghash_add_sorted() are now in a new static function pkghash_add_pkg(). This function has a third flag parameter which determines whether the package should be added in sorted order. Signed-off-by: Pang Yan Han <pangyanhan@gmail.com> Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r--lib/libalpm/pkghash.c45
1 files changed, 15 insertions, 30 deletions
diff --git a/lib/libalpm/pkghash.c b/lib/libalpm/pkghash.c
index 54805275..23b7493a 100644
--- a/lib/libalpm/pkghash.c
+++ b/lib/libalpm/pkghash.c
@@ -148,7 +148,7 @@ static pmpkghash_t *rehash(pmpkghash_t *oldhash)
return(newhash);
}
-pmpkghash_t *_alpm_pkghash_add(pmpkghash_t *hash, pmpkg_t *pkg)
+static pmpkghash_t *pkghash_add_pkg(pmpkghash_t *hash, pmpkg_t *pkg, int sorted)
{
alpm_list_t *ptr;
size_t position;
@@ -173,41 +173,24 @@ pmpkghash_t *_alpm_pkghash_add(pmpkghash_t *hash, pmpkg_t *pkg)
ptr->prev = ptr;
hash->hash_table[position] = ptr;
- hash->list = alpm_list_join(hash->list, ptr);
- hash->entries += 1;
+ if(!sorted){
+ hash->list = alpm_list_join(hash->list, ptr);
+ }else{
+ hash->list = alpm_list_mmerge(hash->list, ptr, _alpm_pkg_cmp);
+ }
+ hash->entries += 1;
return(hash);
}
-pmpkghash_t *_alpm_pkghash_add_sorted(pmpkghash_t *hash, pmpkg_t *pkg)
+pmpkghash_t *_alpm_pkghash_add(pmpkghash_t *hash, pmpkg_t *pkg)
{
- if(!hash) {
- return(_alpm_pkghash_add(hash, pkg));
- }
-
- alpm_list_t *ptr;
- size_t position;
-
- if((hash->entries + 1) / MAX_HASH_LOAD > hash->buckets) {
- hash = rehash(hash);
- }
-
- position = get_hash_position(pkg->name_hash, hash);
-
- ptr = calloc(1, sizeof(alpm_list_t));
- if(ptr == NULL) {
- return(hash);
- }
-
- ptr->data = pkg;
- ptr->next = NULL;
- ptr->prev = ptr;
-
- hash->hash_table[position] = ptr;
- hash->list = alpm_list_mmerge(hash->list, ptr, _alpm_pkg_cmp);
- hash->entries += 1;
+ return(pkghash_add_pkg(hash, pkg, 0));
+}
- return(hash);
+pmpkghash_t *_alpm_pkghash_add_sorted(pmpkghash_t *hash, pmpkg_t *pkg)
+{
+ return(pkghash_add_pkg(hash, pkg, 1));
}
static size_t move_one_entry(pmpkghash_t *hash, size_t start, size_t end)
@@ -344,3 +327,5 @@ pmpkg_t *_alpm_pkghash_find(pmpkghash_t *hash, const char *name)
return(NULL);
}
+
+/* vim: set ts=2 sw=2 noet: */