Copyright | (c) The FFI task force 2001 |
---|---|
License | BSD-style (see the file libraries/base/LICENSE) |
Maintainer | ffi@haskell.org |
Stability | provisional |
Portability | portable |
Safe Haskell | Trustworthy |
Language | Haskell2010 |
Marshalling support: routines allocating, storing, and retrieving Haskell lists that are represented as arrays in the foreign language
- mallocArray ∷ Storable a ⇒ Int → IO (Ptr a)
- mallocArray0 ∷ Storable a ⇒ Int → IO (Ptr a)
- allocaArray ∷ Storable a ⇒ Int → (Ptr a → IO b) → IO b
- allocaArray0 ∷ Storable a ⇒ Int → (Ptr a → IO b) → IO b
- reallocArray ∷ Storable a ⇒ Ptr a → Int → IO (Ptr a)
- reallocArray0 ∷ Storable a ⇒ Ptr a → Int → IO (Ptr a)
- peekArray ∷ Storable a ⇒ Int → Ptr a → IO [a]
- peekArray0 ∷ (Storable a, Eq a) ⇒ a → Ptr a → IO [a]
- pokeArray ∷ Storable a ⇒ Ptr a → [a] → IO ()
- pokeArray0 ∷ Storable a ⇒ a → Ptr a → [a] → IO ()
- newArray ∷ Storable a ⇒ [a] → IO (Ptr a)
- newArray0 ∷ Storable a ⇒ a → [a] → IO (Ptr a)
- withArray ∷ Storable a ⇒ [a] → (Ptr a → IO b) → IO b
- withArray0 ∷ Storable a ⇒ a → [a] → (Ptr a → IO b) → IO b
- withArrayLen ∷ Storable a ⇒ [a] → (Int → Ptr a → IO b) → IO b
- withArrayLen0 ∷ Storable a ⇒ a → [a] → (Int → Ptr a → IO b) → IO b
- copyArray ∷ Storable a ⇒ Ptr a → Ptr a → Int → IO ()
- moveArray ∷ Storable a ⇒ Ptr a → Ptr a → Int → IO ()
- lengthArray0 ∷ (Storable a, Eq a) ⇒ a → Ptr a → IO Int
- advancePtr ∷ Storable a ⇒ Ptr a → Int → Ptr a
Marshalling arrays
Allocation
mallocArray ∷ Storable a ⇒ Int → IO (Ptr a) Source
Allocate storage for the given number of elements of a storable type
(like malloc
, but for multiple elements).
mallocArray0 ∷ Storable a ⇒ Int → IO (Ptr a) Source
Like mallocArray
, but add an extra position to hold a special
termination element.
allocaArray ∷ Storable a ⇒ Int → (Ptr a → IO b) → IO b Source
Temporarily allocate space for the given number of elements
(like alloca
, but for multiple elements).
allocaArray0 ∷ Storable a ⇒ Int → (Ptr a → IO b) → IO b Source
Like allocaArray
, but add an extra position to hold a special
termination element.
reallocArray0 ∷ Storable a ⇒ Ptr a → Int → IO (Ptr a) Source
Adjust the size of an array including an extra position for the end marker.
Marshalling
peekArray ∷ Storable a ⇒ Int → Ptr a → IO [a] Source
Convert an array of given length into a Haskell list. The implementation is tail-recursive and so uses constant stack space.
peekArray0 ∷ (Storable a, Eq a) ⇒ a → Ptr a → IO [a] Source
Convert an array terminated by the given end marker into a Haskell list
pokeArray0 ∷ Storable a ⇒ a → Ptr a → [a] → IO () Source
Write the list elements consecutive into memory and terminate them with the given marker element
Combined allocation and marshalling
newArray ∷ Storable a ⇒ [a] → IO (Ptr a) Source
Write a list of storable elements into a newly allocated, consecutive
sequence of storable values
(like new
, but for multiple elements).
newArray0 ∷ Storable a ⇒ a → [a] → IO (Ptr a) Source
Write a list of storable elements into a newly allocated, consecutive sequence of storable values, where the end is fixed by the given end marker
withArray ∷ Storable a ⇒ [a] → (Ptr a → IO b) → IO b Source
Temporarily store a list of storable values in memory
(like with
, but for multiple elements).
withArray0 ∷ Storable a ⇒ a → [a] → (Ptr a → IO b) → IO b Source
Like withArray
, but a terminator indicates where the array ends
withArrayLen ∷ Storable a ⇒ [a] → (Int → Ptr a → IO b) → IO b Source
Like withArray
, but the action gets the number of values
as an additional parameter
withArrayLen0 ∷ Storable a ⇒ a → [a] → (Int → Ptr a → IO b) → IO b Source
Like withArrayLen
, but a terminator indicates where the array ends
Copying
(argument order: destination, source)
copyArray ∷ Storable a ⇒ Ptr a → Ptr a → Int → IO () Source
Copy the given number of elements from the second array (source) into the first array (destination); the copied areas may not overlap
moveArray ∷ Storable a ⇒ Ptr a → Ptr a → Int → IO () Source
Copy the given number of elements from the second array (source) into the first array (destination); the copied areas may overlap
Finding the length
lengthArray0 ∷ (Storable a, Eq a) ⇒ a → Ptr a → IO Int Source
Return the number of elements in an array, excluding the terminator