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

module HROOT.Class.TArrayL64.Implementation where


import HROOT.TypeCast

import HROOT.Class.TArrayL64.RawType
import HROOT.Class.TArrayL64.FFI
import HROOT.Class.TArrayL64.Interface
import HROOT.Class.TArrayL64.Cast

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

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

import System.IO.Unsafe


instance ITArrayL64 TArrayL64 where
instance ITArray TArrayL64 where
instance IDeletable TArrayL64 where
  delete = xform0 c_tarrayl64_delete

instance ITArrayL64 (Exist TArrayL64) where

instance ITArray (Exist TArrayL64) where

instance IDeletable (Exist TArrayL64) where
  delete (ETArrayL64 x) = delete x







instance FPtr (Exist TArrayL64) where
  type Raw (Exist TArrayL64) = RawTArrayL64
  get_fptr (ETArrayL64 obj) = castForeignPtr (get_fptr obj)
  cast_fptr_to_obj fptr = ETArrayL64 (cast_fptr_to_obj (fptr :: ForeignPtr RawTArrayL64) :: TArrayL64)