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) Source # | |
Ord ( FinalPtr a) Source # | |
Defined in Basement.FinalPtr compare :: FinalPtr a -> FinalPtr a -> Ordering Source # (<) :: FinalPtr a -> FinalPtr a -> Bool Source # (<=) :: FinalPtr a -> FinalPtr a -> Bool Source # (>) :: FinalPtr a -> FinalPtr a -> Bool Source # (>=) :: FinalPtr a -> FinalPtr a -> Bool Source # |
|
Show ( FinalPtr a) Source # | |
finalPtrSameMemory :: FinalPtr a -> FinalPtr b -> Bool Source #
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 Source #
Cast a finalized pointer from type a to type b
toFinalPtr :: PrimMonad prim => Ptr a -> ( Ptr a -> IO ()) -> prim ( FinalPtr a) Source #
create a new FinalPtr from a Pointer
toFinalPtrForeign :: ForeignPtr a -> FinalPtr a Source #
Create a new FinalPtr from a ForeignPtr
touchFinalPtr :: PrimMonad prim => FinalPtr p -> prim () Source #
withFinalPtr :: PrimMonad prim => FinalPtr p -> ( Ptr p -> prim a) -> prim a Source #
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 Source #
Unsafe version of
withFinalPtr
withFinalPtrNoTouch :: FinalPtr p -> ( Ptr p -> a) -> a Source #