Hi,

I just want to call attention to that change. If anybody sees a problem with this drop me a note.

What happens is that every hash is "compressed" to a 32bit unsigned integer. I'm not sure why the hash function uses the hex representation instead of using pack, but I didn't want to change that.


On 2006-10-18 15:01:38 +0200, Christian Zagrodnick <[EMAIL PROTECTED]> said:

Update of /cvs-repository/Products/Ape/lib/apelib/zodb3
In directory cvs.zope.org:/tmp/cvs-serv6816

Modified Files:
        storage.py Log Message:
fixed the hash64 function for 64 bit machines

the hash64 maps all hash result into an unsigned 32-bit integer which did break on 64bit machines because the python hash has doubled in size.


=== Products/Ape/lib/apelib/zodb3/storage.py 1.17 => 1.18 ===
--- Products/Ape/lib/apelib/zodb3/storage.py:1.17       Wed Jan 12 01:53:42 2005
+++ Products/Ape/lib/apelib/zodb3/storage.py    Wed Oct 18 09:01:36 2006
@@ -87,10 +87,16 @@
     def hash64(self, value):
         """Returns an 8-byte hash value.
         """
-        v = hash(value)
-        if v < 0:
+        if v < -2L ** 32:
+            v += 2L ** 64
+        elif v < 0:
             # Treat the hash as an unsigned 32-bit integer
             v += 2L ** 32
+        if v > 2L ** 32:
+            v = v / 2 ** 32
+
+        assert v >= 0 and v <= 2L ** 32
+
         h = '%08x' % v
         if h == HASH0:
             # Avoid the special zero hash.

_______________________________________________
Zope-CVS maillist  -  [EMAIL PROTECTED]
http://mail.zope.org/mailman/listinfo/zope-cvs

Zope CVS instructions: http://dev.zope.org/CVS

--
Christian Zagrodnick

gocept gmbh & co. kg  ·  forsterstrasse 29 · 06112 halle/saale
www.gocept.com · fon. +49 345 12298894 · fax. +49 345 12298891



_______________________________________________
For more information about ZODB, see the ZODB Wiki:
http://www.zope.org/Wikis/ZODB/

ZODB-Dev mailing list  -  ZODB-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zodb-dev

Reply via email to