From: Simon Marlow Date: Wed, 1 Feb 2006 13:04:27 +0000 (+0000) Subject: When splitting a bucket, keep the contents in the same order X-Git-Tag: 2007-09-13~423 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=a01ece51085a2a8571c9bda7803b8ea5021c2a85;p=ghc-base.git When splitting a bucket, keep the contents in the same order To retain the property that multiple inserts shadow each other (see ticket #661, test hash001) --- diff --git a/Data/HashTable.hs b/Data/HashTable.hs index 0f31af5..1463a0d 100644 --- a/Data/HashTable.hs +++ b/Data/HashTable.hs @@ -41,7 +41,7 @@ import Prelude hiding ( lookup ) import Data.Tuple ( fst ) import Data.Bits import Data.Maybe -import Data.List ( maximumBy, filter, length, concat, foldl ) +import Data.List ( maximumBy, filter, length, concat, foldl, reverse ) import Data.Int ( Int32 ) #if defined(__GLASGOW_HASKELL__) @@ -295,9 +295,9 @@ expandHashTable let split_bucket old new [] = do segment <- myReadArray dir oldsegment - myWriteArray segment oldindex old + myWriteArray segment oldindex (reverse old) segment <- myReadArray dir newsegment - myWriteArray segment newindex new + myWriteArray segment newindex (reverse new) split_bucket old new ((k,v):xs) = do h <- bucketIndex table' k if h == newbucket