module Numeric.Limp.Solvers.Cbc.Internal.Wrapper
( F.CbcModel
, F.newModel
, F.branchAndBound
, F.setInteger
, F.setObjSense
, F.setLogLevel
, F.getSolution
, F.isProvenInfeasible
, F.getCoinDblMax
, setQuiet
, loadProblem
) where
import qualified Numeric.Limp.Solvers.Cbc.Internal.Foreign as F
import qualified Data.Vector.Storable as V
import Data.Vector.Storable (Vector)
setQuiet :: F.CbcModel -> IO ()
setQuiet = flip F.setLogLevel 0
loadProblem
:: F.CbcModel
-> Vector Int -> Vector Int -> Vector Double
-> Vector Double -> Vector Double
-> Vector Double -> Vector Double -> Vector Double
-> IO ()
loadProblem model starts indices values collb colub obj rowlb rowub
= let ncols = V.length collb
nrows = V.length rowlb
in do check_len "colub = ncols" colub ncols
check_len "rowub = nrows" rowub nrows
check_len "obj = ncols" obj ncols
F.loadProblem model ncols nrows starts indices values collb colub obj rowlb rowub
where
check_len e v l
| V.length v == l
= return ()
| otherwise
= putStrLn
$ "Numeric.Limp.Solvers.Cbc.Internal.Foreign:loadProblem_check wrong length! " ++ e ++ ": " ++ show (V.length v, l)