]> git.sur5r.net Git - cc65/commitdiff
Renamed hashstr to hashfunc and added an integer hash function.
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 12 Aug 2011 15:32:08 +0000 (15:32 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 12 Aug 2011 15:32:08 +0000 (15:32 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@5155 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/common/hashfunc.c [new file with mode: 0644]
src/common/hashfunc.h [new file with mode: 0644]
src/common/hashstr.c [deleted file]
src/common/hashstr.h [deleted file]
src/common/make/gcc.mak
src/common/make/watcom.mak
src/common/strpool.c

diff --git a/src/common/hashfunc.c b/src/common/hashfunc.c
new file mode 100644 (file)
index 0000000..a26d163
--- /dev/null
@@ -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 (file)
index 0000000..22bd599
--- /dev/null
@@ -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 (file)
index 4b50731..0000000
+++ /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 (file)
index ba591c1..0000000
+++ /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
-
-
-
index 58fd1b7f8e727eda080ac7c5907e79dc3bbcdd63..558c97337088cc1680f09d740156452cdca6b44d 100644 (file)
@@ -28,7 +28,7 @@ OBJS =        abend.o         \
        filetype.o      \
        fname.o         \
        fp.o            \
-       hashstr.o       \
+       hashfunc.o      \
        hashtab.o       \
        intstack.o      \
        matchpat.o      \
index d870c3f02526b1ea2c9b8cc9178fea6859179ba8..8b59787ba342106415ef41f84f2b65b871456628 100644 (file)
@@ -70,7 +70,7 @@ OBJS =        abend.obj       \
         filetype.obj    \
        fname.obj       \
         fp.obj          \
-       hashstr.obj     \
+       hashfunc.obj    \
         hashtab.obj     \
         intstack.obj    \
         matchpat.obj    \
index 0387de4035e104034853055b7663b2dde6fee4d2..9157a73a820bcf105310a06d92a18950beda28b0 100644 (file)
@@ -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);