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

module HROOT.Core.TAttMarker.Implementation where


import FFICXX.Runtime.Cast

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

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 ITAttMarker TAttMarker where
  getMarkerColor = xform0 c_tattmarker_getmarkercolor
  getMarkerStyle = xform0 c_tattmarker_getmarkerstyle
  getMarkerSize = xform0 c_tattmarker_getmarkersize
  resetAttMarker = xform1 c_tattmarker_resetattmarker
  setMarkerAttributes = xform0 c_tattmarker_setmarkerattributes
  setMarkerColor = xform1 c_tattmarker_setmarkercolor
  setMarkerStyle = xform1 c_tattmarker_setmarkerstyle
  setMarkerSize = xform1 c_tattmarker_setmarkersize
instance IDeletable TAttMarker where
  delete = xform0 c_tattmarker_delete

instance ITAttMarker (Exist TAttMarker) where
  getMarkerColor (ETAttMarker x) = getMarkerColor x
  getMarkerStyle (ETAttMarker x) = getMarkerStyle x
  getMarkerSize (ETAttMarker x) = getMarkerSize x
  resetAttMarker (ETAttMarker x) = resetAttMarker x
  setMarkerAttributes (ETAttMarker x) = setMarkerAttributes x
  setMarkerColor (ETAttMarker x) = setMarkerColor x
  setMarkerStyle (ETAttMarker x) = setMarkerStyle x
  setMarkerSize (ETAttMarker x) = setMarkerSize x
instance IDeletable (Exist TAttMarker) where
  delete (ETAttMarker x) = delete x


newTAttMarker :: CInt -> CInt -> CInt -> IO TAttMarker
newTAttMarker = xform2 c_tattmarker_newtattmarker





instance FPtr (Exist TAttMarker) where
  type Raw (Exist TAttMarker) = RawTAttMarker
  get_fptr (ETAttMarker obj) = castForeignPtr (get_fptr obj)
  cast_fptr_to_obj fptr = ETAttMarker (cast_fptr_to_obj (fptr :: ForeignPtr RawTAttMarker) :: TAttMarker)