]> gitweb.factorcode.org Git - factor.git/commitdiff
classes.tuple: switch to python's tuplehash(). Fixes #153.
authorJohn Benediktsson <mrjbq7@gmail.com>
Sun, 2 Oct 2011 20:48:04 +0000 (13:48 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Sun, 2 Oct 2011 20:49:45 +0000 (13:49 -0700)
core/classes/tuple/tuple.factor

index c2a4de6ced9a9e328a9f023a57b37832ce200ecb..3c40efc2d35d7f63cf3b6199160d07e440b7b3c8 100644 (file)
@@ -350,17 +350,17 @@ M: tuple clone (clone) ; inline
 
 M: tuple equal? over tuple? [ tuple= ] [ 2drop f ] if ;
 
-GENERIC: tuple-hashcode ( n tuple -- x )
-
-M: tuple tuple-hashcode
+: tuple-hashcode ( depth obj -- hash )
     [
-        [ class hashcode ] [ tuple-size iota ] [ ] tri
-        [ rot ] dip [
-            swapd array-nth hashcode* sequence-hashcode-step
-        ] 2curry each
-    ] recursive-hashcode ;
-
-M: tuple hashcode* tuple-hashcode ;
+        [ drop 1000003 ] dip
+        [ class hashcode ] [ tuple-size ] bi
+        [ dup fixnum+fast 82520 fixnum+fast ] [ iota ] bi
+    ] 2keep [
+        swapd array-nth hashcode* rot fixnum-bitxor
+        pick fixnum*fast [ [ fixnum+fast ] keep ] dip swap
+    ] 2curry each drop nip 97531 fixnum+fast ; inline
+
+M: tuple hashcode* [ tuple-hashcode ] recursive-hashcode ;
 
 M: tuple-class new
     dup "prototype" word-prop [ (clone) ] [ tuple-layout <tuple> ] ?if ;