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

module HROOT.Class.TList.Implementation where


import HROOT.TypeCast

import HROOT.Class.TList.RawType
import HROOT.Class.TList.FFI
import HROOT.Class.TList.Interface
import HROOT.Class.TList.Cast
import HROOT.Class.TClass.RawType
import HROOT.Class.TClass.Cast
import HROOT.Class.TClass.Interface
import HROOT.Class.TSeqCollection.RawType
import HROOT.Class.TSeqCollection.Cast
import HROOT.Class.TSeqCollection.Interface
import HROOT.Class.TCollection.RawType
import HROOT.Class.TCollection.Cast
import HROOT.Class.TCollection.Interface
import HROOT.Class.TObject.RawType
import HROOT.Class.TObject.Cast
import HROOT.Class.TObject.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 ITList TList where
instance ITSeqCollection TList where
instance ITCollection TList where
instance ITObject TList where
  draw = xform1 c_tlist_draw
  findObject = xform1 c_tlist_findobject
  getName = xform0 c_tlist_getname
  isA = xform0 c_tlist_isa
  isFolder = xform0 c_tlist_isfolder
  isEqual = xform1 c_tlist_isequal
  isSortable = xform0 c_tlist_issortable
  paint = xform1 c_tlist_paint
  printObj = xform1 c_tlist_printobj
  recursiveRemove = xform1 c_tlist_recursiveremove
  saveAs = xform2 c_tlist_saveas
  useCurrentStyle = xform0 c_tlist_usecurrentstyle
  write = xform3 c_tlist_write
instance IDeletable TList where
  delete = xform0 c_tlist_delete

instance ITList (Exist TList) where

instance ITSeqCollection (Exist TList) where

instance ITCollection (Exist TList) where

instance ITObject (Exist TList) where
  draw (ETList x) = draw x
  findObject (ETList x) = findObject x
  getName (ETList x) = getName x
  isA (ETList x) = isA x
  isFolder (ETList x) = isFolder x
  isEqual (ETList x) = isEqual x
  isSortable (ETList x) = isSortable x
  paint (ETList x) = paint x
  printObj (ETList x) = printObj x
  recursiveRemove (ETList x) = recursiveRemove x
  saveAs (ETList x) = saveAs x
  useCurrentStyle (ETList x) = useCurrentStyle x
  write (ETList x) = write x
instance IDeletable (Exist TList) where
  delete (ETList x) = delete x







instance FPtr (Exist TList) where
  type Raw (Exist TList) = RawTList
  get_fptr (ETList obj) = castForeignPtr (get_fptr obj)
  cast_fptr_to_obj fptr = ETList (cast_fptr_to_obj (fptr :: ForeignPtr RawTList) :: TList)