foundation-0.0.3: Alternative prelude with batteries and no dependencies

License | BSD-style
Maintainer | Vincent Hanquez <vincent@snarc.org>
Stability | experimental
Portability | portable
Safe Haskell | None
Language | Haskell2010

Foundation.Foreign

Description

Synopsis

- data FinalPtr a
  - = FinalPtr (Ptr a)
  - | FinalForeign (ForeignPtr a)
- finalPtrSameMemory :: FinalPtr a -> FinalPtr b -> Bool
- castFinalPtr :: FinalPtr a -> FinalPtr b
- toFinalPtr :: PrimMonad prim => Ptr a -> (Ptr a -> IO ()) -> prim (FinalPtr a)
- toFinalPtrForeign :: ForeignPtr a -> FinalPtr a
- withFinalPtr :: PrimMonad prim => FinalPtr p -> (Ptr p -> prim a) -> prim a
- withUnsafeFinalPtr :: PrimMonad prim => FinalPtr p -> (Ptr p -> prim a) -> a
- withFinalPtrNoTouch :: FinalPtr p -> (Ptr p -> a) -> a
- foreignMem :: PrimType ty => FinalPtr ty -> Int -> UArray ty
- mutableForeignMem :: (PrimMonad prim, PrimType ty) => FinalPtr ty -> Int -> prim (MUArray ty (PrimState prim))
- module Foreign.C.Types

# Documentation

data FinalPtr a #

Create a pointer with an associated finalizer

Constructors

FinalPtr (Ptr a) |
FinalForeign (ForeignPtr a) |

finalPtrSameMemory :: FinalPtr a -> FinalPtr b -> Bool #

Check if 2 final ptr points on the same memory bits

it stand to reason that provided a final ptr that is still being referenced and thus have the memory still valid, if 2 final ptrs have the same address, they should be the same final ptr

castFinalPtr :: FinalPtr a -> FinalPtr b #

Cast a finalized pointer from type a to type b

toFinalPtr :: PrimMonad prim => Ptr a -> (Ptr a -> IO ()) -> prim (FinalPtr a) #

create a new FinalPtr from a Pointer

toFinalPtrForeign :: ForeignPtr a -> FinalPtr a #

Create a new FinalPtr from a ForeignPtr

withFinalPtr :: PrimMonad prim => FinalPtr p -> (Ptr p -> prim a) -> prim a #

Looks at the raw pointer inside a FinalPtr, making sure the data pointed by the pointer is not finalized during the call to `f`

withUnsafeFinalPtr :: PrimMonad prim => FinalPtr p -> (Ptr p -> prim a) -> a #

Unsafe version of `withFinalPtr`

withFinalPtrNoTouch :: FinalPtr p -> (Ptr p -> a) -> a #

foreignMem #

Arguments

:: PrimType ty |
=> FinalPtr ty | the start pointer with a finalizer
-> Int | the number of elements (in elements, not bytes)
-> UArray ty |

mutableForeignMem #

Arguments

:: (PrimMonad prim, PrimType ty) |
=> FinalPtr ty | the start pointer with a finalizer
-> Int | the number of elements (in elements, not bytes)
-> prim (MUArray ty (PrimState prim)) |

module Foreign.C.Types