basement-0.0.12: Foundation scrap box of array & string
LicenseBSD-style
MaintainerVincent Hanquez <vincent@snarc.org>
Stabilityexperimental
Portabilityportable
Safe HaskellNone
LanguageHaskell2010

Basement.FinalPtr

Description

A smaller ForeignPtr reimplementation that work in any prim monad.

Here be dragon.

Synopsis

Documentation

data FinalPtr a #

Create a pointer with an associated finalizer

Constructors

FinalPtr (Ptr a) 
FinalForeign (ForeignPtr a) 

Instances

Instances details
Eq (FinalPtr a) # 
Instance details

Defined in Basement.FinalPtr

Methods

(==) :: FinalPtr a -> FinalPtr a -> Bool #

(/=) :: FinalPtr a -> FinalPtr a -> Bool #

Ord (FinalPtr a) # 
Instance details

Defined in Basement.FinalPtr

Methods

compare :: FinalPtr a -> FinalPtr a -> Ordering #

(<) :: FinalPtr a -> FinalPtr a -> Bool #

(<=) :: FinalPtr a -> FinalPtr a -> Bool #

(>) :: FinalPtr a -> FinalPtr a -> Bool #

(>=) :: FinalPtr a -> FinalPtr a -> Bool #

max :: FinalPtr a -> FinalPtr a -> FinalPtr a #

min :: FinalPtr a -> FinalPtr a -> FinalPtr a #

Show (FinalPtr a) # 
Instance details

Defined in Basement.FinalPtr

Methods

showsPrec :: Int -> FinalPtr a -> ShowS #

show :: FinalPtr a -> String #

showList :: [FinalPtr a] -> ShowS #

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 #