Copyright | (c) Roman Leshchinskiy 2008-2010 |
---|---|

License | BSD-style |

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

Stability | experimental |

Portability | non-portable |

Safe Haskell | None |

Language | Haskell2010 |

Mutable boxed vectors.

## Synopsis

- data MVector s a = MVector !Int !Int !(MutableArray s a)
- type IOVector = MVector RealWorld
- type STVector s = MVector s
- length :: MVector s a -> Int
- null :: MVector s a -> Bool
- slice :: Int -> Int -> MVector s a -> MVector s a
- init :: MVector s a -> MVector s a
- tail :: MVector s a -> MVector s a
- take :: Int -> MVector s a -> MVector s a
- drop :: Int -> MVector s a -> MVector s a
- splitAt :: Int -> MVector s a -> (MVector s a, MVector s a)
- unsafeSlice :: Int -> Int -> MVector s a -> MVector s a
- unsafeInit :: MVector s a -> MVector s a
- unsafeTail :: MVector s a -> MVector s a
- unsafeTake :: Int -> MVector s a -> MVector s a
- unsafeDrop :: Int -> MVector s a -> MVector s a
- overlaps :: MVector s a -> MVector s a -> Bool
- new :: PrimMonad m => Int -> m (MVector (PrimState m) a)
- unsafeNew :: PrimMonad m => Int -> m (MVector (PrimState m) a)
- replicate :: PrimMonad m => Int -> a -> m (MVector (PrimState m) a)
- replicateM :: PrimMonad m => Int -> m a -> m (MVector (PrimState m) a)
- clone :: PrimMonad m => MVector (PrimState m) a -> m (MVector (PrimState m) a)
- grow :: PrimMonad m => MVector (PrimState m) a -> Int -> m (MVector (PrimState m) a)
- unsafeGrow :: PrimMonad m => MVector (PrimState m) a -> Int -> m (MVector (PrimState m) a)
- clear :: PrimMonad m => MVector (PrimState m) a -> m ()
- read :: PrimMonad m => MVector (PrimState m) a -> Int -> m a
- write :: PrimMonad m => MVector (PrimState m) a -> Int -> a -> m ()
- modify :: PrimMonad m => MVector (PrimState m) a -> (a -> a) -> Int -> m ()
- swap :: PrimMonad m => MVector (PrimState m) a -> Int -> Int -> m ()
- unsafeRead :: PrimMonad m => MVector (PrimState m) a -> Int -> m a
- unsafeWrite :: PrimMonad m => MVector (PrimState m) a -> Int -> a -> m ()
- unsafeModify :: PrimMonad m => MVector (PrimState m) a -> (a -> a) -> Int -> m ()
- unsafeSwap :: PrimMonad m => MVector (PrimState m) a -> Int -> Int -> m ()
- nextPermutation :: (PrimMonad m, Ord e) => MVector (PrimState m) e -> m Bool
- set :: PrimMonad m => MVector (PrimState m) a -> a -> m ()
- copy :: PrimMonad m => MVector (PrimState m) a -> MVector (PrimState m) a -> m ()
- move :: PrimMonad m => MVector (PrimState m) a -> MVector (PrimState m) a -> m ()
- unsafeCopy :: PrimMonad m => MVector (PrimState m) a -> MVector (PrimState m) a -> m ()
- unsafeMove :: PrimMonad m => MVector (PrimState m) a -> MVector (PrimState m) a -> m ()

# Mutable boxed vectors

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

or

).`ST`

s

## Instances

MVector MVector a Source # | |

Defined in Data.Vector.Mutable basicLength :: MVector s a -> Int Source # basicUnsafeSlice :: Int -> Int -> MVector s a -> MVector s a Source # basicOverlaps :: MVector s a -> MVector s a -> Bool Source # basicUnsafeNew :: PrimMonad m => Int -> m (MVector (PrimState m) a) Source # basicInitialize :: PrimMonad m => MVector (PrimState m) a -> m () Source # basicUnsafeReplicate :: PrimMonad m => Int -> a -> m (MVector (PrimState m) a) Source # basicUnsafeRead :: PrimMonad m => MVector (PrimState m) a -> Int -> m a Source # basicUnsafeWrite :: PrimMonad m => MVector (PrimState m) a -> Int -> a -> m () Source # basicClear :: PrimMonad m => MVector (PrimState m) a -> m () Source # basicSet :: PrimMonad m => MVector (PrimState m) a -> a -> m () Source # basicUnsafeCopy :: PrimMonad m => MVector (PrimState m) a -> MVector (PrimState m) a -> m () Source # basicUnsafeMove :: PrimMonad m => MVector (PrimState m) a -> MVector (PrimState m) a -> m () Source # basicUnsafeGrow :: PrimMonad m => MVector (PrimState m) a -> Int -> m (MVector (PrimState m) a) Source # |

# Accessors

## Length information

## Extracting subvectors

slice :: Int -> Int -> MVector s a -> MVector s a Source #

Yield a part of the mutable vector without copying it.

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

unsafeInit :: MVector s a -> MVector s a Source #

unsafeTail :: MVector s a -> MVector s a Source #

## Overlapping

# Construction

## Initialisation

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

Create a mutable vector of the given length.

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

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

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

Create a mutable vector of the given length (0 if the length is negative) and fill it with an initial value.

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

Create a mutable vector of the given length (0 if the length is negative) and fill it with values produced by repeatedly executing the monadic action.

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

Create a copy of a mutable vector.

## Growing

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.

unsafeGrow :: 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 but this is not checked.

## Restricting memory usage

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.

# Accessing individual elements

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

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.

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

Modify the element at the given position.

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

Swap the elements at the given positions.

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

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.

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

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

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

Swap the elements at the given positions. No bounds checks are performed.

# Modifying vectors

nextPermutation :: (PrimMonad m, Ord e) => MVector (PrimState m) e -> m Bool Source #

Compute the next (lexicographically) permutation of given vector in-place. Returns False when input is the last permtuation

## Filling and copying

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.

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

Move the contents of a vector. The two vectors must have the same length.

If the vectors do not overlap, then this is equivalent to `copy`

.
Otherwise, the copying is performed as if the source vector were
copied to a temporary vector and then the temporary vector was copied
to the target vector.

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

Move the contents of a vector. The two vectors must have the same length, but this is not checked.

If the vectors do not overlap, then this is equivalent to `unsafeCopy`

.
Otherwise, the copying is performed as if the source vector were
copied to a temporary vector and then the temporary vector was copied
to the target vector.