From: Sebastian Hack Date: Thu, 21 Jun 2007 16:47:46 +0000 (+0000) Subject: Added string hashing function X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=148554545066eb065e992d458c98bf01bf6adf55;p=libfirm Added string hashing function [r14705] --- diff --git a/include/libfirm/adt/hashptr.h b/include/libfirm/adt/hashptr.h index 043ba5b63..03dd1087a 100644 --- a/include/libfirm/adt/hashptr.h +++ b/include/libfirm/adt/hashptr.h @@ -27,13 +27,13 @@ #define FIRM_ADT_HASHPTR_H #include "firm_config.h" +#include "compiler.h" #define _FIRM_FNV_OFFSET_BASIS 2166136261U #define _FIRM_FNV_FNV_PRIME 16777619U /* Computing x * _FIRM_FNV_FNV_PRIME */ -#define _FIRM_FNV_TIMES_PRIME(x) \ - (((x) << 24) + ((x) << 8) + ((x) << 7) + ((x) << 4) + ((x) << 1) + 1) +#define _FIRM_FNV_TIMES_PRIME(x) ((x) * _FIRM_FNV_FNV_PRIME) static INLINE unsigned firm_fnv_hash(const unsigned char *data, unsigned bytes) { @@ -48,6 +48,19 @@ static INLINE unsigned firm_fnv_hash(const unsigned char *data, unsigned bytes) return hash; } +static INLINE unsigned firm_fnv_hash_str(const char *data) +{ + unsigned i; + unsigned hash = _FIRM_FNV_OFFSET_BASIS; + + for(i = 0; data[i] != '\0'; ++i) { + hash = _FIRM_FNV_TIMES_PRIME(hash); + hash ^= data[i]; + } + + return hash; +} + /** * hash a pointer value: Pointer addresses are mostly aligned to 4 * or 8 bytes. So we remove the lowest 3 bits