vector-0.7.0.1: Efficient Arrays

Portabilitynon-portable
Stabilityexperimental
MaintainerRoman Leshchinskiy <rl@cse.unsw.edu.au>

Data.Vector.Unboxed.Mutable

Contents

Description

Mutable adaptive unboxed vectors

Synopsis

Mutable vectors of primitive types

data family MVector s a Source

Accessors

Length information

length :: Unbox a => MVector s a -> IntSource

Length of the mutable vector.

null :: Unbox a => MVector s a -> BoolSource

Check whether the vector is empty

Extracting subvectors

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

Yield a part of the mutable vector without copying it.

init :: Unbox a => MVector s a -> MVector s aSource

tail :: Unbox a => MVector s a -> MVector s aSource

take :: Unbox a => Int -> MVector s a -> MVector s aSource

drop :: Unbox a => Int -> MVector s a -> MVector s aSource

unsafeSliceSource

Arguments

:: Unbox a 
=> Int

starting index

-> Int

length of the slice

-> MVector s a 
-> MVector s a 

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

unsafeTake :: Unbox a => Int -> MVector s a -> MVector s aSource

unsafeDrop :: Unbox a => Int -> MVector s a -> MVector s aSource

Overlapping

overlaps :: Unbox a => MVector s a -> MVector s a -> BoolSource

Construction

Initialisation

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

Create a mutable vector of the given length.

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

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

replicate :: (PrimMonad m, Unbox a) => 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.

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

Create a copy of a mutable vector.

Growing

grow :: (PrimMonad m, Unbox a) => 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, Unbox a) => 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, Unbox a) => 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.

Zipping and unzipping

zip :: (Unbox a, Unbox b) => MVector s a -> MVector s b -> MVector s (a, b)Source

O(1) Zip 2 vectors

zip3 :: (Unbox a, Unbox b, Unbox c) => MVector s a -> MVector s b -> MVector s c -> MVector s (a, b, c)Source

O(1) Zip 3 vectors

zip4 :: (Unbox a, Unbox b, Unbox c, Unbox d) => MVector s a -> MVector s b -> MVector s c -> MVector s d -> MVector s (a, b, c, d)Source

O(1) Zip 4 vectors

zip5 :: (Unbox a, Unbox b, Unbox c, Unbox d, Unbox e) => MVector s a -> MVector s b -> MVector s c -> MVector s d -> MVector s e -> MVector s (a, b, c, d, e)Source

O(1) Zip 5 vectors

zip6 :: (Unbox a, Unbox b, Unbox c, Unbox d, Unbox e, Unbox f) => MVector s a -> MVector s b -> MVector s c -> MVector s d -> MVector s e -> MVector s f -> MVector s (a, b, c, d, e, f)Source

O(1) Zip 6 vectors

unzip :: (Unbox a, Unbox b) => MVector s (a, b) -> (MVector s a, MVector s b)Source

O(1) Unzip 2 vectors

unzip3 :: (Unbox a, Unbox b, Unbox c) => MVector s (a, b, c) -> (MVector s a, MVector s b, MVector s c)Source

O(1) Unzip 3 vectors

unzip4 :: (Unbox a, Unbox b, Unbox c, Unbox d) => MVector s (a, b, c, d) -> (MVector s a, MVector s b, MVector s c, MVector s d)Source

O(1) Unzip 4 vectors

unzip5 :: (Unbox a, Unbox b, Unbox c, Unbox d, Unbox e) => MVector s (a, b, c, d, e) -> (MVector s a, MVector s b, MVector s c, MVector s d, MVector s e)Source

O(1) Unzip 5 vectors

unzip6 :: (Unbox a, Unbox b, Unbox c, Unbox d, Unbox e, Unbox f) => MVector s (a, b, c, d, e, f) -> (MVector s a, MVector s b, MVector s c, MVector s d, MVector s e, MVector s f)Source

O(1) Unzip 6 vectors

Accessing individual elements

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

Yield the element at the given position.

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

Replace the element at the given position.

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

Swap the elements at the given positions.

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

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

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

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

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

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

Modifying vectors

Filling and copying

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

Set all elements of the vector to the given value.

copy :: (PrimMonad m, Unbox a) => 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.

unsafeCopySource

Arguments

:: (PrimMonad m, Unbox a) 
=> MVector (PrimState m) a

target

-> MVector (PrimState m) a

source

-> m () 

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

Deprecated operations

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

DEPRECATED Use replicate instead

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

DEPRECATED Use replicate instead