Portability | non-portable |
---|---|

Stability | experimental |

Maintainer | Roman Leshchinskiy <rl@cse.unsw.edu.au> |

Mutable boxed vectors.

- data MVector s a = MVector !Int !Int !(MutableArray s a)
- type IOVector = MVector RealWorld
- type STVector s = MVector s
- length :: MVector s a -> Int
- overlaps :: MVector s a -> MVector s a -> Bool
- slice :: Int -> Int -> MVector s a -> MVector s a
- new :: PrimMonad m => Int -> m (MVector (PrimState m) a)
- newWith :: PrimMonad m => Int -> a -> m (MVector (PrimState m) a)
- read :: PrimMonad m => MVector (PrimState m) a -> Int -> m a
- write :: PrimMonad m => MVector (PrimState m) a -> Int -> a -> m ()
- swap :: PrimMonad m => MVector (PrimState m) a -> Int -> Int -> m ()
- clear :: PrimMonad m => MVector (PrimState m) a -> m ()
- set :: PrimMonad m => MVector (PrimState m) a -> a -> m ()
- copy :: PrimMonad m => MVector (PrimState m) a -> MVector (PrimState m) a -> m ()
- grow :: PrimMonad m => MVector (PrimState m) a -> Int -> m (MVector (PrimState m) a)
- unsafeSlice :: Int -> Int -> MVector s a -> MVector s a
- unsafeNew :: PrimMonad m => Int -> m (MVector (PrimState m) a)
- unsafeNewWith :: PrimMonad m => Int -> a -> m (MVector (PrimState m) a)
- unsafeRead :: PrimMonad m => MVector (PrimState m) a -> Int -> m a
- unsafeWrite :: PrimMonad m => MVector (PrimState m) a -> Int -> a -> m ()
- unsafeCopy :: PrimMonad m => MVector (PrimState m) a -> MVector (PrimState m) a -> m ()
- unsafeGrow :: PrimMonad m => MVector (PrimState m) a -> Int -> m (MVector (PrimState m) a)

# Mutable boxed vectors

Mutable boxed vectors keyed on the monad they live in (`IO`

or

).
`ST`

s

MVector !Int !Int !(MutableArray s a) |

# Operations on mutable vectors

slice :: Int -> Int -> MVector s a -> MVector s aSource

Yield a part of the mutable vector without copying it.

new :: PrimMonad m => Int -> m (MVector (PrimState m) a)Source

Create a mutable vector of the given length.

newWith :: PrimMonad m => Int -> a -> m (MVector (PrimState m) a)Source

Create a mutable vector of the given length and fill it with an initial value.

read :: PrimMonad m => MVector (PrimState m) a -> Int -> m aSource

Yield the element at the given position.

write :: PrimMonad m => MVector (PrimState m) a -> Int -> a -> m ()Source

Replace the element at the given position.

swap :: PrimMonad m => MVector (PrimState m) a -> Int -> Int -> m ()Source

Swap the elements at the given positions.

clear :: PrimMonad m => MVector (PrimState m) a -> m ()Source

Reset all elements of the vector to some undefined value, clearing all references to external objects. This is usually a noop for unboxed vectors.

set :: PrimMonad m => MVector (PrimState m) a -> a -> m ()Source

Set all elements of the vector to the given value.

copy :: PrimMonad m => MVector (PrimState m) a -> MVector (PrimState m) a -> m ()Source

Copy a vector. The two vectors must have the same length and may not overlap.

grow :: PrimMonad m => MVector (PrimState m) a -> Int -> m (MVector (PrimState m) a)Source

Grow a vector by the given number of elements. The number must be positive.

# Unsafe operations

Yield a part of the mutable vector without copying it. No bounds checks are performed.

unsafeNew :: PrimMonad m => Int -> m (MVector (PrimState m) a)Source

Create a mutable vector of the given length. The length is not checked.

unsafeNewWith :: PrimMonad m => Int -> a -> m (MVector (PrimState m) a)Source

Create a mutable vector of the given length and fill it with an initial value. The length is not checked.

unsafeRead :: PrimMonad m => MVector (PrimState m) a -> Int -> m aSource

Yield the element at the given position. No bounds checks are performed.

unsafeWrite :: PrimMonad m => MVector (PrimState m) a -> Int -> a -> m ()Source

Replace the element at the given position. No bounds checks are performed.

Copy a vector. The two vectors must have the same length and may not overlap. This is not checked.