better distribution of the hash-key (look for zero-bits)
authorClaus Gittinger <cg@exept.de>
Thu, 20 Mar 1997 21:18:28 +0100
changeset 2472 00e7a1b3b07f
parent 2471 035dbf8db9f3
child 2473 dc61bb1e6d17
better distribution of the hash-key (look for zero-bits)
ExtAddr.st
ExternalAddress.st
--- a/ExtAddr.st	Thu Mar 20 21:17:44 1997 +0100
+++ b/ExtAddr.st	Thu Mar 20 21:18:28 1997 +0100
@@ -143,7 +143,29 @@
 %{  /* NOCONTEXT */
     unsigned addr = (unsigned) __externalAddressVal(self);
 
-    RETURN (__MKSMALLINT(addr >> 2));
+    if (addr > _MAX_INT) {
+	if ((addr & 1) == 0) {
+	    addr >>= 1;
+	}
+	if (addr > _MAX_INT) {
+	    if ((addr & 1) == 0) {
+		addr >>= 1;
+	    }
+	}
+	if (addr > _MAX_INT) {
+	    addr &= _MAX_INT;
+	}
+    } else {
+	addr <<= 1;
+	if (addr <= _MAX_INT) {
+	    addr <<= 1;
+	    if (addr <= _MAX_INT) {
+		addr <<= 1;
+	    }
+	}
+	addr >>= 1;
+    }
+    RETURN (__MKSMALLINT(addr));
 %}
 ! !
 
@@ -167,5 +189,5 @@
 !ExternalAddress class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Attic/ExtAddr.st,v 1.6 1996-11-11 11:31:08 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Attic/ExtAddr.st,v 1.7 1997-03-20 20:18:28 cg Exp $'
 ! !
--- a/ExternalAddress.st	Thu Mar 20 21:17:44 1997 +0100
+++ b/ExternalAddress.st	Thu Mar 20 21:18:28 1997 +0100
@@ -143,7 +143,29 @@
 %{  /* NOCONTEXT */
     unsigned addr = (unsigned) __externalAddressVal(self);
 
-    RETURN (__MKSMALLINT(addr >> 2));
+    if (addr > _MAX_INT) {
+	if ((addr & 1) == 0) {
+	    addr >>= 1;
+	}
+	if (addr > _MAX_INT) {
+	    if ((addr & 1) == 0) {
+		addr >>= 1;
+	    }
+	}
+	if (addr > _MAX_INT) {
+	    addr &= _MAX_INT;
+	}
+    } else {
+	addr <<= 1;
+	if (addr <= _MAX_INT) {
+	    addr <<= 1;
+	    if (addr <= _MAX_INT) {
+		addr <<= 1;
+	    }
+	}
+	addr >>= 1;
+    }
+    RETURN (__MKSMALLINT(addr));
 %}
 ! !
 
@@ -167,5 +189,5 @@
 !ExternalAddress class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/ExternalAddress.st,v 1.6 1996-11-11 11:31:08 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/ExternalAddress.st,v 1.7 1997-03-20 20:18:28 cg Exp $'
 ! !