Add hash_sdbm function

This is prepping for the addition of a hash field to each package to greatly
speed up the string comparisons we frequently do on package name in
_alpm_pkg_find.

Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
Dan McGee 2010-12-14 11:56:32 -06:00
parent d1d163c5a3
commit dbf59a6b14
2 changed files with 22 additions and 0 deletions

View File

@ -845,4 +845,25 @@ int _alpm_splitname(const char *target, pmpkg_t *pkg)
return(0);
}
/**
* Hash the given string to an unsigned long value.
* This is the standard sdbm hashing algorithm.
* @param str string to hash
* @return the hash value of the given string
*/
unsigned long _alpm_hash_sdbm(const char *str)
{
unsigned long hash = 0;
int c;
if(!str) {
return(hash);
}
while((c = *str++)) {
hash = c + (hash << 6) + (hash << 16) - hash;
}
return(hash);
}
/* vim: set ts=2 sw=2 noet: */

View File

@ -78,6 +78,7 @@ int _alpm_lstat(const char *path, struct stat *buf);
int _alpm_test_md5sum(const char *filepath, const char *md5sum);
char *_alpm_archive_fgets(char *line, size_t size, struct archive *a);
int _alpm_splitname(const char *target, pmpkg_t *pkg);
unsigned long _alpm_hash_sdbm(const char *str);
#ifndef HAVE_STRSEP
char *strsep(char **, const char *);