|Copyright||(c) The University of Glasgow 2001|
|License||BSD-style (see the file libraries/base/LICENSE)|
|Portability||non-portable (uses Data.Array.MArray)|
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.
data StorableArray i e Source
The array type
|Storable e => MArray StorableArray e IO|
Defined in Data.Array.Storable.Internals
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 ()
Module Data.Array.MArray provides the interface of storable arrays. They are instances of class
MArray (with the
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
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.
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).