--- /dev/null
+/*****************************************************************************/
+/* */
+/* 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;
+}
+
+
+
--- /dev/null
+/*****************************************************************************/
+/* */
+/* 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
+
+
+
+++ /dev/null
-/*****************************************************************************/
-/* */
-/* 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;
-}
-
-
-
+++ /dev/null
-/*****************************************************************************/
-/* */
-/* 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
-
-
-
filetype.o \
fname.o \
fp.o \
- hashstr.o \
+ hashfunc.o \
hashtab.o \
intstack.o \
matchpat.o \
filetype.obj \
fname.obj \
fp.obj \
- hashstr.obj \
+ hashfunc.obj \
hashtab.obj \
intstack.obj \
matchpat.obj \
/* */
/* */
/* */
-/* (C) 2003-2009, Ullrich von Bassewitz */
+/* (C) 2003-2011, Ullrich von Bassewitz */
/* Roemerstrasse 52 */
/* D-70794 Filderstadt */
/* EMail: uz@cc65.org */
/* common */
#include "coll.h"
-#include "hashstr.h"
+#include "hashfunc.h"
#include "strbuf.h"
#include "strpool.h"
#include "xmalloc.h"
/* Initialize the fields */
E->Next = 0;
E->Hash = Hash;
- E->Id = Id;
+ E->Id = Id;
SB_Init (&E->Buf);
SB_Copy (&E->Buf, S);