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 | Trustworthy |
Language | Haskell2010 |
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
- data StorableArray i e
- module Data.Array.MArray.Safe
- withStorableArray :: StorableArray i e -> (Ptr e -> IO a) -> IO a
- touchStorableArray :: StorableArray i e -> IO ()
Arrays of Storable
things.
data StorableArray i e Source #
The array type
Instances
Storable e => MArray StorableArray e IO Source # | |
Defined in Data.Array.Storable.Internals getBounds :: Ix i => StorableArray i e -> IO (i, i) Source # getNumElements :: Ix i => StorableArray i e -> IO Int Source # 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) Source # unsafeRead :: Ix i => StorableArray i e -> Int -> IO e Source # unsafeWrite :: Ix i => StorableArray i e -> Int -> e -> IO () Source # |
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.Safe
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.