Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 28 additions & 28 deletions Cudd/C.hs
Original file line number Diff line number Diff line change
Expand Up @@ -113,61 +113,61 @@ data CDDNode
data CDDGen

foreign import ccall safe "Cudd_ReadOne_s"
c_cuddReadOne :: Ptr CDDManager -> IO (Ptr CDDNode)
c_cuddReadOne :: Ptr CDDManager -> IO (Ptr CDDNode)

foreign import ccall safe "Cudd_ReadLogicZero_s"
c_cuddReadLogicZero :: Ptr CDDManager -> IO (Ptr CDDNode)
c_cuddReadLogicZero :: Ptr CDDManager -> IO (Ptr CDDNode)

foreign import ccall safe "Cudd_ReadOne_withRef_s"
c_cuddReadOneWithRef :: Ptr CDDManager -> IO (Ptr CDDNode)
c_cuddReadOneWithRef :: Ptr CDDManager -> IO (Ptr CDDNode)

foreign import ccall safe "Cudd_ReadLogicZero_withRef_s"
c_cuddReadLogicZeroWithRef :: Ptr CDDManager -> IO (Ptr CDDNode)
c_cuddReadLogicZeroWithRef :: Ptr CDDManager -> IO (Ptr CDDNode)

foreign import ccall safe "Cudd_bddIthVar_s"
c_cuddBddIthVar :: Ptr CDDManager -> CInt -> IO (Ptr CDDNode)
c_cuddBddIthVar :: Ptr CDDManager -> CInt -> IO (Ptr CDDNode)

foreign import ccall safe "Cudd_bddAnd_s"
c_cuddBddAnd :: Ptr CDDManager -> Ptr CDDNode -> Ptr CDDNode -> IO (Ptr CDDNode)
c_cuddBddAnd :: Ptr CDDManager -> Ptr CDDNode -> Ptr CDDNode -> IO (Ptr CDDNode)

foreign import ccall safe "Cudd_bddOr_s"
c_cuddBddOr :: Ptr CDDManager -> Ptr CDDNode -> Ptr CDDNode -> IO (Ptr CDDNode)
c_cuddBddOr :: Ptr CDDManager -> Ptr CDDNode -> Ptr CDDNode -> IO (Ptr CDDNode)

foreign import ccall safe "Cudd_bddNand_s"
c_cuddBddNand :: Ptr CDDManager -> Ptr CDDNode -> Ptr CDDNode -> IO (Ptr CDDNode)
c_cuddBddNand :: Ptr CDDManager -> Ptr CDDNode -> Ptr CDDNode -> IO (Ptr CDDNode)

foreign import ccall safe "Cudd_bddNor_s"
c_cuddBddNor :: Ptr CDDManager -> Ptr CDDNode -> Ptr CDDNode -> IO (Ptr CDDNode)
c_cuddBddNor :: Ptr CDDManager -> Ptr CDDNode -> Ptr CDDNode -> IO (Ptr CDDNode)

foreign import ccall safe "Cudd_bddXor_s"
c_cuddBddXor :: Ptr CDDManager -> Ptr CDDNode -> Ptr CDDNode -> IO (Ptr CDDNode)
c_cuddBddXor :: Ptr CDDManager -> Ptr CDDNode -> Ptr CDDNode -> IO (Ptr CDDNode)

foreign import ccall safe "Cudd_bddXnor_s"
c_cuddBddXnor :: Ptr CDDManager -> Ptr CDDNode -> Ptr CDDNode -> IO (Ptr CDDNode)
c_cuddBddXnor :: Ptr CDDManager -> Ptr CDDNode -> Ptr CDDNode -> IO (Ptr CDDNode)

foreign import ccall safe "Cudd_Not_s"
c_cuddNot :: Ptr CDDNode -> IO (Ptr CDDNode)
c_cuddNot :: Ptr CDDNode -> IO (Ptr CDDNode)

foreign import ccall safe "Cudd_NotNoRef_s"
c_cuddNotNoRef :: Ptr CDDNode -> IO (Ptr CDDNode)
c_cuddNotNoRef :: Ptr CDDNode -> IO (Ptr CDDNode)

foreign import ccall safe "Cudd_bddIte_s"
c_cuddBddIte :: Ptr CDDManager -> Ptr CDDNode -> Ptr CDDNode -> Ptr CDDNode -> IO (Ptr CDDNode)

foreign import ccall safe "Cudd_bddExistAbstract_s"
c_cuddBddExistAbstract :: Ptr CDDManager -> Ptr CDDNode -> Ptr CDDNode -> IO (Ptr CDDNode)
c_cuddBddExistAbstract :: Ptr CDDManager -> Ptr CDDNode -> Ptr CDDNode -> IO (Ptr CDDNode)

foreign import ccall safe "Cudd_bddUnivAbstract_s"
c_cuddBddUnivAbstract :: Ptr CDDManager -> Ptr CDDNode -> Ptr CDDNode -> IO (Ptr CDDNode)
c_cuddBddUnivAbstract :: Ptr CDDManager -> Ptr CDDNode -> Ptr CDDNode -> IO (Ptr CDDNode)

foreign import ccall safe "Cudd_IterDerefBdd"
c_cuddIterDerefBdd :: Ptr CDDManager -> Ptr CDDNode -> IO ()
c_cuddIterDerefBdd :: Ptr CDDManager -> Ptr CDDNode -> IO ()

foreign import ccall safe "wrappedCuddRef"
cuddRef :: Ptr CDDNode -> IO ()
cuddRef :: Ptr CDDNode -> IO ()

foreign import ccall safe "Cudd_Init"
c_cuddInit :: CInt -> CInt -> CInt -> CInt -> CInt -> IO (Ptr CDDManager)
c_cuddInit :: CInt -> CInt -> CInt -> CInt -> CInt -> IO (Ptr CDDManager)

foreign import ccall safe "Cudd_ShuffleHeap"
c_cuddShuffleHeap :: Ptr CDDManager -> Ptr CInt -> IO CInt
Expand All @@ -194,7 +194,7 @@ foreign import ccall safe "Cudd_Support_s"
c_cuddSupport :: Ptr CDDManager -> Ptr CDDNode -> IO (Ptr CDDNode)

foreign import ccall safe "Cudd_SupportIndex"
c_cuddSupportIndex :: Ptr CDDManager -> Ptr CDDNode -> IO(Ptr CInt)
c_cuddSupportIndex :: Ptr CDDManager -> Ptr CDDNode -> IO(Ptr CInt)

foreign import ccall safe "Cudd_SupportIndices"
c_cuddSupportIndices :: Ptr CDDManager -> Ptr CDDNode -> Ptr (Ptr CInt) -> IO CInt
Expand All @@ -209,7 +209,7 @@ foreign import ccall safe "Cudd_BddToCubeArray"
c_cuddBddToCubeArray :: Ptr CDDManager -> Ptr CDDNode -> Ptr CInt -> IO CInt

foreign import ccall safe "Cudd_ReadSize"
c_cuddReadSize :: Ptr CDDManager -> IO CInt
c_cuddReadSize :: Ptr CDDManager -> IO CInt

foreign import ccall safe "Cudd_bddCompose_s"
c_cuddBddCompose :: Ptr CDDManager -> Ptr CDDNode -> Ptr CDDNode -> CInt -> IO (Ptr CDDNode)
Expand All @@ -227,7 +227,7 @@ foreign import ccall safe "Cudd_EquivDC"
c_cuddEquivDC :: Ptr CDDManager -> Ptr CDDNode -> Ptr CDDNode -> Ptr CDDNode -> IO CInt

foreign import ccall safe "Cudd_Xeqy_s"
c_cuddXeqy :: Ptr CDDManager -> CInt -> Ptr (Ptr CDDNode) -> Ptr (Ptr CDDNode) -> IO (Ptr CDDNode)
c_cuddXeqy :: Ptr CDDManager -> CInt -> Ptr (Ptr CDDNode) -> Ptr (Ptr CDDNode) -> IO (Ptr CDDNode)

foreign import ccall safe "Cudd_DebugCheck"
c_cuddDebugCheck :: Ptr CDDManager -> IO CInt
Expand All @@ -236,7 +236,7 @@ foreign import ccall safe "Cudd_CheckKeys"
c_cuddCheckKeys :: Ptr CDDManager -> IO CInt

foreign import ccall safe "Cudd_bddPickOneMinterm_s"
c_cuddBddPickOneMinterm :: Ptr CDDManager -> Ptr CDDNode -> Ptr (Ptr CDDNode) -> CInt -> IO (Ptr CDDNode)
c_cuddBddPickOneMinterm :: Ptr CDDManager -> Ptr CDDNode -> Ptr (Ptr CDDNode) -> CInt -> IO (Ptr CDDNode)

foreign import ccall safe "Cudd_CheckZeroRef"
c_cuddCheckZeroRef :: Ptr CDDManager -> IO CInt
Expand Down Expand Up @@ -323,13 +323,13 @@ foreign import ccall safe "Cudd_bddPermute_s"
c_cuddBddPermute :: Ptr CDDManager -> Ptr CDDNode -> Ptr CInt -> IO (Ptr CDDNode)

foreign import ccall safe "Cudd_Xgty_s"
c_cuddXgty :: Ptr CDDManager -> CInt -> Ptr (Ptr CDDNode) -> Ptr (Ptr CDDNode) -> Ptr (Ptr CDDNode) -> IO (Ptr CDDNode)
c_cuddXgty :: Ptr CDDManager -> CInt -> Ptr (Ptr CDDNode) -> Ptr (Ptr CDDNode) -> Ptr (Ptr CDDNode) -> IO (Ptr CDDNode)

foreign import ccall safe "Cudd_Inequality_s"
c_cuddInequality :: Ptr CDDManager -> CInt -> CInt -> Ptr (Ptr CDDNode) -> Ptr (Ptr CDDNode) -> IO (Ptr CDDNode)
c_cuddInequality :: Ptr CDDManager -> CInt -> CInt -> Ptr (Ptr CDDNode) -> Ptr (Ptr CDDNode) -> IO (Ptr CDDNode)

foreign import ccall safe "Cudd_Disequality_s"
c_cuddDisequality :: Ptr CDDManager -> CInt -> CInt -> Ptr (Ptr CDDNode) -> Ptr (Ptr CDDNode) -> IO (Ptr CDDNode)
c_cuddDisequality :: Ptr CDDManager -> CInt -> CInt -> Ptr (Ptr CDDNode) -> Ptr (Ptr CDDNode) -> IO (Ptr CDDNode)

foreign import ccall safe "Cudd_bddInterval_s"
c_cuddBddInterval :: Ptr CDDManager -> CInt -> Ptr (Ptr CDDNode) -> CInt -> CInt -> IO (Ptr CDDNode)
Expand All @@ -341,13 +341,13 @@ foreign import ccall safe "Cudd_bddTransfer"
c_cuddBddTransfer :: Ptr CDDManager -> Ptr CDDManager -> Ptr CDDNode -> IO (Ptr CDDNode)

foreign import ccall safe "&Cudd_RecursiveDeref"
c_cuddRecursiveDerefPtr :: FunPtr (Ptr CDDManager -> Ptr CDDNode -> IO ())
c_cuddRecursiveDerefPtr :: FunPtr (Ptr CDDManager -> Ptr CDDNode -> IO ())

foreign import ccall safe "&Cudd_DelayedDerefBdd"
c_cuddDelayedDerefBddPtr :: FunPtr (Ptr CDDManager -> Ptr CDDNode -> IO ())
c_cuddDelayedDerefBddPtr :: FunPtr (Ptr CDDManager -> Ptr CDDNode -> IO ())

foreign import ccall safe "&Cudd_IterDerefBdd"
c_cuddIterDerefBddPtr :: FunPtr (Ptr CDDManager -> Ptr CDDNode -> IO ())
c_cuddIterDerefBddPtr :: FunPtr (Ptr CDDManager -> Ptr CDDNode -> IO ())

foreign import ccall safe "Cudd_bddNewVar_s"
c_cuddBddNewVar :: Ptr CDDManager -> IO (Ptr CDDNode)
Expand Down
38 changes: 19 additions & 19 deletions Cudd/Cudd.hs
Original file line number Diff line number Diff line change
Expand Up @@ -125,24 +125,24 @@ cuddArg0 f (DDManager m) = DDNode $ unsafePerformIO $ do

cuddArg1 :: (Ptr CDDManager -> Ptr CDDNode -> IO (Ptr CDDNode)) -> DDManager -> DDNode -> DDNode
cuddArg1 f (DDManager m) (DDNode x) = DDNode $ unsafePerformIO $
withForeignPtr x $ \xp -> do
node <- f m xp
newForeignPtrEnv deref m node
withForeignPtr x $ \xp -> do
node <- f m xp
newForeignPtrEnv deref m node

cuddArg2 :: (Ptr CDDManager -> Ptr CDDNode -> Ptr CDDNode -> IO (Ptr CDDNode)) -> DDManager -> DDNode -> DDNode -> DDNode
cuddArg2 f (DDManager m) (DDNode l) (DDNode r) = DDNode $ unsafePerformIO $
withForeignPtr l $ \lp ->
withForeignPtr r $ \rp -> do
node <- f m lp rp
newForeignPtrEnv deref m node
withForeignPtr l $ \lp ->
withForeignPtr r $ \rp -> do
node <- f m lp rp
newForeignPtrEnv deref m node

cuddArg3 :: (Ptr CDDManager -> Ptr CDDNode -> Ptr CDDNode -> Ptr CDDNode -> IO (Ptr CDDNode)) -> DDManager -> DDNode -> DDNode-> DDNode -> DDNode
cuddArg3 f (DDManager m) (DDNode l) (DDNode r) (DDNode x) = DDNode $ unsafePerformIO $
withForeignPtr l $ \lp ->
withForeignPtr r $ \rp ->
withForeignPtr x $ \xp -> do
node <- f m lp rp xp
newForeignPtrEnv deref m node
withForeignPtr l $ \lp ->
withForeignPtr r $ \rp ->
withForeignPtr x $ \xp -> do
node <- f m lp rp xp
newForeignPtrEnv deref m node

readOne :: DDManager -> DDNode
readOne = cuddArg0 c_cuddReadOneWithRef
Expand Down Expand Up @@ -254,7 +254,7 @@ readSize (DDManager m) = fromIntegral $ unsafePerformIO $ c_cuddReadSize m

supportIndex :: DDManager -> DDNode -> [Bool]
supportIndex (DDManager m) (DDNode n) = unsafePerformIO $
withForeignPtr n $ \np -> do
withForeignPtr n $ \np -> do
res <- c_cuddSupportIndex m np
size <- c_cuddReadSize m
res <- peekArray (fromIntegral size) res
Expand Down Expand Up @@ -341,12 +341,12 @@ minimize = cuddArg2 c_cuddBddMinimize

pickOneMinterm :: DDManager -> DDNode -> [DDNode] -> Maybe DDNode
pickOneMinterm (DDManager m) (DDNode d) vars = unsafePerformIO $
withForeignPtr d $ \dp ->
withForeignArrayPtrLen (map unDDNode vars) $ \vs vp -> do
node <- c_cuddBddPickOneMinterm m dp vp (fromIntegral vs)
if node == nullPtr then return Nothing else do
nd <- newForeignPtrEnv deref m node
return $ Just $ DDNode nd
withForeignPtr d $ \dp ->
withForeignArrayPtrLen (map unDDNode vars) $ \vs vp -> do
node <- c_cuddBddPickOneMinterm m dp vp (fromIntegral vs)
if node == nullPtr then return Nothing else do
nd <- newForeignPtrEnv deref m node
return $ Just $ DDNode nd

printInfo :: DDManager -> Ptr CFile -> IO Int
printInfo (DDManager m) cf = liftM fromIntegral $ c_cuddPrintInfo m cf
Expand Down
10 changes: 5 additions & 5 deletions Cudd/GC.hs
Original file line number Diff line number Diff line change
Expand Up @@ -25,28 +25,28 @@ import Cudd.C
import Cudd.Imperative

foreign import ccall safe "Cudd_EnableGarbageCollection"
c_cuddEnableGarbageCollection :: Ptr CDDManager -> IO ()
c_cuddEnableGarbageCollection :: Ptr CDDManager -> IO ()

cuddEnableGarbageCollection :: DDManager s u -> ST s ()
cuddEnableGarbageCollection (DDManager m) = unsafeIOToST $ c_cuddEnableGarbageCollection m

foreign import ccall safe "Cudd_DisableGarbageCollection"
c_cuddDisableGarbageCollection :: Ptr CDDManager -> IO ()
c_cuddDisableGarbageCollection :: Ptr CDDManager -> IO ()

cuddDisableGarbageCollection :: DDManager s u -> ST s ()
cuddDisableGarbageCollection (DDManager m) = unsafeIOToST $ c_cuddDisableGarbageCollection m

foreign import ccall safe "Cudd_GarbageCollectionEnabled"
c_cuddGarbageCollectionEnabled :: Ptr CDDManager -> IO CInt
c_cuddGarbageCollectionEnabled :: Ptr CDDManager -> IO CInt

cuddGarbageCollectionEnabled :: DDManager s u -> ST s Int
cuddGarbageCollectionEnabled (DDManager m) = unsafeIOToST $ liftM fromIntegral $ c_cuddGarbageCollectionEnabled m

foreign import ccall safe "&preGCHook_sample"
c_preGCHook_sample :: HookFP
c_preGCHook_sample :: HookFP

foreign import ccall safe "&postGCHook_sample"
c_postGCHook_sample :: HookFP
c_postGCHook_sample :: HookFP

regPreGCHook :: DDManager s u -> HookFP -> ST s Int
regPreGCHook m func = cuddAddHook m func CuddPreGcHook
Expand Down
6 changes: 3 additions & 3 deletions Cudd/Hook.chs
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,13 @@ type HookTyp = Ptr CDDManager -> CString -> Ptr () -> IO (CInt)
type HookFP = FunPtr HookTyp

foreign import ccall safe "Cudd_AddHook"
c_cuddAddHook :: Ptr CDDManager -> HookFP -> CInt -> IO (CInt)
c_cuddAddHook :: Ptr CDDManager -> HookFP -> CInt -> IO (CInt)

cuddAddHook :: DDManager s u -> HookFP -> CuddHookType -> ST s Int
cuddAddHook (DDManager m) fp typ = unsafeIOToST $ liftM fromIntegral $ c_cuddAddHook m fp (fromIntegral $ fromEnum typ)

foreign import ccall safe "Cudd_RemoveHook"
c_cuddRemoveHook :: Ptr CDDManager -> HookFP -> CInt -> IO (CInt)
c_cuddRemoveHook :: Ptr CDDManager -> HookFP -> CInt -> IO (CInt)

cuddRemoveHook :: DDManager s u -> HookFP -> CuddHookType -> ST s Int
cuddRemoveHook (DDManager m) fp typ = unsafeIOToST $ liftM fromIntegral $ c_cuddRemoveHook m fp (fromIntegral $ fromEnum typ)
Loading