# HG changeset patch # User Claus Gittinger # Date 858889108 -3600 # Node ID 00e7a1b3b07f4460c01f4e003eb491ee8d13b32e # Parent 035dbf8db9f3b0ed6a9ad57c3748433af2521c6b better distribution of the hash-key (look for zero-bits) diff -r 035dbf8db9f3 -r 00e7a1b3b07f ExtAddr.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 $' ! ! diff -r 035dbf8db9f3 -r 00e7a1b3b07f ExternalAddress.st --- 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 $' ! !