{-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
  ForeignFunctionInterface, IncoherentInstances,
  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
  TypeFamilies, TypeSynonymInstances #-}
module HROOT.Tree.TChain.Implementation where
import Data.Monoid
import Data.Word
import Data.Int
import Foreign.C
import Foreign.Ptr
import Language.Haskell.TH
import Language.Haskell.TH.Syntax
import System.IO.Unsafe
import FFICXX.Runtime.Cast
import FFICXX.Runtime.CodeGen.Cxx
import FFICXX.Runtime.TH
import HROOT.Tree.TChain.RawType
import HROOT.Tree.TChain.FFI
import HROOT.Tree.TChain.Interface
import HROOT.Tree.TChain.Cast
import HROOT.Tree.TChain.RawType
import HROOT.Tree.TChain.Cast
import HROOT.Tree.TChain.Interface
import HROOT.Tree.TBranch.RawType
import HROOT.Tree.TBranch.Cast
import HROOT.Tree.TBranch.Interface
import HROOT.Core.TClass.RawType
import HROOT.Core.TClass.Cast
import HROOT.Core.TClass.Interface
import HROOT.Tree.TTree.RawType
import HROOT.Tree.TTree.Cast
import HROOT.Tree.TTree.Interface
import HROOT.Core.TNamed.RawType
import HROOT.Core.TNamed.Cast
import HROOT.Core.TNamed.Interface
import HROOT.Core.TAttLine.RawType
import HROOT.Core.TAttLine.Cast
import HROOT.Core.TAttLine.Interface
import HROOT.Core.TAttFill.RawType
import HROOT.Core.TAttFill.Cast
import HROOT.Core.TAttFill.Interface
import HROOT.Core.TAttMarker.RawType
import HROOT.Core.TAttMarker.Cast
import HROOT.Core.TAttMarker.Interface
import HROOT.Core.TObject.RawType
import HROOT.Core.TObject.Cast
import HROOT.Core.TObject.Interface
import STD.Deletable.RawType
import STD.Deletable.Cast
import STD.Deletable.Interface

instance () => ITChain (TChain) where
        addChain :: forall c0. (ITChain c0, FPtr c0) => TChain -> c0 -> IO CInt
addChain = (Ptr RawTChain -> Ptr RawTChain -> IO CInt)
-> TChain -> c0 -> IO CInt
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawTChain -> Ptr RawTChain -> IO CInt
c_tchain_addchain
        addChain1 :: forall c0. Castable c0 CString => TChain -> c0 -> CLong -> IO CInt
addChain1 = (Ptr RawTChain -> CString -> CLong -> IO CInt)
-> TChain -> c0 -> CLong -> IO CInt
forall a ca x1 cx1 x2 cx2 y cy.
(Castable a ca, Castable x1 cx1, Castable x2 cx2, Castable y cy) =>
(ca -> cx1 -> cx2 -> IO cy) -> a -> x1 -> x2 -> IO y
xform2 Ptr RawTChain -> CString -> CLong -> IO CInt
c_tchain_addchain1

instance () => ITTree (TChain) where
        branch :: forall c0.
Castable c0 CString =>
TChain -> c0 -> CInt -> CInt -> IO CInt
branch = (Ptr RawTChain -> CString -> CInt -> CInt -> IO CInt)
-> TChain -> c0 -> CInt -> CInt -> IO CInt
forall a ca x1 cx1 x2 cx2 x3 cx3 y cy.
(Castable a ca, Castable x1 cx1, Castable x2 cx2, Castable x3 cx3,
 Castable y cy) =>
(ca -> cx1 -> cx2 -> cx3 -> IO cy) -> a -> x1 -> x2 -> x3 -> IO y
xform3 Ptr RawTChain -> CString -> CInt -> CInt -> IO CInt
c_tchain_branch
        branch1 :: forall c1 c0.
(Castable c1 CString, Castable c0 CString) =>
TChain -> c0 -> Ptr () -> c1 -> CInt -> IO TBranch
branch1 = (Ptr RawTChain
 -> CString -> Ptr () -> CString -> CInt -> IO (Ptr RawTBranch))
-> TChain -> c0 -> Ptr () -> c1 -> CInt -> IO TBranch
forall a ca x1 cx1 x2 cx2 x3 cx3 x4 cx4 y cy.
(Castable a ca, Castable x1 cx1, Castable x2 cx2, Castable x3 cx3,
 Castable x4 cx4, Castable y cy) =>
(ca -> cx1 -> cx2 -> cx3 -> cx4 -> IO cy)
-> a -> x1 -> x2 -> x3 -> x4 -> IO y
xform4 Ptr RawTChain
-> CString -> Ptr () -> CString -> CInt -> IO (Ptr RawTBranch)
c_tchain_branch1
        fillTree :: TChain -> IO CInt
fillTree = (Ptr RawTChain -> IO CInt) -> TChain -> IO CInt
forall a ca y cy.
(Castable a ca, Castable y cy) =>
(ca -> IO cy) -> a -> IO y
xform0 Ptr RawTChain -> IO CInt
c_tchain_filltree

instance () => ITNamed (TChain) where
        setName :: forall c0. Castable c0 CString => TChain -> c0 -> IO ()
setName = (Ptr RawTChain -> CString -> IO ()) -> TChain -> c0 -> IO ()
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawTChain -> CString -> IO ()
c_tchain_setname
        setNameTitle :: forall c1 c0.
(Castable c1 CString, Castable c0 CString) =>
TChain -> c0 -> c1 -> IO ()
setNameTitle = (Ptr RawTChain -> CString -> CString -> IO ())
-> TChain -> c0 -> c1 -> IO ()
forall a ca x1 cx1 x2 cx2 y cy.
(Castable a ca, Castable x1 cx1, Castable x2 cx2, Castable y cy) =>
(ca -> cx1 -> cx2 -> IO cy) -> a -> x1 -> x2 -> IO y
xform2 Ptr RawTChain -> CString -> CString -> IO ()
c_tchain_setnametitle
        setTitle :: forall c0. Castable c0 CString => TChain -> c0 -> IO ()
setTitle = (Ptr RawTChain -> CString -> IO ()) -> TChain -> c0 -> IO ()
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawTChain -> CString -> IO ()
c_tchain_settitle

instance () => ITAttLine (TChain) where
        getLineColor :: TChain -> IO CShort
getLineColor = (Ptr RawTChain -> IO CShort) -> TChain -> IO CShort
forall a ca y cy.
(Castable a ca, Castable y cy) =>
(ca -> IO cy) -> a -> IO y
xform0 Ptr RawTChain -> IO CShort
c_tchain_getlinecolor
        getLineStyle :: TChain -> IO CShort
getLineStyle = (Ptr RawTChain -> IO CShort) -> TChain -> IO CShort
forall a ca y cy.
(Castable a ca, Castable y cy) =>
(ca -> IO cy) -> a -> IO y
xform0 Ptr RawTChain -> IO CShort
c_tchain_getlinestyle
        getLineWidth :: TChain -> IO CShort
getLineWidth = (Ptr RawTChain -> IO CShort) -> TChain -> IO CShort
forall a ca y cy.
(Castable a ca, Castable y cy) =>
(ca -> IO cy) -> a -> IO y
xform0 Ptr RawTChain -> IO CShort
c_tchain_getlinewidth
        resetAttLine :: forall c0. Castable c0 CString => TChain -> c0 -> IO ()
resetAttLine = (Ptr RawTChain -> CString -> IO ()) -> TChain -> c0 -> IO ()
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawTChain -> CString -> IO ()
c_tchain_resetattline
        setLineAttributes :: TChain -> IO ()
setLineAttributes = (Ptr RawTChain -> IO ()) -> TChain -> IO ()
forall a ca y cy.
(Castable a ca, Castable y cy) =>
(ca -> IO cy) -> a -> IO y
xform0 Ptr RawTChain -> IO ()
c_tchain_setlineattributes
        setLineColor :: TChain -> CShort -> IO ()
setLineColor = (Ptr RawTChain -> CShort -> IO ()) -> TChain -> CShort -> IO ()
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawTChain -> CShort -> IO ()
c_tchain_setlinecolor
        setLineStyle :: TChain -> CShort -> IO ()
setLineStyle = (Ptr RawTChain -> CShort -> IO ()) -> TChain -> CShort -> IO ()
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawTChain -> CShort -> IO ()
c_tchain_setlinestyle
        setLineWidth :: TChain -> CShort -> IO ()
setLineWidth = (Ptr RawTChain -> CShort -> IO ()) -> TChain -> CShort -> IO ()
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawTChain -> CShort -> IO ()
c_tchain_setlinewidth

instance () => ITAttFill (TChain) where
        setFillColor :: TChain -> CInt -> IO ()
setFillColor = (Ptr RawTChain -> CInt -> IO ()) -> TChain -> CInt -> IO ()
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawTChain -> CInt -> IO ()
c_tchain_setfillcolor
        setFillStyle :: TChain -> CInt -> IO ()
setFillStyle = (Ptr RawTChain -> CInt -> IO ()) -> TChain -> CInt -> IO ()
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawTChain -> CInt -> IO ()
c_tchain_setfillstyle

instance () => ITAttMarker (TChain) where
        getMarkerColor :: TChain -> IO CShort
getMarkerColor = (Ptr RawTChain -> IO CShort) -> TChain -> IO CShort
forall a ca y cy.
(Castable a ca, Castable y cy) =>
(ca -> IO cy) -> a -> IO y
xform0 Ptr RawTChain -> IO CShort
c_tchain_getmarkercolor
        getMarkerStyle :: TChain -> IO CShort
getMarkerStyle = (Ptr RawTChain -> IO CShort) -> TChain -> IO CShort
forall a ca y cy.
(Castable a ca, Castable y cy) =>
(ca -> IO cy) -> a -> IO y
xform0 Ptr RawTChain -> IO CShort
c_tchain_getmarkerstyle
        getMarkerSize :: TChain -> IO CFloat
getMarkerSize = (Ptr RawTChain -> IO CFloat) -> TChain -> IO CFloat
forall a ca y cy.
(Castable a ca, Castable y cy) =>
(ca -> IO cy) -> a -> IO y
xform0 Ptr RawTChain -> IO CFloat
c_tchain_getmarkersize
        resetAttMarker :: forall c0. Castable c0 CString => TChain -> c0 -> IO ()
resetAttMarker = (Ptr RawTChain -> CString -> IO ()) -> TChain -> c0 -> IO ()
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawTChain -> CString -> IO ()
c_tchain_resetattmarker
        setMarkerAttributes :: TChain -> IO ()
setMarkerAttributes = (Ptr RawTChain -> IO ()) -> TChain -> IO ()
forall a ca y cy.
(Castable a ca, Castable y cy) =>
(ca -> IO cy) -> a -> IO y
xform0 Ptr RawTChain -> IO ()
c_tchain_setmarkerattributes
        setMarkerColor :: TChain -> CShort -> IO ()
setMarkerColor = (Ptr RawTChain -> CShort -> IO ()) -> TChain -> CShort -> IO ()
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawTChain -> CShort -> IO ()
c_tchain_setmarkercolor
        setMarkerStyle :: TChain -> CShort -> IO ()
setMarkerStyle = (Ptr RawTChain -> CShort -> IO ()) -> TChain -> CShort -> IO ()
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawTChain -> CShort -> IO ()
c_tchain_setmarkerstyle
        setMarkerSize :: TChain -> CShort -> IO ()
setMarkerSize = (Ptr RawTChain -> CShort -> IO ()) -> TChain -> CShort -> IO ()
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawTChain -> CShort -> IO ()
c_tchain_setmarkersize

instance () => ITObject (TChain) where
        clear :: forall c0. Castable c0 CString => TChain -> c0 -> IO ()
clear = (Ptr RawTChain -> CString -> IO ()) -> TChain -> c0 -> IO ()
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawTChain -> CString -> IO ()
c_tchain_clear
        draw :: forall c0. Castable c0 CString => TChain -> c0 -> IO ()
draw = (Ptr RawTChain -> CString -> IO ()) -> TChain -> c0 -> IO ()
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawTChain -> CString -> IO ()
c_tchain_draw
        findObject :: forall c0. Castable c0 CString => TChain -> c0 -> IO TObject
findObject = (Ptr RawTChain -> CString -> IO (Ptr RawTObject))
-> TChain -> c0 -> IO TObject
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawTChain -> CString -> IO (Ptr RawTObject)
c_tchain_findobject
        getName :: TChain -> IO CString
getName = (Ptr RawTChain -> IO CString) -> TChain -> IO CString
forall a ca y cy.
(Castable a ca, Castable y cy) =>
(ca -> IO cy) -> a -> IO y
xform0 Ptr RawTChain -> IO CString
c_tchain_getname
        isA :: TChain -> IO TClass
isA = (Ptr RawTChain -> IO (Ptr RawTClass)) -> TChain -> IO TClass
forall a ca y cy.
(Castable a ca, Castable y cy) =>
(ca -> IO cy) -> a -> IO y
xform0 Ptr RawTChain -> IO (Ptr RawTClass)
c_tchain_isa
        paint :: forall c0. Castable c0 CString => TChain -> c0 -> IO ()
paint = (Ptr RawTChain -> CString -> IO ()) -> TChain -> c0 -> IO ()
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawTChain -> CString -> IO ()
c_tchain_paint
        printObj :: forall c0. Castable c0 CString => TChain -> c0 -> IO ()
printObj = (Ptr RawTChain -> CString -> IO ()) -> TChain -> c0 -> IO ()
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 Ptr RawTChain -> CString -> IO ()
c_tchain_printobj
        saveAs :: forall c1 c0.
(Castable c1 CString, Castable c0 CString) =>
TChain -> c0 -> c1 -> IO ()
saveAs = (Ptr RawTChain -> CString -> CString -> IO ())
-> TChain -> c0 -> c1 -> IO ()
forall a ca x1 cx1 x2 cx2 y cy.
(Castable a ca, Castable x1 cx1, Castable x2 cx2, Castable y cy) =>
(ca -> cx1 -> cx2 -> IO cy) -> a -> x1 -> x2 -> IO y
xform2 Ptr RawTChain -> CString -> CString -> IO ()
c_tchain_saveas
        write :: forall c0.
Castable c0 CString =>
TChain -> c0 -> CInt -> CInt -> IO CInt
write = (Ptr RawTChain -> CString -> CInt -> CInt -> IO CInt)
-> TChain -> c0 -> CInt -> CInt -> IO CInt
forall a ca x1 cx1 x2 cx2 x3 cx3 y cy.
(Castable a ca, Castable x1 cx1, Castable x2 cx2, Castable x3 cx3,
 Castable y cy) =>
(ca -> cx1 -> cx2 -> cx3 -> IO cy) -> a -> x1 -> x2 -> x3 -> IO y
xform3 Ptr RawTChain -> CString -> CInt -> CInt -> IO CInt
c_tchain_write
        write_ :: TChain -> IO CInt
write_ = (Ptr RawTChain -> IO CInt) -> TChain -> IO CInt
forall a ca y cy.
(Castable a ca, Castable y cy) =>
(ca -> IO cy) -> a -> IO y
xform0 Ptr RawTChain -> IO CInt
c_tchain_write_

instance () => IDeletable (TChain) where
        delete :: TChain -> IO ()
delete = (Ptr RawTChain -> IO ()) -> TChain -> IO ()
forall a ca y cy.
(Castable a ca, Castable y cy) =>
(ca -> IO cy) -> a -> IO y
xform0 Ptr RawTChain -> IO ()
c_tchain_delete

newTChain ::
            (Castable c1 CString, Castable c0 CString) => c0 -> c1 -> IO TChain
newTChain :: forall c1 c0.
(Castable c1 CString, Castable c0 CString) =>
c0 -> c1 -> IO TChain
newTChain = (CString -> CString -> IO (Ptr RawTChain)) -> c0 -> c1 -> IO TChain
forall a ca x1 cx1 y cy.
(Castable a ca, Castable x1 cx1, Castable y cy) =>
(ca -> cx1 -> IO cy) -> a -> x1 -> IO y
xform1 CString -> CString -> IO (Ptr RawTChain)
c_tchain_newtchain