diff --git a/bench/Main.hs b/bench/Main.hs index 41d619e..9e285bf 100644 --- a/bench/Main.hs +++ b/bench/Main.hs @@ -20,7 +20,8 @@ makeBenchW64s = do let files = ("data/bench/" ++) <$> (".word64s" `isSuffixOf`) `filter` entries benchmarks <- forM files $ \file -> return [ env (IO.mmapFromForeignRegion file) $ \(v :: DVS.Vector Word64) -> bgroup "blah" $ mempty - <> [bench ("DVS.size" <> file) (whnf (PV.fromList (HW.length v)) (DVS.toList v))] + <> [bench ("DVS.fromList" <> file) (whnf (PV.fromList 10) (DVS.toList v))] + <> [bench ("DVS.fromListN" <> file) (whnf (PV.fromListN (HW.length v) 10) (DVS.toList v))] ] return (join benchmarks) diff --git a/src/HaskellWorks/Data/PackedVector/PackedVector64.hs b/src/HaskellWorks/Data/PackedVector/PackedVector64.hs index 2afbfb0..b8723ce 100644 --- a/src/HaskellWorks/Data/PackedVector/PackedVector64.hs +++ b/src/HaskellWorks/Data/PackedVector/PackedVector64.hs @@ -5,6 +5,7 @@ module HaskellWorks.Data.PackedVector.PackedVector64 ( PackedVector64(..) , empty , fromList + , fromListN , toList ) where @@ -65,11 +66,17 @@ instance AtIndex PackedVector64 where {-# INLINE atIndex #-} fromList :: Count -> [Word64] -> PackedVector64 -fromList wl ws = - PackedVector64 - { swBuffer = DVS.fromList (packBits wl ws) +fromList wordLength ws = PackedVector64 + { swBuffer = DVS.fromList (packBits wordLength ws) + , swBufferLen = fromIntegral (length ws) + , swBitSize = fromIntegral wordLength + } + +fromListN :: Count -> Count -> [Word64] -> PackedVector64 +fromListN vectorSize wordLength ws = PackedVector64 + { swBuffer = DVS.fromListN (fromIntegral vectorSize) (packBits wordLength ws) , swBufferLen = fromIntegral (length ws) - , swBitSize = fromIntegral wl + , swBitSize = fromIntegral wordLength } toList :: PackedVector64 -> [Word64]