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

module HROOT.Class.TDatime.Implementation where


import HROOT.TypeCast

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

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 ITDatime TDatime where
  convert = xform1 c_tdatime_convert
  setTDatime = xform1 c_tdatime_settdatime
instance IDeletable TDatime where
  delete = xform0 c_tdatime_delete

instance ITDatime (Exist TDatime) where
  convert (ETDatime x) = convert x
  setTDatime (ETDatime x) = setTDatime x
instance IDeletable (Exist TDatime) where
  delete (ETDatime x) = delete x


newTDatime :: Int -> Int -> Int -> Int -> Int -> Int -> IO TDatime
newTDatime = xform5 c_tdatime_newtdatime

tDatimeGetDay :: TDatime -> IO Int
tDatimeGetDay = xform0 c_tdatime_tdatimegetday

tDatimeGetHour :: TDatime -> IO Int
tDatimeGetHour = xform0 c_tdatime_tdatimegethour

tDatimeGetMinute :: TDatime -> IO Int
tDatimeGetMinute = xform0 c_tdatime_tdatimegetminute

tDatimeGetSecond :: TDatime -> IO Int
tDatimeGetSecond = xform0 c_tdatime_tdatimegetsecond

tDatimeGetYear :: TDatime -> IO Int
tDatimeGetYear = xform0 c_tdatime_tdatimegetyear

tDatimeGetMonth :: TDatime -> IO Int
tDatimeGetMonth = xform0 c_tdatime_tdatimegetmonth

instance FPtr (Exist TDatime) where
  type Raw (Exist TDatime) = RawTDatime
  get_fptr (ETDatime obj) = castForeignPtr (get_fptr obj)
  cast_fptr_to_obj fptr = ETDatime (cast_fptr_to_obj (fptr :: ForeignPtr RawTDatime) :: TDatime)