stdcxx-0.7.0.0: src/STD/SharedPtr/Template.hs
{-# LANGUAGE EmptyDataDecls, FlexibleInstances,
MultiParamTypeClasses, TypeFamilies #-}
module STD.SharedPtr.Template where
import Foreign.C.Types
import Foreign.Ptr
import FFICXX.Runtime.Cast
data RawSharedPtr tp1
newtype SharedPtr tp1 = SharedPtr (Ptr (RawSharedPtr tp1))
class () => ISharedPtr tp1 where
newSharedPtr0 :: IO (SharedPtr tp1)
newSharedPtr :: tp1 -> IO (SharedPtr tp1)
get :: SharedPtr tp1 -> IO tp1
reset :: SharedPtr tp1 -> IO ()
use_count :: SharedPtr tp1 -> IO CInt
deleteSharedPtr :: SharedPtr tp1 -> IO ()
instance () => FPtr (SharedPtr tp1) where
type Raw (SharedPtr tp1) = RawSharedPtr tp1
get_fptr (SharedPtr ptr) = ptr
cast_fptr_to_obj = SharedPtr
instance () => Castable (SharedPtr tp1) (Ptr (RawSharedPtr tp1))
where
cast x f = f (castPtr (get_fptr x))
uncast x f = f (cast_fptr_to_obj (castPtr x))