X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Data%2FHashTable.hs;h=8ea79099f0b37726efbb247c59103cdcfdaf8e7f;hb=65a4b129adb8d82369fca503d8d810f686142a91;hp=ddbc24b288e7f6531c8d81677babe4d444be5f53;hpb=561a879dd2838dd3ecb613853cb16016b86d3ee1;p=ghc-base.git diff --git a/Data/HashTable.hs b/Data/HashTable.hs index ddbc24b..8ea7909 100644 --- a/Data/HashTable.hs +++ b/Data/HashTable.hs @@ -360,20 +360,20 @@ expandHashTable hash table@HT{ buckets=bkts, bmask=mask } = do then return table else do -- - newbkts' <- newMutArray (0,newmask) [] + newbkts' <- newMutArray (0,newmask) [] - let - splitBucket oldindex = do - bucket <- readHTArray bkts oldindex - let (oldb,newb) = + let + splitBucket oldindex = do + bucket <- readHTArray bkts oldindex + let (oldb,newb) = partition ((oldindex==). bucketIndex newmask . hash . fst) bucket - writeMutArray newbkts' oldindex oldb - writeMutArray newbkts' (oldindex + oldsize) newb - mapM_ splitBucket [0..mask] + writeMutArray newbkts' oldindex oldb + writeMutArray newbkts' (oldindex + oldsize) newb + mapM_ splitBucket [0..mask] - newbkts <- freezeArray newbkts' + newbkts <- freezeArray newbkts' - return ( table{ buckets=newbkts, bmask=newmask } ) + return ( table{ buckets=newbkts, bmask=newmask } ) -- ----------------------------------------------------------------------------- -- Deleting a mapping from the hash table