stdcxx-0.7.0.0: src/STD/UniquePtr/Template.hs
{-# LANGUAGE EmptyDataDecls, FlexibleInstances,
MultiParamTypeClasses, TypeFamilies #-}
module STD.UniquePtr.Template where
import Foreign.C.Types
import Foreign.Ptr
import FFICXX.Runtime.Cast
data RawUniquePtr tp1
newtype UniquePtr tp1 = UniquePtr (Ptr (RawUniquePtr tp1))
class () => IUniquePtr tp1 where
newUniquePtr0 :: IO (UniquePtr tp1)
newUniquePtr :: tp1 -> IO (UniquePtr tp1)
get :: UniquePtr tp1 -> IO tp1
release :: UniquePtr tp1 -> IO tp1
reset :: UniquePtr tp1 -> IO ()
deleteUniquePtr :: UniquePtr tp1 -> IO ()
instance () => FPtr (UniquePtr tp1) where
type Raw (UniquePtr tp1) = RawUniquePtr tp1
get_fptr (UniquePtr ptr) = ptr
cast_fptr_to_obj = UniquePtr
instance () => Castable (UniquePtr tp1) (Ptr (RawUniquePtr tp1))
where
cast x f = f (castPtr (get_fptr x))
uncast x f = f (cast_fptr_to_obj (castPtr x))