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

License | BSD-style |

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

Stability | experimental |

Portability | non-portable |

Safe Haskell | None |

Language | Haskell2010 |

Class of mutable vectors

## Synopsis

- class MVector v a where
- basicLength :: v s a -> Int
- basicUnsafeSlice :: Int -> Int -> v s a -> v s a
- basicOverlaps :: v s a -> v s a -> Bool
- basicUnsafeNew :: PrimMonad m => Int -> m (v (PrimState m) a)
- basicInitialize :: PrimMonad m => v (PrimState m) a -> m ()
- basicUnsafeReplicate :: PrimMonad m => Int -> a -> m (v (PrimState m) a)
- basicUnsafeRead :: PrimMonad m => v (PrimState m) a -> Int -> m a
- basicUnsafeWrite :: PrimMonad m => v (PrimState m) a -> Int -> a -> m ()
- basicClear :: PrimMonad m => v (PrimState m) a -> m ()
- basicSet :: PrimMonad m => v (PrimState m) a -> a -> m ()
- basicUnsafeCopy :: PrimMonad m => v (PrimState m) a -> v (PrimState m) a -> m ()
- basicUnsafeMove :: PrimMonad m => v (PrimState m) a -> v (PrimState m) a -> m ()
- basicUnsafeGrow :: PrimMonad m => v (PrimState m) a -> Int -> m (v (PrimState m) a)

# Documentation

class MVector v a where Source #

Class of mutable vectors parametrised with a primitive state token.

basicLength, basicUnsafeSlice, basicOverlaps, basicUnsafeNew, basicInitialize, basicUnsafeRead, basicUnsafeWrite

basicLength :: v s a -> Int Source #

Length of the mutable vector. This method should not be
called directly, use `length`

instead.

Yield a part of the mutable vector without copying it. This method
should not be called directly, use `unsafeSlice`

instead.

basicOverlaps :: v s a -> v s a -> Bool Source #

Check whether two vectors overlap. This method should not be
called directly, use `overlaps`

instead.

basicUnsafeNew :: PrimMonad m => Int -> m (v (PrimState m) a) Source #

Create a mutable vector of the given length. This method should not be
called directly, use `unsafeNew`

instead.

basicInitialize :: PrimMonad m => v (PrimState m) a -> m () Source #

Initialize a vector to a standard value. This is intended to be called as part of the safe new operation (and similar operations), to properly blank the newly allocated memory if necessary.

Vectors that are necessarily initialized as part of creation may implement this as a no-op.

basicUnsafeReplicate :: PrimMonad m => Int -> a -> m (v (PrimState m) a) Source #

Create a mutable vector of the given length and fill it with an
initial value. This method should not be called directly, use
`replicate`

instead.

basicUnsafeRead :: PrimMonad m => v (PrimState m) a -> Int -> m a Source #

Yield the element at the given position. This method should not be
called directly, use `unsafeRead`

instead.

basicUnsafeWrite :: PrimMonad m => v (PrimState m) a -> Int -> a -> m () Source #

Replace the element at the given position. This method should not be
called directly, use `unsafeWrite`

instead.

basicClear :: PrimMonad m => v (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. This method should not be called directly, use `clear`

instead.

basicSet :: PrimMonad m => v (PrimState m) a -> a -> m () Source #

Set all elements of the vector to the given value. This method should
not be called directly, use `set`

instead.

Copy a vector. The two vectors may not overlap. This method should not
be called directly, use `unsafeCopy`

instead.

Move the contents of a vector. The two vectors may overlap. This method
should not be called directly, use `unsafeMove`

instead.

basicUnsafeGrow :: PrimMonad m => v (PrimState m) a -> Int -> m (v (PrimState m) a) Source #

Grow a vector by the given number of elements. This method should not be
called directly, use `unsafeGrow`

instead.