Data.Array.Storable

array-0.5.3.0: Mutable and immutable arrays

Copyright | (c) The University of Glasgow 2001
License | BSD-style (see the file libraries/base/LICENSE)
Maintainer | libraries@haskell.org
Stability | experimental
Portability | non-portable (uses Data.Array.MArray)
Safe Haskell | None
Language | Haskell2010

Data.Array.Storable

Contents

- Arrays of `Storable` things.
- Overloaded mutable array interface
- Accessing the pointer to the array 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.

Synopsis

- data StorableArray i e
- module Data.Array.MArray
- withStorableArray :: StorableArray i e -> (Ptr e -> IO a) -> IO a
- touchStorableArray :: StorableArray i e -> IO ()

# Arrays of `Storable` things.

data StorableArray i e #

The array type

Instances

Storable e => MArray StorableArray e IO # |
Instance details Defined in Data.Array.Storable.Internals Methods getBounds :: Ix i => StorableArray i e -> IO (i, i) # getNumElements :: Ix i => StorableArray i e -> IO Int newArray :: Ix i => (i, i) -> e -> IO (StorableArray i e) # newArray_ :: Ix i => (i, i) -> IO (StorableArray i e) # 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).

module Data.Array.MArray

# Accessing the pointer to the array contents

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

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 () #

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.