{-# LANGUAGE ForeignFunctionInterface #-} module Clingo.Raw.Propagation ( -- * Initialization propagateInitSolverLiteral, propagateInitAddWatch, propagateInitSymbolicAtoms, propagateInitTheoryAtoms, propagateInitNumberOfThreads, -- * Assignment assignmentDecisionLevel, assignmentHasConflict, assignmentHasLiteral, assignmentLevel, assignmentDecision, assignmentIsFixed, assignmentIsTrue, assignmentIsFalse, assignmentTruthValue, -- * Propagation propagateControlThreadId, propagateControlAssignment, propagateControlAddLiteral, propagateControlAddWatch, propagateControlHasWatch, propagateControlRemoveWatch, propagateControlAddClause, propagateControlPropagate ) where import Control.Monad.IO.Class import Clingo.Raw.Enums import Clingo.Raw.Types import Foreign import Foreign.C foreign import ccall "clingo.h clingo_propagate_init_solver_literal" propagateInitSolverLiteralFFI :: PropagateInit -> Literal -> Ptr Literal -> IO CBool foreign import ccall "clingo.h clingo_propagate_init_add_watch" propagateInitAddWatchFFI :: PropagateInit -> Literal -> IO CBool foreign import ccall "clingo.h clingo_propagate_init_symbolic_atoms" propagateInitSymbolicAtomsFFI :: PropagateInit -> Ptr SymbolicAtoms -> IO CBool foreign import ccall "clingo.h clingo_propagate_init_theory_atoms" propagateInitTheoryAtomsFFI :: PropagateInit -> Ptr TheoryAtoms -> IO CBool foreign import ccall "clingo.h clingo_propagate_init_number_of_threads" propagateInitNumberOfThreadsFFI :: PropagateInit -> IO CInt foreign import ccall "clingo.h clingo_assignment_decision_level" assignmentDecisionLevelFFI :: Assignment -> IO Word32 foreign import ccall "clingo.h clingo_assignment_has_conflict" assignmentHasConflictFFI :: Assignment -> IO CBool foreign import ccall "clingo.h clingo_assignment_has_literal" assignmentHasLiteralFFI :: Assignment -> Literal -> IO CBool foreign import ccall "clingo.h clingo_assignment_level" assignmentLevelFFI :: Assignment -> Literal -> Ptr Word32 -> IO CBool foreign import ccall "clingo.h clingo_assignment_decision" assignmentDecisionFFI :: Assignment -> Word32 -> Ptr Literal -> IO CBool foreign import ccall "clingo.h clingo_assignment_is_fixed" assignmentIsFixedFFI :: Assignment -> Literal -> Ptr CBool -> IO CBool foreign import ccall "clingo.h clingo_assignment_is_true" assignmentIsTrueFFI :: Assignment -> Literal -> Ptr CBool -> IO CBool foreign import ccall "clingo.h clingo_assignment_is_false" assignmentIsFalseFFI :: Assignment -> Literal -> Ptr CBool -> IO CBool foreign import ccall "clingo.h clingo_assignment_truth_value" assignmentTruthValueFFI :: Assignment -> Literal -> Ptr TruthValue -> IO CBool foreign import ccall "clingo.h clingo_propagate_control_thread_id" propagateControlThreadIdFFI :: PropagateControl -> IO Identifier foreign import ccall "clingo.h clingo_propagate_control_assignment" propagateControlAssignmentFFI :: PropagateControl -> IO Assignment foreign import ccall "clingo.h clingo_propagate_control_add_literal" propagateControlAddLiteralFFI :: PropagateControl -> Ptr Literal -> IO CBool foreign import ccall "clingo.h clingo_propagate_control_add_watch" propagateControlAddWatchFFI :: PropagateControl -> Literal -> IO CBool foreign import ccall "clingo.h clingo_propagate_control_has_watch" propagateControlHasWatchFFI :: PropagateControl -> Literal -> IO CBool foreign import ccall "clingo.h clingo_propagate_control_remove_watch" propagateControlRemoveWatchFFI :: PropagateControl -> Literal -> IO () foreign import ccall "clingo.h clingo_propagate_control_add_clause" propagateControlAddClauseFFI :: PropagateControl -> Ptr Literal -> CSize -> ClauseType -> Ptr CBool -> IO CBool foreign import ccall "clingo.h clingo_propagate_control_propagate" propagateControlPropagateFFI :: PropagateControl -> Ptr CBool -> IO CBool propagateInitSolverLiteral :: MonadIO m => PropagateInit -> Literal -> Ptr Literal -> m CBool propagateInitSolverLiteral a b c = liftIO $ propagateInitSolverLiteralFFI a b c propagateInitAddWatch :: MonadIO m => PropagateInit -> Literal -> m CBool propagateInitAddWatch a b = liftIO $ propagateInitAddWatchFFI a b propagateInitSymbolicAtoms :: MonadIO m => PropagateInit -> Ptr SymbolicAtoms -> m CBool propagateInitSymbolicAtoms a b = liftIO $ propagateInitSymbolicAtomsFFI a b propagateInitTheoryAtoms :: MonadIO m => PropagateInit -> Ptr TheoryAtoms -> m CBool propagateInitTheoryAtoms a b = liftIO $ propagateInitTheoryAtomsFFI a b propagateInitNumberOfThreads :: MonadIO m => PropagateInit -> m CInt propagateInitNumberOfThreads a = liftIO $ propagateInitNumberOfThreadsFFI a assignmentDecisionLevel :: MonadIO m => Assignment -> m Word32 assignmentDecisionLevel a = liftIO $ assignmentDecisionLevelFFI a assignmentHasConflict :: MonadIO m => Assignment -> m CBool assignmentHasConflict a = liftIO $ assignmentHasConflictFFI a assignmentHasLiteral :: MonadIO m => Assignment -> Literal -> m CBool assignmentHasLiteral a b = liftIO $ assignmentHasLiteralFFI a b assignmentLevel :: MonadIO m => Assignment -> Literal -> Ptr Word32 -> m CBool assignmentLevel a b c = liftIO $ assignmentLevelFFI a b c assignmentDecision :: MonadIO m => Assignment -> Word32 -> Ptr Literal -> m CBool assignmentDecision a b c = liftIO $ assignmentDecisionFFI a b c assignmentIsFixed :: MonadIO m => Assignment -> Literal -> Ptr CBool -> m CBool assignmentIsFixed a b c = liftIO $ assignmentIsFixedFFI a b c assignmentIsTrue :: MonadIO m => Assignment -> Literal -> Ptr CBool -> m CBool assignmentIsTrue a b c = liftIO $ assignmentIsTrueFFI a b c assignmentIsFalse :: MonadIO m => Assignment -> Literal -> Ptr CBool -> m CBool assignmentIsFalse a b c = liftIO $ assignmentIsFalseFFI a b c assignmentTruthValue :: MonadIO m => Assignment -> Literal -> Ptr TruthValue -> m CBool assignmentTruthValue a b c = liftIO $ assignmentTruthValueFFI a b c propagateControlThreadId :: MonadIO m => PropagateControl -> m Identifier propagateControlThreadId a = liftIO $ propagateControlThreadIdFFI a propagateControlAssignment :: MonadIO m => PropagateControl -> m Assignment propagateControlAssignment a = liftIO $ propagateControlAssignmentFFI a propagateControlAddLiteral :: MonadIO m => PropagateControl -> Ptr Literal -> m CBool propagateControlAddLiteral a b = liftIO $ propagateControlAddLiteralFFI a b propagateControlAddWatch :: MonadIO m => PropagateControl -> Literal -> m CBool propagateControlAddWatch a b = liftIO $ propagateControlAddWatchFFI a b propagateControlHasWatch :: MonadIO m => PropagateControl -> Literal -> m CBool propagateControlHasWatch a b = liftIO $ propagateControlHasWatchFFI a b propagateControlRemoveWatch :: MonadIO m => PropagateControl -> Literal -> m () propagateControlRemoveWatch a b = liftIO $ propagateControlRemoveWatchFFI a b propagateControlAddClause :: MonadIO m => PropagateControl -> Ptr Literal -> CSize -> ClauseType -> Ptr CBool -> m CBool propagateControlAddClause a b c d e = liftIO $ propagateControlAddClauseFFI a b c d e propagateControlPropagate :: MonadIO m => PropagateControl -> Ptr CBool -> m CBool propagateControlPropagate a b = liftIO $ propagateControlPropagateFFI a b