module Data.Hash.SL2.Unsafe (unsafeUseAsPtr, unsafeUseAsPtr2, unsafePack) where
import Foreign
import System.IO.Unsafe
import Data.Hash.SL2.Internal
unsafeUseAsPtr :: Hash -> (Ptr Hash -> IO a) -> IO a
unsafeUseAsPtr (H fp) f = withForeignPtr fp (f . castPtr)
unsafeUseAsPtr2 :: Hash -> Hash -> (Ptr Hash -> Ptr Hash -> IO a) -> IO a
unsafeUseAsPtr2 a b f = unsafeUseAsPtr a (unsafeUseAsPtr b . f)
unsafePack :: [Word8] -> Hash
unsafePack ws = H $ unsafePerformIO $ do
fp <- mallocForeignPtrArray0 hashSize
withForeignPtr fp $ \p ->
mapM_ (\(w, off) -> pokeElemOff p off w) (zip ws [0..hashSize1])
return (castForeignPtr fp)