diff options
author | Pang Yan Han <pangyanhan@gmail.com> | 2011-02-08 07:15:13 +0800 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2011-02-07 20:26:11 -0600 |
commit | da3b93460258fd24e2535360586fea668fa055fb (patch) | |
tree | 2e67b39e815a4307fc56a74fd315152b7461563f /lib | |
parent | be9a60a338fd8591918711f5e826012a0d83136e (diff) | |
download | pacman-da3b93460258fd24e2535360586fea668fa055fb.tar.xz |
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>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libalpm/pkghash.c | 45 |
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: */ |