module Data.Permute.IOBase
where
import Control.Monad
import Control.Monad.ST
import Data.Permute.Base
newtype IOPermute = IOPermute (STPermute RealWorld)
newIOPermute :: Int -> IO (IOPermute)
newIOPermute n = liftM IOPermute $ stToIO (newSTPermute n)
newIOPermute_ :: Int -> IO (IOPermute)
newIOPermute_ n = liftM IOPermute $ stToIO (newSTPermute_ n)
getSizeIOPermute :: IOPermute -> IO Int
getSizeIOPermute (IOPermute p) = stToIO $ getSizeSTPermute p
sizeIOPermute :: IOPermute -> Int
sizeIOPermute (IOPermute p) = sizeSTPermute p
unsafeGetElemIOPermute :: IOPermute -> Int -> IO Int
unsafeGetElemIOPermute (IOPermute p) i = stToIO $ unsafeGetElemSTPermute p i
unsafeSetElemIOPermute :: IOPermute -> Int -> Int -> IO ()
unsafeSetElemIOPermute (IOPermute p) i x = stToIO $ unsafeSetElemSTPermute p i x
unsafeSwapElemsIOPermute :: IOPermute -> Int -> Int -> IO ()
unsafeSwapElemsIOPermute (IOPermute p) i j = stToIO $ unsafeSwapElemsSTPermute p i j
getElemsIOPermute :: IOPermute -> IO [Int]
getElemsIOPermute (IOPermute p) = stToIO $ getElemsSTPermute p
setElemsIOPermute :: IOPermute -> [Int] -> IO ()
setElemsIOPermute (IOPermute p) is = stToIO $ setElemsSTPermute p is
unsafeFreezeIOPermute :: IOPermute -> IO Permute
unsafeFreezeIOPermute (IOPermute p) = stToIO $ unsafeFreezeSTPermute p
unsafeThawIOPermute :: Permute -> IO (IOPermute)
unsafeThawIOPermute p = liftM IOPermute $ stToIO (unsafeThawSTPermute p)