primitive-0.5.0.1: Primitive memory-related operations

Portabilitynon-portable
MaintainerRoman Leshchinskiy <[email protected]>
Safe HaskellNone

Data.Primitive.ByteArray

Contents

Description

Primitive operations on ByteArrays

Synopsis

Types

data ByteArray Source

Byte arrays

Constructors

ByteArray ByteArray# 

Instances

Data ByteArray 
Typeable ByteArray 

data MutableByteArray s Source

Mutable byte arrays associated with a primitive state token

Instances

Typeable1 MutableByteArray 
Typeable s => Data (MutableByteArray s) 

Allocation

newByteArray :: PrimMonad m => Int -> m (MutableByteArray (PrimState m))Source

Create a new mutable byte array of the specified size.

newPinnedByteArray :: PrimMonad m => Int -> m (MutableByteArray (PrimState m))Source

Create a pinned byte array of the specified size. The garbage collector is guaranteed not to move it.

newAlignedPinnedByteArray :: PrimMonad m => Int -> Int -> m (MutableByteArray (PrimState m))Source

Create a pinned byte array of the specified size and with the give alignment. The garbage collector is guaranteed not to move it.

Element access

readByteArray :: (Prim a, PrimMonad m) => MutableByteArray (PrimState m) -> Int -> m aSource

Read a primitive value from the byte array. The offset is given in elements of type a rather than in bytes.

writeByteArray :: (Prim a, PrimMonad m) => MutableByteArray (PrimState m) -> Int -> a -> m ()Source

Write a primitive value to the byte array. The offset is given in elements of type a rather than in bytes.

indexByteArray :: Prim a => ByteArray -> Int -> aSource

Read a primitive value from the byte array. The offset is given in elements of type a rather than in bytes.

Freezing and thawing

unsafeFreezeByteArray :: PrimMonad m => MutableByteArray (PrimState m) -> m ByteArraySource

Convert a mutable byte array to an immutable one without copying. The array should not be modified after the conversion.

unsafeThawByteArray :: PrimMonad m => ByteArray -> m (MutableByteArray (PrimState m))Source

Convert an immutable byte array to a mutable one without copying. The original array should not be used after the conversion.

Block operations

copyByteArraySource

Arguments

:: PrimMonad m 
=> MutableByteArray (PrimState m)

destination array

-> Int

offset into destination array

-> ByteArray

source array

-> Int

offset into source array

-> Int

number of bytes to copy

-> m () 

Copy a slice of an immutable byte array to a mutable byte array.

copyMutableByteArraySource

Arguments

:: PrimMonad m 
=> MutableByteArray (PrimState m)

destination array

-> Int

offset into destination array

-> MutableByteArray (PrimState m)

source array

-> Int

offset into source array

-> Int

number of bytes to copy

-> m () 

Copy a slice of a mutable byte array into another array. The two slices may not overlap.

moveByteArraySource

Arguments

:: PrimMonad m 
=> MutableByteArray (PrimState m)

destination array

-> Int

offset into destination array

-> MutableByteArray (PrimState m)

source array

-> Int

offset into source array

-> Int

number of bytes to copy

-> m () 

Copy a slice of a mutable byte array into another, potentially overlapping array.

setByteArraySource

Arguments

:: (Prim a, PrimMonad m) 
=> MutableByteArray (PrimState m)

array to fill

-> Int

offset into array

-> Int

number of values to fill

-> a

value to fill with

-> m () 

Fill a slice of a mutable byte array with a value. The offset and length are given in elements of type a rather than in bytes.

fillByteArraySource

Arguments

:: PrimMonad m 
=> MutableByteArray (PrimState m)

array to fill

-> Int

offset into array

-> Int

number of bytes to fill

-> Word8

byte to fill with

-> m () 

Fill a slice of a mutable byte array with a byte.

Information

sizeofByteArray :: ByteArray -> IntSource

Size of the byte array.

sizeofMutableByteArray :: MutableByteArray s -> IntSource

Size of the mutable byte array.

sameMutableByteArray :: MutableByteArray s -> MutableByteArray s -> BoolSource

Check if the two arrays refer to the same memory block.

byteArrayContents :: ByteArray -> AddrSource

Yield a pointer to the array's data. This operation is only safe on pinned byte arrays allocated by newPinnedByteArray or newAlignedPinnedByteArray.

mutableByteArrayContents :: MutableByteArray s -> AddrSource

Yield a pointer to the array's data. This operation is only safe on pinned byte arrays allocated by newPinnedByteArray or newAlignedPinnedByteArray.