cudd-0.1.0.0: Cudd/ForeignHelpers.hs
module Cudd.ForeignHelpers (
withForeignArray,
withForeignArrayPtr,
withForeignArrayPtrLen,
withStringArray,
withStringArrayPtr
) where
import Foreign
import Foreign.C.String
import Foreign.ForeignPtr.Unsafe
withForeignArray :: [ForeignPtr a] -> ([Ptr a] -> IO b) -> IO b
withForeignArray [] func = func []
withForeignArray (p:ptrs) func = withForeignPtr p $ \ptr ->
withForeignArray ptrs $ \x -> func (ptr:x)
withForeignArray' :: [ForeignPtr a] -> ([Ptr a] -> IO b) -> IO b
withForeignArray' ptrs io = do
r <- io (map unsafeForeignPtrToPtr ptrs)
mapM touchForeignPtr ptrs
return r
withForeignArrayPtr :: [ForeignPtr a] -> (Ptr (Ptr a) -> IO b) -> IO b
withForeignArrayPtr fps func = withForeignArray fps $ \ap -> withArray ap func
withForeignArrayPtrLen :: [ForeignPtr a] -> (Int -> Ptr (Ptr a) -> IO b) -> IO b
withForeignArrayPtrLen fps func = withForeignArray fps $ \ap -> withArrayLen ap func
withStringArray :: [String] -> ([CString] -> IO a) -> IO a
withStringArray [] func = func []
withStringArray (s:strings) func = withCString s $ \ptr ->
withStringArray strings $ \x -> func (ptr : x)
withStringArrayPtr :: [String] -> (Ptr CString -> IO a) -> IO a
withStringArrayPtr strings func = withStringArray strings $ \sp -> withArray sp func