stdcxx-0.7.0.0: src/STD/Pair/Template.hs
{-# LANGUAGE EmptyDataDecls, FlexibleInstances,
MultiParamTypeClasses, TypeFamilies #-}
module STD.Pair.Template where
import Foreign.C.Types
import Foreign.Ptr
import FFICXX.Runtime.Cast
data RawPair tp1 tp2
newtype Pair tp1 tp2 = Pair (Ptr (RawPair tp1 tp2))
class () => IPair tp1 tp2 where
newPair :: tp1 -> tp2 -> IO (Pair tp1 tp2)
deletePair :: Pair tp1 tp2 -> IO ()
first_get :: Pair tp1 tp2 -> IO tp1
first_set :: Pair tp1 tp2 -> tp1 -> IO ()
second_get :: Pair tp1 tp2 -> IO tp2
second_set :: Pair tp1 tp2 -> tp2 -> IO ()
instance () => FPtr (Pair tp1 tp2) where
type Raw (Pair tp1 tp2) = RawPair tp1 tp2
get_fptr (Pair ptr) = ptr
cast_fptr_to_obj = Pair
instance () => Castable (Pair tp1 tp2) (Ptr (RawPair tp1 tp2))
where
cast x f = f (castPtr (get_fptr x))
uncast x f = f (cast_fptr_to_obj (castPtr x))