{-# LINE 1 "Bindings/Librrd/Client.hsc" #-}

{-# LINE 2 "Bindings/Librrd/Client.hsc" #-}

{-# LINE 3 "Bindings/Librrd/Client.hsc" #-}

{-# LINE 4 "Bindings/Librrd/Client.hsc" #-}

-- |<http://oss.oetiker.ch/rrdtool/doc/librrd.en.html>
-- 
-- <http://oss.oetiker.ch/rrdtool/doc/rrdcached.en.html>

module Bindings.Librrd.Client where
import Foreign.Ptr (Ptr,FunPtr,plusPtr)
import Foreign.Ptr (wordPtrToPtr,castPtrToFunPtr)
import Foreign.Storable
import Foreign.C.Types
import Foreign.C.String (CString,CStringLen,CWString,CWStringLen)
import Foreign.Marshal.Alloc (alloca)
import Foreign.Marshal.Array (peekArray,pokeArray)
import Data.Int
import Data.Word

{-# LINE 11 "Bindings/Librrd/Client.hsc" #-}

foreign import ccall "inline_RRDCACHED_DEFAULT_ADDRESS" c'RRDCACHED_DEFAULT_ADDRESS
  :: CString

{-# LINE 13 "Bindings/Librrd/Client.hsc" #-}
foreign import ccall "inline_RRDCACHED_DEFAULT_PORT" c'RRDCACHED_DEFAULT_PORT
  :: CString

{-# LINE 14 "Bindings/Librrd/Client.hsc" #-}
foreign import ccall "inline_ENV_RRDCACHED_ADDRESS" c'ENV_RRDCACHED_ADDRESS
  :: CString

{-# LINE 15 "Bindings/Librrd/Client.hsc" #-}

foreign import ccall "rrdc_connect" c'rrdc_connect
  :: CString -> IO CInt
foreign import ccall "&rrdc_connect" p'rrdc_connect
  :: FunPtr (CString -> IO CInt)

{-# LINE 17 "Bindings/Librrd/Client.hsc" #-}
foreign import ccall "rrdc_is_connected" c'rrdc_is_connected
  :: CString -> IO CInt
foreign import ccall "&rrdc_is_connected" p'rrdc_is_connected
  :: FunPtr (CString -> IO CInt)

{-# LINE 18 "Bindings/Librrd/Client.hsc" #-}
foreign import ccall "rrdc_disconnect" c'rrdc_disconnect
  :: IO CInt
foreign import ccall "&rrdc_disconnect" p'rrdc_disconnect
  :: FunPtr (IO CInt)

{-# LINE 19 "Bindings/Librrd/Client.hsc" #-}

foreign import ccall "rrdc_update" c'rrdc_update
  :: CString -> CInt -> Ptr CString -> IO CInt
foreign import ccall "&rrdc_update" p'rrdc_update
  :: FunPtr (CString -> CInt -> Ptr CString -> IO CInt)

{-# LINE 21 "Bindings/Librrd/Client.hsc" #-}

foreign import ccall "rrdc_flush" c'rrdc_flush
  :: CString -> IO CInt
foreign import ccall "&rrdc_flush" p'rrdc_flush
  :: FunPtr (CString -> IO CInt)

{-# LINE 23 "Bindings/Librrd/Client.hsc" #-}
-- This one is not exported from the shared library.
-- #ccall rrdc_flush_if_daemon, CString -> CString -> IO CInt

-- Helper definitions for rrdc_stats_t
c'RRDC_STATS_TYPE_GAUGE = 1
c'RRDC_STATS_TYPE_GAUGE :: (Num a) => a

{-# LINE 28 "Bindings/Librrd/Client.hsc" #-}
c'RRDC_STATS_TYPE_COUNTER = 2
c'RRDC_STATS_TYPE_COUNTER :: (Num a) => a

{-# LINE 29 "Bindings/Librrd/Client.hsc" #-}


{-# LINE 31 "Bindings/Librrd/Client.hsc" #-}

{-# LINE 32 "Bindings/Librrd/Client.hsc" #-}

{-# LINE 33 "Bindings/Librrd/Client.hsc" #-}

{-# LINE 34 "Bindings/Librrd/Client.hsc" #-}

{-# LINE 35 "Bindings/Librrd/Client.hsc" #-}

{-# LINE 36 "Bindings/Librrd/Client.hsc" #-}
data C'rrdc_stats_s = C'rrdc_stats_s{
  c'rrdc_stats_s'name :: CString,
  c'rrdc_stats_s'type :: Word16,
  c'rrdc_stats_s'value'counter :: Word64,
  c'rrdc_stats_s'value'gauge :: CDouble,
  c'rrdc_stats_s'next :: Ptr C'rrdc_stats_s
} deriving (Eq,Show)
p'rrdc_stats_s'name p = plusPtr p 0
p'rrdc_stats_s'name :: Ptr (C'rrdc_stats_s) -> Ptr (CString)
p'rrdc_stats_s'type p = plusPtr p 4
p'rrdc_stats_s'type :: Ptr (C'rrdc_stats_s) -> Ptr (Word16)
p'rrdc_stats_s'value'counter p = plusPtr p 8
p'rrdc_stats_s'value'counter :: Ptr (C'rrdc_stats_s) -> Ptr (Word64)
p'rrdc_stats_s'value'gauge p = plusPtr p 8
p'rrdc_stats_s'value'gauge :: Ptr (C'rrdc_stats_s) -> Ptr (CDouble)
p'rrdc_stats_s'next p = plusPtr p 16
p'rrdc_stats_s'next :: Ptr (C'rrdc_stats_s) -> Ptr (Ptr C'rrdc_stats_s)
u'rrdc_stats_s'value'counter :: C'rrdc_stats_s -> Word64 -> IO C'rrdc_stats_s
u'rrdc_stats_s'value'counter v vf = alloca $ \p -> do
  poke p v
  pokeByteOff p 8 vf
  vu <- peek p
  return $ v
    {c'rrdc_stats_s'value'counter = c'rrdc_stats_s'value'counter vu}
    {c'rrdc_stats_s'value'gauge = c'rrdc_stats_s'value'gauge vu}
u'rrdc_stats_s'value'gauge :: C'rrdc_stats_s -> CDouble -> IO C'rrdc_stats_s
u'rrdc_stats_s'value'gauge v vf = alloca $ \p -> do
  poke p v
  pokeByteOff p 8 vf
  vu <- peek p
  return $ v
    {c'rrdc_stats_s'value'counter = c'rrdc_stats_s'value'counter vu}
    {c'rrdc_stats_s'value'gauge = c'rrdc_stats_s'value'gauge vu}
instance Storable C'rrdc_stats_s where
  sizeOf _ = 20
  alignment = sizeOf
  peek p = do
    v0 <- peekByteOff p 0
    v1 <- peekByteOff p 4
    v2 <- peekByteOff p 8
    v3 <- peekByteOff p 8
    v4 <- peekByteOff p 16
    return $ C'rrdc_stats_s v0 v1 v2 v3 v4
  poke p (C'rrdc_stats_s v0 v1 v2 v3 v4) = do
    pokeByteOff p 0 v0
    pokeByteOff p 4 v1
    pokeByteOff p 8 v2
    pokeByteOff p 8 v3
    pokeByteOff p 16 v4
    return ()

{-# LINE 37 "Bindings/Librrd/Client.hsc" #-}
type C'rrdc_stats_t = C'rrdc_stats_s

{-# LINE 38 "Bindings/Librrd/Client.hsc" #-}

foreign import ccall "rrdc_stats_get" c'rrdc_stats_get
  :: Ptr (Ptr C'rrdc_stats_t) -> IO CInt
foreign import ccall "&rrdc_stats_get" p'rrdc_stats_get
  :: FunPtr (Ptr (Ptr C'rrdc_stats_t) -> IO CInt)

{-# LINE 40 "Bindings/Librrd/Client.hsc" #-}
foreign import ccall "rrdc_stats_free" c'rrdc_stats_free
  :: Ptr C'rrdc_stats_t -> IO ()
foreign import ccall "&rrdc_stats_free" p'rrdc_stats_free
  :: FunPtr (Ptr C'rrdc_stats_t -> IO ())

{-# LINE 41 "Bindings/Librrd/Client.hsc" #-}