packages feed

stdcxx-0.7.0.0: src/STD/VectorIterator/Template.hs

{-# LANGUAGE EmptyDataDecls, FlexibleInstances,
  MultiParamTypeClasses, TypeFamilies #-}
module STD.VectorIterator.Template where
import Foreign.C.Types
import Foreign.Ptr
import FFICXX.Runtime.Cast

data RawVectorIterator tp1

newtype VectorIterator tp1 = VectorIterator (Ptr
                                               (RawVectorIterator tp1))

class () => IVectorIterator tp1 where
        deRef :: VectorIterator tp1 -> IO tp1
        
        increment :: VectorIterator tp1 -> IO (VectorIterator tp1)

instance () => FPtr (VectorIterator tp1) where
        type Raw (VectorIterator tp1) = RawVectorIterator tp1
        get_fptr (VectorIterator ptr) = ptr
        cast_fptr_to_obj = VectorIterator

instance () =>
         Castable (VectorIterator tp1) (Ptr (RawVectorIterator tp1))
         where
        cast x f = f (castPtr (get_fptr x))
        uncast x f = f (cast_fptr_to_obj (castPtr x))