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);
|
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: */
|
/* 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);
|
int _alpm_test_md5sum(const char *filepath, const char *md5sum);
|
||||||
char *_alpm_archive_fgets(char *line, size_t size, struct archive *a);
|
char *_alpm_archive_fgets(char *line, size_t size, struct archive *a);
|
||||||
int _alpm_splitname(const char *target, pmpkg_t *pkg);
|
int _alpm_splitname(const char *target, pmpkg_t *pkg);
|
||||||
|
unsigned long _alpm_hash_sdbm(const char *str);
|
||||||
|
|
||||||
#ifndef HAVE_STRSEP
|
#ifndef HAVE_STRSEP
|
||||||
char *strsep(char **, const char *);
|
char *strsep(char **, const char *);
|
||||||
|
|
Loading…
Reference in New Issue