packages feed

hw-bits-0.1.0.1: src/HaskellWorks/Data/Bits/SubWord64Vector.hs

module HaskellWorks.Data.Bits.SubWord64Vector
  ( SubWord64Vector(..)
  , fromList
  , toList
  ) where

import qualified Data.Vector.Storable as DVS
import           Data.Word
import           HaskellWorks.Data.Bits.SubWord64Vector.Internal

data SubWord64Vector = SubWord64Vector
    { swBuffer      :: !(DVS.Vector Word64)
    , swSize        :: !Word
    , swBufferLen   :: !Int
    } deriving (Eq, Show)

fromList :: Int -> [Word64] -> SubWord64Vector
fromList wl ws =
  SubWord64Vector
  { swBuffer    = DVS.fromList (packBits wl ws)
  , swBufferLen = fromIntegral (length ws)
  , swSize      = fromIntegral wl
  }

toList :: SubWord64Vector -> [Word64]
toList v = unpackBits (swBufferLen v) (fromIntegral (swSize v)) (DVS.toList (swBuffer v))