array-0.5.2.0: Mutable and immutable arrays

Copyright(c) The University of Glasgow 2001
LicenseBSD-style (see the file libraries/base/LICENSE)
Maintainerlibraries@haskell.org
Stabilityexperimental
Portabilitynon-portable (uses Data.Array.MArray)
Safe HaskellTrustworthy
LanguageHaskell2010

Data.Array.Storable.Safe

Contents

Description

A storable array is an IO-mutable array which stores its contents in a contiguous memory block living in the C heap. Elements are stored according to the class Storable. You can obtain the pointer to the array contents to manipulate elements from languages like C.

It is similar to IOUArray but slower. Its advantage is that it's compatible with C.

Safe API only of Data.Array.Storable.

Since: 0.4.0.0

Synopsis

Arrays of Storable things.

data StorableArray i e Source #

The array type

Instances

Storable e => MArray StorableArray e IO Source # 

Methods

getBounds :: Ix i => StorableArray i e -> IO (i, i) Source #

getNumElements :: Ix i => StorableArray i e -> IO Int

newArray :: Ix i => (i, i) -> e -> IO (StorableArray i e) Source #

newArray_ :: Ix i => (i, i) -> IO (StorableArray i e) Source #

unsafeNewArray_ :: Ix i => (i, i) -> IO (StorableArray i e)

unsafeRead :: Ix i => StorableArray i e -> Int -> IO e

unsafeWrite :: Ix i => StorableArray i e -> Int -> e -> IO ()

Overloaded mutable array interface

Module Data.Array.MArray provides the interface of storable arrays. They are instances of class MArray (with the IO monad).

Accessing the pointer to the array contents

withStorableArray :: StorableArray i e -> (Ptr e -> IO a) -> IO a Source #

The pointer to the array contents is obtained by withStorableArray. The idea is similar to ForeignPtr (used internally here). The pointer should be used only during execution of the IO action retured by the function passed as argument to withStorableArray.

touchStorableArray :: StorableArray i e -> IO () Source #

If you want to use it afterwards, ensure that you touchStorableArray after the last use of the pointer, so the array is not freed too early.