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

module HROOT.Class.TNtupleD.Implementation where


import HROOT.TypeCast

import HROOT.Class.TNtupleD.RawType
import HROOT.Class.TNtupleD.FFI
import HROOT.Class.TNtupleD.Interface
import HROOT.Class.TNtupleD.Cast
import HROOT.Class.TClass.RawType
import HROOT.Class.TClass.Cast
import HROOT.Class.TClass.Interface
import HROOT.Class.TTree.RawType
import HROOT.Class.TTree.Cast
import HROOT.Class.TTree.Interface
import HROOT.Class.TNamed.RawType
import HROOT.Class.TNamed.Cast
import HROOT.Class.TNamed.Interface
import HROOT.Class.TAttLine.RawType
import HROOT.Class.TAttLine.Cast
import HROOT.Class.TAttLine.Interface
import HROOT.Class.TAttFill.RawType
import HROOT.Class.TAttFill.Cast
import HROOT.Class.TAttFill.Interface
import HROOT.Class.TAttMarker.RawType
import HROOT.Class.TAttMarker.Cast
import HROOT.Class.TAttMarker.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 ITNtupleD TNtupleD where
instance ITTree TNtupleD where
instance ITNamed TNtupleD where
  setName = xform1 c_tntupled_setname
  setNameTitle = xform2 c_tntupled_setnametitle
  setTitle = xform1 c_tntupled_settitle
instance ITAttLine TNtupleD where
  getLineColor = xform0 c_tntupled_getlinecolor
  getLineStyle = xform0 c_tntupled_getlinestyle
  getLineWidth = xform0 c_tntupled_getlinewidth
  resetAttLine = xform1 c_tntupled_resetattline
  setLineAttributes = xform0 c_tntupled_setlineattributes
  setLineColor = xform1 c_tntupled_setlinecolor
  setLineStyle = xform1 c_tntupled_setlinestyle
  setLineWidth = xform1 c_tntupled_setlinewidth
instance ITAttFill TNtupleD where
  setFillColor = xform1 c_tntupled_setfillcolor
  setFillStyle = xform1 c_tntupled_setfillstyle
instance ITAttMarker TNtupleD where
  getMarkerColor = xform0 c_tntupled_getmarkercolor
  getMarkerStyle = xform0 c_tntupled_getmarkerstyle
  getMarkerSize = xform0 c_tntupled_getmarkersize
  resetAttMarker = xform1 c_tntupled_resetattmarker
  setMarkerAttributes = xform0 c_tntupled_setmarkerattributes
  setMarkerColor = xform1 c_tntupled_setmarkercolor
  setMarkerStyle = xform1 c_tntupled_setmarkerstyle
  setMarkerSize = xform1 c_tntupled_setmarkersize
instance ITObject TNtupleD where
  draw = xform1 c_tntupled_draw
  findObject = xform1 c_tntupled_findobject
  getName = xform0 c_tntupled_getname
  isA = xform0 c_tntupled_isa
  isFolder = xform0 c_tntupled_isfolder
  isEqual = xform1 c_tntupled_isequal
  isSortable = xform0 c_tntupled_issortable
  paint = xform1 c_tntupled_paint
  printObj = xform1 c_tntupled_printobj
  recursiveRemove = xform1 c_tntupled_recursiveremove
  saveAs = xform2 c_tntupled_saveas
  useCurrentStyle = xform0 c_tntupled_usecurrentstyle
  write = xform3 c_tntupled_write
instance IDeletable TNtupleD where
  delete = xform0 c_tntupled_delete

instance ITNtupleD (Exist TNtupleD) where

instance ITTree (Exist TNtupleD) where

instance ITNamed (Exist TNtupleD) where
  setName (ETNtupleD x) = setName x
  setNameTitle (ETNtupleD x) = setNameTitle x
  setTitle (ETNtupleD x) = setTitle x
instance ITAttLine (Exist TNtupleD) where
  getLineColor (ETNtupleD x) = getLineColor x
  getLineStyle (ETNtupleD x) = getLineStyle x
  getLineWidth (ETNtupleD x) = getLineWidth x
  resetAttLine (ETNtupleD x) = resetAttLine x
  setLineAttributes (ETNtupleD x) = setLineAttributes x
  setLineColor (ETNtupleD x) = setLineColor x
  setLineStyle (ETNtupleD x) = setLineStyle x
  setLineWidth (ETNtupleD x) = setLineWidth x
instance ITAttFill (Exist TNtupleD) where
  setFillColor (ETNtupleD x) = setFillColor x
  setFillStyle (ETNtupleD x) = setFillStyle x
instance ITAttMarker (Exist TNtupleD) where
  getMarkerColor (ETNtupleD x) = getMarkerColor x
  getMarkerStyle (ETNtupleD x) = getMarkerStyle x
  getMarkerSize (ETNtupleD x) = getMarkerSize x
  resetAttMarker (ETNtupleD x) = resetAttMarker x
  setMarkerAttributes (ETNtupleD x) = setMarkerAttributes x
  setMarkerColor (ETNtupleD x) = setMarkerColor x
  setMarkerStyle (ETNtupleD x) = setMarkerStyle x
  setMarkerSize (ETNtupleD x) = setMarkerSize x
instance ITObject (Exist TNtupleD) where
  draw (ETNtupleD x) = draw x
  findObject (ETNtupleD x) = findObject x
  getName (ETNtupleD x) = getName x
  isA (ETNtupleD x) = isA x
  isFolder (ETNtupleD x) = isFolder x
  isEqual (ETNtupleD x) = isEqual x
  isSortable (ETNtupleD x) = isSortable x
  paint (ETNtupleD x) = paint x
  printObj (ETNtupleD x) = printObj x
  recursiveRemove (ETNtupleD x) = recursiveRemove x
  saveAs (ETNtupleD x) = saveAs x
  useCurrentStyle (ETNtupleD x) = useCurrentStyle x
  write (ETNtupleD x) = write x
instance IDeletable (Exist TNtupleD) where
  delete (ETNtupleD x) = delete x


newTNtupleD :: String -> String -> String -> Int -> IO TNtupleD
newTNtupleD = xform3 c_tntupled_newtntupled





instance FPtr (Exist TNtupleD) where
  type Raw (Exist TNtupleD) = RawTNtupleD
  get_fptr (ETNtupleD obj) = castForeignPtr (get_fptr obj)
  cast_fptr_to_obj fptr = ETNtupleD (cast_fptr_to_obj (fptr :: ForeignPtr RawTNtupleD) :: TNtupleD)