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..hashSize-1]) return (castForeignPtr fp)