From 3e20365cbea43463fd49fcd9d9ce6d07a68fc106 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Thu, 6 Oct 2011 08:37:05 -0700 Subject: [PATCH] Revert "sequences: change to use tuple-hashcode algorithm, make string-hashcode work like old sequence-hashcode." This reverts commit 7b7b0d45421cf7bf2d959fb482c7a63cdb3d04ed. --- core/sequences/sequences-docs.factor | 8 +++++++- core/sequences/sequences.factor | 20 ++++++++++++-------- core/strings/strings.factor | 8 +------- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/core/sequences/sequences-docs.factor b/core/sequences/sequences-docs.factor index c06cdb191c..f256c965d5 100644 --- a/core/sequences/sequences-docs.factor +++ b/core/sequences/sequences-docs.factor @@ -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 diff --git a/core/sequences/sequences.factor b/core/sequences/sequences.factor index 942df32852..153ef91809 100644 --- a/core/sequences/sequences.factor +++ b/core/sequences/sequences.factor @@ -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 +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 ; diff --git a/core/strings/strings.factor b/core/strings/strings.factor index e2f9f279e8..e57edf282a 100644 --- a/core/strings/strings.factor +++ b/core/strings/strings.factor @@ -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 -- 2.34.1