module Database.VCache.Aligned
( peekAligned
, pokeAligned
) where
import Foreign.Storable
import Foreign.Marshal.Alloc
import Foreign.Marshal.Utils
import Foreign.Ptr
peekAligned :: (Storable a) => Ptr a -> IO a
peekAligned = peekAligned' undefined
pokeAligned :: (Storable a) => Ptr a -> a -> IO ()
pokeAligned = pokeAligned' undefined
peekAligned' :: (Storable a) => a -> Ptr a -> IO a
peekAligned' _dummy pSrc =
allocaBytesAligned (sizeOf _dummy) (alignment _dummy) $ \ pBuff -> do
copyBytes pBuff pSrc (sizeOf _dummy)
peek pBuff
pokeAligned' :: (Storable a) => a -> Ptr a -> a -> IO ()
pokeAligned' _dummy pDst a =
allocaBytesAligned (sizeOf _dummy) (alignment _dummy) $ \ pBuff -> do
poke pBuff a
copyBytes pDst pBuff (sizeOf _dummy)