License | BSD-style |
---|---|
Maintainer | Vincent Hanquez <vincent@snarc.org> |
Stability | experimental |
Portability | portable |
Safe Haskell | None |
Language | Haskell2010 |
A smaller ForeignPtr reimplementation that work in any prim monad.
Here be dragon.
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
- touchFinalPtr :: PrimMonad prim => FinalPtr p -> prim ()
- 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
Documentation
Create a pointer with an associated finalizer
FinalPtr (Ptr a) | |
FinalForeign (ForeignPtr a) |
Instances
Eq (FinalPtr a) # | |
Ord (FinalPtr a) # | |
Show (FinalPtr 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
touchFinalPtr :: PrimMonad prim => FinalPtr p -> prim () #
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 #