packages feed

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

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

data RawMapIterator tpk tpv

newtype MapIterator tpk tpv = MapIterator (Ptr
                                             (RawMapIterator tpk tpv))

class () => IMapIterator tpk tpv where
        deRef :: MapIterator tpk tpv -> IO (Pair tpk tpv)
        
        increment :: MapIterator tpk tpv -> IO (MapIterator tpk tpv)

instance () => FPtr (MapIterator tpk tpv) where
        type Raw (MapIterator tpk tpv) = RawMapIterator tpk tpv
        get_fptr (MapIterator ptr) = ptr
        cast_fptr_to_obj = MapIterator

instance () =>
         Castable (MapIterator tpk tpv) (Ptr (RawMapIterator tpk tpv))
         where
        cast x f = f (castPtr (get_fptr x))
        uncast x f = f (cast_fptr_to_obj (castPtr x))