From: uz Date: Fri, 12 Aug 2011 15:32:08 +0000 (+0000) Subject: Renamed hashstr to hashfunc and added an integer hash function. X-Git-Tag: V2.13.3~307 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=b8e68bed955d909762713c51edcc18b0aaa3314d;p=cc65 Renamed hashstr to hashfunc and added an integer hash function. git-svn-id: svn://svn.cc65.org/cc65/trunk@5155 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- diff --git a/src/common/hashfunc.c b/src/common/hashfunc.c new file mode 100644 index 000000000..a26d1635b --- /dev/null +++ b/src/common/hashfunc.c @@ -0,0 +1,94 @@ +/*****************************************************************************/ +/* */ +/* hashfunc.c */ +/* */ +/* Hash functions */ +/* */ +/* */ +/* */ +/* (C) 1998-2011, Ullrich von Bassewitz */ +/* Roemerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +/* common */ +#include "hashfunc.h" + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +unsigned HashInt (unsigned V) +/* Return a hash value for the given integer. The function uses Robert + * Jenkins' 32 bit integer hash function taken from + * http://www.concentric.net/~ttwang/tech/inthash.htm + * For 16 bit integers, the function may be suboptimal. + */ +{ + V = (V + 0x7ed55d16) + (V << 12); + V = (V ^ 0xc761c23c) ^ (V >> 19); + V = (V + 0x165667b1) + (V << 5); + V = (V + 0xd3a2646c) ^ (V << 9); + V = (V + 0xfd7046c5) + (V << 3); + V = (V ^ 0xb55a4f09) ^ (V >> 16); + return V; +} + + + +unsigned HashStr (const char* S) +/* Return a hash value for the given string */ +{ + unsigned L, H; + + /* Do the hash */ + H = L = 0; + while (*S) { + H = ((H << 3) ^ ((unsigned char) *S++)) + L++; + } + return H; +} + + + +unsigned HashBuf (const StrBuf* S) +/* Return a hash value for the given string buffer */ +{ + unsigned I, L, H; + + /* Do the hash */ + H = L = 0; + for (I = 0; I < SB_GetLen (S); ++I) { + H = ((H << 3) ^ ((unsigned char) SB_AtUnchecked (S, I))) + L++; + } + return H; +} + + + diff --git a/src/common/hashfunc.h b/src/common/hashfunc.h new file mode 100644 index 000000000..22bd599fe --- /dev/null +++ b/src/common/hashfunc.h @@ -0,0 +1,69 @@ +/*****************************************************************************/ +/* */ +/* hashfunc.h */ +/* */ +/* Hash functions */ +/* */ +/* */ +/* */ +/* (C) 1998-2011, Ullrich von Bassewitz */ +/* Roemerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +#ifndef HASHFUNC_H +#define HASHFUNC_H + + + +/* common */ +#include "attrib.h" +#include "strbuf.h" + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +unsigned HashInt (unsigned V) attribute ((const)); +/* Return a hash value for the given integer. */ + +unsigned HashStr (const char* S) attribute ((const)); +/* Return a hash value for the given string */ + +unsigned HashBuf (const StrBuf* S) attribute ((const)); +/* Return a hash value for the given string buffer */ + + + +/* End of hashfunc.h */ + +#endif + + + diff --git a/src/common/hashstr.c b/src/common/hashstr.c deleted file mode 100644 index 4b50731c3..000000000 --- a/src/common/hashstr.c +++ /dev/null @@ -1,76 +0,0 @@ -/*****************************************************************************/ -/* */ -/* hashstr.c */ -/* */ -/* Hash function for strings */ -/* */ -/* */ -/* */ -/* (C) 1998-2008 Ullrich von Bassewitz */ -/* Roemerstrasse 52 */ -/* D-70794 Filderstadt */ -/* EMail: uz@cc65.org */ -/* */ -/* */ -/* This software is provided 'as-is', without any expressed or implied */ -/* warranty. In no event will the authors be held liable for any damages */ -/* arising from the use of this software. */ -/* */ -/* Permission is granted to anyone to use this software for any purpose, */ -/* including commercial applications, and to alter it and redistribute it */ -/* freely, subject to the following restrictions: */ -/* */ -/* 1. The origin of this software must not be misrepresented; you must not */ -/* claim that you wrote the original software. If you use this software */ -/* in a product, an acknowledgment in the product documentation would be */ -/* appreciated but is not required. */ -/* 2. Altered source versions must be plainly marked as such, and must not */ -/* be misrepresented as being the original software. */ -/* 3. This notice may not be removed or altered from any source */ -/* distribution. */ -/* */ -/*****************************************************************************/ - - - -/* common */ -#include "hashstr.h" - - - -/*****************************************************************************/ -/* Code */ -/*****************************************************************************/ - - - -unsigned HashStr (const char* S) -/* Return a hash value for the given string */ -{ - unsigned L, H; - - /* Do the hash */ - H = L = 0; - while (*S) { - H = ((H << 3) ^ ((unsigned char) *S++)) + L++; - } - return H; -} - - - -unsigned HashBuf (const StrBuf* S) -/* Return a hash value for the given string buffer */ -{ - unsigned I, L, H; - - /* Do the hash */ - H = L = 0; - for (I = 0; I < SB_GetLen (S); ++I) { - H = ((H << 3) ^ ((unsigned char) SB_AtUnchecked (S, I))) + L++; - } - return H; -} - - - diff --git a/src/common/hashstr.h b/src/common/hashstr.h deleted file mode 100644 index ba591c108..000000000 --- a/src/common/hashstr.h +++ /dev/null @@ -1,66 +0,0 @@ -/*****************************************************************************/ -/* */ -/* hashstr.h */ -/* */ -/* Hash function for strings */ -/* */ -/* */ -/* */ -/* (C) 1998-2008 Ullrich von Bassewitz */ -/* Roemerstrasse 52 */ -/* D-70794 Filderstadt */ -/* EMail: uz@cc65.org */ -/* */ -/* */ -/* This software is provided 'as-is', without any expressed or implied */ -/* warranty. In no event will the authors be held liable for any damages */ -/* arising from the use of this software. */ -/* */ -/* Permission is granted to anyone to use this software for any purpose, */ -/* including commercial applications, and to alter it and redistribute it */ -/* freely, subject to the following restrictions: */ -/* */ -/* 1. The origin of this software must not be misrepresented; you must not */ -/* claim that you wrote the original software. If you use this software */ -/* in a product, an acknowledgment in the product documentation would be */ -/* appreciated but is not required. */ -/* 2. Altered source versions must be plainly marked as such, and must not */ -/* be misrepresented as being the original software. */ -/* 3. This notice may not be removed or altered from any source */ -/* distribution. */ -/* */ -/*****************************************************************************/ - - - -#ifndef HASHSTR_H -#define HASHSTR_H - - - -/* common */ -#include "attrib.h" -#include "strbuf.h" - - - -/*****************************************************************************/ -/* Code */ -/*****************************************************************************/ - - - -unsigned HashStr (const char* S) attribute ((const)); -/* Return a hash value for the given string */ - -unsigned HashBuf (const StrBuf* S) attribute ((const)); -/* Return a hash value for the given string buffer */ - - - -/* End of hashstr.h */ - -#endif - - - diff --git a/src/common/make/gcc.mak b/src/common/make/gcc.mak index 58fd1b7f8..558c97337 100644 --- a/src/common/make/gcc.mak +++ b/src/common/make/gcc.mak @@ -28,7 +28,7 @@ OBJS = abend.o \ filetype.o \ fname.o \ fp.o \ - hashstr.o \ + hashfunc.o \ hashtab.o \ intstack.o \ matchpat.o \ diff --git a/src/common/make/watcom.mak b/src/common/make/watcom.mak index d870c3f02..8b59787ba 100644 --- a/src/common/make/watcom.mak +++ b/src/common/make/watcom.mak @@ -70,7 +70,7 @@ OBJS = abend.obj \ filetype.obj \ fname.obj \ fp.obj \ - hashstr.obj \ + hashfunc.obj \ hashtab.obj \ intstack.obj \ matchpat.obj \ diff --git a/src/common/strpool.c b/src/common/strpool.c index 0387de403..9157a73a8 100644 --- a/src/common/strpool.c +++ b/src/common/strpool.c @@ -6,7 +6,7 @@ /* */ /* */ /* */ -/* (C) 2003-2009, Ullrich von Bassewitz */ +/* (C) 2003-2011, Ullrich von Bassewitz */ /* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ @@ -46,7 +46,7 @@ /* common */ #include "coll.h" -#include "hashstr.h" +#include "hashfunc.h" #include "strbuf.h" #include "strpool.h" #include "xmalloc.h" @@ -84,7 +84,7 @@ static StringPoolEntry* NewStringPoolEntry (const StrBuf* S, unsigned Hash, unsi /* Initialize the fields */ E->Next = 0; E->Hash = Hash; - E->Id = Id; + E->Id = Id; SB_Init (&E->Buf); SB_Copy (&E->Buf, S);