]> gitweb.factorcode.org Git - factor.git/commitdiff
Revert "sequences: change to use tuple-hashcode algorithm, make string-hashcode work...
authorJohn Benediktsson <mrjbq7@gmail.com>
Thu, 6 Oct 2011 15:37:05 +0000 (08:37 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Thu, 6 Oct 2011 15:37:05 +0000 (08:37 -0700)
This reverts commit 7b7b0d45421cf7bf2d959fb482c7a63cdb3d04ed.

core/sequences/sequences-docs.factor
core/sequences/sequences.factor
core/strings/strings.factor

index c06cdb191c0589534f32c659f13bb6f40660d0eb..f256c965d52fc0eb714bfa568d940a1d29f66d31 100644 (file)
@@ -1309,7 +1309,13 @@ HELP: sequence-hashcode
 { $values
      { "n" integer } { "seq" sequence }
      { "x" integer } }
-{ $description "Iterates over a sequence, computes a hashcode with " { $link hashcode* } " for each element, and combines them." } ;
+{ $description "Iterates over a sequence, computes a hashcode with " { $link hashcode* } " for each element, and combines them using " { $link sequence-hashcode-step } "." } ;
+
+HELP: sequence-hashcode-step
+{ $values
+     { "oldhash" integer } { "newpart" integer }
+     { "newhash" integer } }
+{ $description "An implementation word that computes a running hashcode of a sequence using some bit-twiddling. The resulting hashcode is always a fixnum." } ;
 
 HELP: short
 { $values
index 942df32852c24c7a682043ada94d633d1262dd35..153ef91809238af1f4da8683a759d3644518bf47 100644 (file)
@@ -600,14 +600,18 @@ ERROR: assert-sequence got expected ;
 : assert-sequence= ( a b -- )
     2dup sequence= [ 2drop ] [ assert-sequence ] if ;
 
-: sequence-hashcode ( depth seq -- hash )
-    [
-        [ drop 1000003 HEX: 345678 ] dip length
-        [ dup fixnum+fast 82520 fixnum+fast ] [ iota ] bi
-    ] 2keep [
-        swapd nth-unsafe hashcode* rot fixnum-bitxor
-        pick fixnum*fast [ [ fixnum+fast ] keep ] dip swap
-    ] 2curry each drop nip 97531 fixnum+fast ; inline
+<PRIVATE
+
+: sequence-hashcode-step ( oldhash newpart -- newhash )
+    >fixnum swap [
+        [ -2 fixnum-shift-fast ] [ 5 fixnum-shift-fast ] bi
+        fixnum+fast fixnum+fast
+    ] keep fixnum-bitxor ; inline
+
+PRIVATE>
+
+: sequence-hashcode ( n seq -- x )
+    [ 0 ] 2dip [ hashcode* sequence-hashcode-step ] with each ; inline
 
 M: reversed equal? over reversed? [ sequence= ] [ 2drop f ] if ;
 
index e2f9f279e8a88cf309931c860a376c6a18b9f596..e57edf282aea2a6a585f5074e1ed2e03c8683961 100644 (file)
@@ -13,14 +13,8 @@ IN: strings
 : reset-string-hashcode ( str -- )
     f swap set-string-hashcode ; inline
 
-: string-hashcode-step ( oldhash newpart -- newhash )
-    >fixnum swap [
-        [ -2 fixnum-shift-fast ] [ 5 fixnum-shift-fast ] bi
-        fixnum+fast fixnum+fast
-    ] keep fixnum-bitxor ; inline
-
 : rehash-string ( str -- )
-    [ 0 [ string-hashcode-step ] reduce ] keep set-string-hashcode ; inline
+    1 over sequence-hashcode swap set-string-hashcode ; inline
 
 : (aux) ( n string -- byte-array m )
     aux>> { byte-array } declare swap 1 fixnum-shift-fast ; inline