{-# LANGUAGE ForeignFunctionInterface, TypeFamilies, MultiParamTypeClasses, 
             FlexibleInstances, TypeSynonymInstances, EmptyDataDecls, 
             OverlappingInstances, IncoherentInstances #-}

module HROOT.Core.TArrayC.Implementation where


import FFICXX.Runtime.Cast

import HROOT.Core.TArrayC.RawType
import HROOT.Core.TArrayC.FFI
import HROOT.Core.TArrayC.Interface
import HROOT.Core.TArrayC.Cast

import HROOT.Core.TArray.RawType
import HROOT.Core.TArray.Cast
import HROOT.Core.TArray.Interface
import HROOT.Core.Deletable.RawType
import HROOT.Core.Deletable.Cast
import HROOT.Core.Deletable.Interface

import Data.Word
import Foreign.C
import Foreign.Ptr 
import Foreign.ForeignPtr

import System.IO.Unsafe


instance ITArrayC TArrayC where
instance ITArray TArrayC where
instance IDeletable TArrayC where
  delete = xform0 c_tarrayc_delete

instance ITArrayC (Exist TArrayC) where

instance ITArray (Exist TArrayC) where

instance IDeletable (Exist TArrayC) where
  delete (ETArrayC x) = delete x







instance FPtr (Exist TArrayC) where
  type Raw (Exist TArrayC) = RawTArrayC
  get_fptr (ETArrayC obj) = castForeignPtr (get_fptr obj)
  cast_fptr_to_obj fptr = ETArrayC (cast_fptr_to_obj (fptr :: ForeignPtr RawTArrayC) :: TArrayC)