-- |-- Module : Data.Vector.Unboxed.Mutable-- Copyright : (c) Roman Leshchinskiy 2009-2010-- License : BSD-style---- Maintainer : Roman Leshchinskiy <rl@cse.unsw.edu.au>-- Stability : experimental-- Portability : non-portable---- Mutable adaptive unboxed vectors--moduleData.Vector.Unboxed.Mutable(-- * Mutable vectors of primitive typesMVector(..),IOVector,STVector,Unbox,-- * Operations on mutable vectorslength,overlaps,slice,new,newWith,read,write,swap,clear,set,copy,grow,zip,zip3,zip4,zip5,zip6,unzip,unzip3,unzip4,unzip5,unzip6,-- * Unsafe operationsunsafeSlice,unsafeNew,unsafeNewWith,unsafeRead,unsafeWrite,unsafeSwap,unsafeCopy,unsafeGrow)whereimportData.Vector.Unboxed.BaseimportqualifiedData.Vector.Generic.MutableasGimportControl.Monad.PrimitiveimportPreludehiding(zip,zip3,unzip,unzip3,length,read)#include "vector.h"-- | Yield a part of the mutable vector without copying it. No bounds checks-- are performed.unsafeSlice::Unboxa=>Int-- ^ starting index->Int-- ^ length of the slice->MVectorsa->MVectorsa{-# INLINE unsafeSlice #-}unsafeSlice=G.unsafeSlice-- | Create a mutable vector of the given length. The length is not checked.unsafeNew::(PrimMonadm,Unboxa)=>Int->m(MVector(PrimStatem)a){-# INLINE unsafeNew #-}unsafeNew=G.unsafeNew-- | Create a mutable vector of the given length and fill it with an-- initial value. The length is not checked.unsafeNewWith::(PrimMonadm,Unboxa)=>Int->a->m(MVector(PrimStatem)a){-# INLINE unsafeNewWith #-}unsafeNewWith=G.unsafeNewWith-- | Yield the element at the given position. No bounds checks are performed.unsafeRead::(PrimMonadm,Unboxa)=>MVector(PrimStatem)a->Int->ma{-# INLINE unsafeRead #-}unsafeRead=G.unsafeRead-- | Replace the element at the given position. No bounds checks are performed.unsafeWrite::(PrimMonadm,Unboxa)=>MVector(PrimStatem)a->Int->a->m(){-# INLINE unsafeWrite #-}unsafeWrite=G.unsafeWrite-- | Swap the elements at the given positions. No bounds checks are performed.unsafeSwap::(PrimMonadm,Unboxa)=>MVector(PrimStatem)a->Int->Int->m(){-# INLINE unsafeSwap #-}unsafeSwap=G.unsafeSwap-- | Copy a vector. The two vectors must have the same length and may not-- overlap. This is not checked.unsafeCopy::(PrimMonadm,Unboxa)=>MVector(PrimStatem)a-- ^ target->MVector(PrimStatem)a-- ^ source->m(){-# INLINE unsafeCopy #-}unsafeCopy=G.unsafeCopy-- | Grow a vector by the given number of elements. The number must be-- positive but this is not checked.unsafeGrow::(PrimMonadm,Unboxa)=>MVector(PrimStatem)a->Int->m(MVector(PrimStatem)a){-# INLINE unsafeGrow #-}unsafeGrow=G.unsafeGrow-- | Length of the mutable vector.length::Unboxa=>MVectorsa->Int{-# INLINE length #-}length=G.length-- Check whether two vectors overlap.overlaps::Unboxa=>MVectorsa->MVectorsa->Bool{-# INLINE overlaps #-}overlaps=G.overlaps-- | Yield a part of the mutable vector without copying it.slice::Unboxa=>Int->Int->MVectorsa->MVectorsa{-# INLINE slice #-}slice=G.slice-- | Create a mutable vector of the given length.new::(PrimMonadm,Unboxa)=>Int->m(MVector(PrimStatem)a){-# INLINE new #-}new=G.new-- | Create a mutable vector of the given length and fill it with an-- initial value.newWith::(PrimMonadm,Unboxa)=>Int->a->m(MVector(PrimStatem)a){-# INLINE newWith #-}newWith=G.newWith-- | Yield the element at the given position.read::(PrimMonadm,Unboxa)=>MVector(PrimStatem)a->Int->ma{-# INLINE read #-}read=G.read-- | Replace the element at the given position.write::(PrimMonadm,Unboxa)=>MVector(PrimStatem)a->Int->a->m(){-# INLINE write #-}write=G.write-- | Swap the elements at the given positions.swap::(PrimMonadm,Unboxa)=>MVector(PrimStatem)a->Int->Int->m(){-# INLINE swap #-}swap=G.swap-- | Reset all elements of the vector to some undefined value, clearing all-- references to external objects. This is usually a noop for unboxed vectors. clear::(PrimMonadm,Unboxa)=>MVector(PrimStatem)a->m(){-# INLINE clear #-}clear=G.clear-- | Set all elements of the vector to the given value.set::(PrimMonadm,Unboxa)=>MVector(PrimStatem)a->a->m(){-# INLINE set #-}set=G.set-- | Copy a vector. The two vectors must have the same length and may not-- overlap.copy::(PrimMonadm,Unboxa)=>MVector(PrimStatem)a->MVector(PrimStatem)a->m(){-# INLINE copy #-}copy=G.copy-- | Grow a vector by the given number of elements. The number must be-- positive.grow::(PrimMonadm,Unboxa)=>MVector(PrimStatem)a->Int->m(MVector(PrimStatem)a){-# INLINE grow #-}grow=G.grow#define DEFINE_MUTABLE#include "unbox-tuple-instances"