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:
parent
d1d163c5a3
commit
dbf59a6b14
|
@ -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: */
|
||||
|
|
|
@ -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 *);
|
||||
|
|
Loading…
Reference in New Issue