module SAT.Solver.Mios.Data.Vec
(
Vec
, sizeOfVector
, getNth
, setNth
, swapBetween
, modifyNth
, setAll
, newVec
, newVecWith
, newSizedVecIntFromList
, newSizedVecIntFromUVector
, vecGrow
)
where
import qualified Data.Vector.Unboxed as U
import qualified Data.Vector.Unboxed.Mutable as UV
type Vec = UV.IOVector Int
sizeOfVector :: Vec -> IO Int
sizeOfVector v = return $! UV.length v
newVec :: Int -> IO Vec
newVec = UV.new
newVecWith :: Int -> Int -> IO Vec
newVecWith n x = do
v <- UV.new n
UV.set v x
return v
getNth :: Vec -> Int -> IO Int
getNth = UV.unsafeRead
setNth :: Vec -> Int -> Int -> IO ()
setNth = UV.unsafeWrite
modifyNth :: Vec -> (Int -> Int) -> Int -> IO ()
modifyNth = UV.unsafeModify
setAll :: Vec -> Int -> IO ()
setAll = UV.set
swapBetween:: Vec -> Int -> Int -> IO ()
swapBetween = UV.unsafeSwap
newSizedVecIntFromList :: [Int] -> IO Vec
newSizedVecIntFromList !l = U.unsafeThaw $ U.fromList (length l : l)
newSizedVecIntFromUVector :: U.Vector Int -> IO Vec
newSizedVecIntFromUVector = U.unsafeThaw
vecGrow :: Vec -> Int -> IO Vec
vecGrow = UV.unsafeGrow