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

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

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

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

module Bindings.Librrd where
import Bindings.Posix.Time
import System.Posix.Types
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 10 "Bindings/Librrd.hsc" #-}

-- Formerly rrd_nan_inf.h
foreign import ccall "inline_DNAN" c'DNAN
  :: IO CDouble

{-# LINE 13 "Bindings/Librrd.hsc" #-}
foreign import ccall "inline_DINF" c'DINF
  :: IO CDouble

{-# LINE 14 "Bindings/Librrd.hsc" #-}
foreign import ccall "rrd_set_to_DNAN" c'rrd_set_to_DNAN
  :: IO CDouble
foreign import ccall "&rrd_set_to_DNAN" p'rrd_set_to_DNAN
  :: FunPtr (IO CDouble)

{-# LINE 15 "Bindings/Librrd.hsc" #-}
foreign import ccall "rrd_set_to_DINF" c'rrd_set_to_DINF
  :: IO CDouble
foreign import ccall "&rrd_set_to_DINF" p'rrd_set_to_DINF
  :: FunPtr (IO CDouble)

{-# LINE 16 "Bindings/Librrd.hsc" #-}

-- Transplanted from rrd_format.h
type C'rrd_value_t = CDouble

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

-- Information about an rrd file

{-# LINE 22 "Bindings/Librrd.hsc" #-}

{-# LINE 23 "Bindings/Librrd.hsc" #-}

{-# LINE 24 "Bindings/Librrd.hsc" #-}

{-# LINE 25 "Bindings/Librrd.hsc" #-}

{-# LINE 26 "Bindings/Librrd.hsc" #-}
data C'rrd_file_t = C'rrd_file_t{
  c'rrd_file_t'header_len :: COff,
  c'rrd_file_t'file_len :: COff,
  c'rrd_file_t'pos :: COff,
  c'rrd_file_t'pvt :: Ptr ()
} deriving (Eq,Show)
p'rrd_file_t'header_len p = plusPtr p 0
p'rrd_file_t'header_len :: Ptr (C'rrd_file_t) -> Ptr (COff)
p'rrd_file_t'file_len p = plusPtr p 4
p'rrd_file_t'file_len :: Ptr (C'rrd_file_t) -> Ptr (COff)
p'rrd_file_t'pos p = plusPtr p 8
p'rrd_file_t'pos :: Ptr (C'rrd_file_t) -> Ptr (COff)
p'rrd_file_t'pvt p = plusPtr p 12
p'rrd_file_t'pvt :: Ptr (C'rrd_file_t) -> Ptr (Ptr ())
instance Storable C'rrd_file_t where
  sizeOf _ = 16
  alignment = sizeOf
  peek p = do
    v0 <- peekByteOff p 0
    v1 <- peekByteOff p 4
    v2 <- peekByteOff p 8
    v3 <- peekByteOff p 12
    return $ C'rrd_file_t v0 v1 v2 v3
  poke p (C'rrd_file_t v0 v1 v2 v3) = do
    pokeByteOff p 0 v0
    pokeByteOff p 4 v1
    pokeByteOff p 8 v2
    pokeByteOff p 12 v3
    return ()

{-# LINE 27 "Bindings/Librrd.hsc" #-}

-- information used for the conventional file access methods

{-# LINE 30 "Bindings/Librrd.hsc" #-}

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

{-# LINE 36 "Bindings/Librrd.hsc" #-}
data C'rrd_simple_file_t = C'rrd_simple_file_t{
  c'rrd_simple_file_t'fd :: CInt
} deriving (Eq,Show)
p'rrd_simple_file_t'fd p = plusPtr p 0
p'rrd_simple_file_t'fd :: Ptr (C'rrd_simple_file_t) -> Ptr (CInt)
instance Storable C'rrd_simple_file_t where
  sizeOf _ = 4
  alignment = sizeOf
  peek p = do
    v0 <- peekByteOff p 0
    return $ C'rrd_simple_file_t v0
  poke p (C'rrd_simple_file_t v0) = do
    pokeByteOff p 0 v0
    return ()

{-# LINE 37 "Bindings/Librrd.hsc" #-}

-- rrd info interface

{-# LINE 40 "Bindings/Librrd.hsc" #-}

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

{-# LINE 42 "Bindings/Librrd.hsc" #-}
data C'rrd_blob_t = C'rrd_blob_t{
  c'rrd_blob_t'size :: CULong,
  c'rrd_blob_t'ptr :: Ptr CUChar
} deriving (Eq,Show)
p'rrd_blob_t'size p = plusPtr p 0
p'rrd_blob_t'size :: Ptr (C'rrd_blob_t) -> Ptr (CULong)
p'rrd_blob_t'ptr p = plusPtr p 4
p'rrd_blob_t'ptr :: Ptr (C'rrd_blob_t) -> Ptr (Ptr CUChar)
instance Storable C'rrd_blob_t where
  sizeOf _ = 8
  alignment = sizeOf
  peek p = do
    v0 <- peekByteOff p 0
    v1 <- peekByteOff p 4
    return $ C'rrd_blob_t v0 v1
  poke p (C'rrd_blob_t v0 v1) = do
    pokeByteOff p 0 v0
    pokeByteOff p 4 v1
    return ()

{-# LINE 43 "Bindings/Librrd.hsc" #-}

type C'rrd_info_type_t = CUInt

{-# LINE 45 "Bindings/Librrd.hsc" #-}
c'RD_I_VAL = 0
c'RD_I_VAL :: (Num a) => a

{-# LINE 46 "Bindings/Librrd.hsc" #-}
c'RD_I_CNT = 1
c'RD_I_CNT :: (Num a) => a

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

{-# LINE 48 "Bindings/Librrd.hsc" #-}
c'RD_I_INT = 3
c'RD_I_INT :: (Num a) => a

{-# LINE 49 "Bindings/Librrd.hsc" #-}
c'RD_I_BLO = 4
c'RD_I_BLO :: (Num a) => a

{-# LINE 50 "Bindings/Librrd.hsc" #-}


{-# LINE 52 "Bindings/Librrd.hsc" #-}

{-# LINE 53 "Bindings/Librrd.hsc" #-}

{-# LINE 54 "Bindings/Librrd.hsc" #-}

{-# LINE 55 "Bindings/Librrd.hsc" #-}

{-# LINE 56 "Bindings/Librrd.hsc" #-}

{-# LINE 57 "Bindings/Librrd.hsc" #-}
data C'rrd_infoval = C'rrd_infoval{
  c'rrd_infoval'u_cnt :: CULong,
  c'rrd_infoval'u_val :: C'rrd_value_t,
  c'rrd_infoval'u_str :: CString,
  c'rrd_infoval'u_int :: CInt,
  c'rrd_infoval'u_blo :: C'rrd_blob_t
} deriving (Eq,Show)
p'rrd_infoval'u_cnt p = plusPtr p 0
p'rrd_infoval'u_cnt :: Ptr (C'rrd_infoval) -> Ptr (CULong)
p'rrd_infoval'u_val p = plusPtr p 0
p'rrd_infoval'u_val :: Ptr (C'rrd_infoval) -> Ptr (C'rrd_value_t)
p'rrd_infoval'u_str p = plusPtr p 0
p'rrd_infoval'u_str :: Ptr (C'rrd_infoval) -> Ptr (CString)
p'rrd_infoval'u_int p = plusPtr p 0
p'rrd_infoval'u_int :: Ptr (C'rrd_infoval) -> Ptr (CInt)
p'rrd_infoval'u_blo p = plusPtr p 0
p'rrd_infoval'u_blo :: Ptr (C'rrd_infoval) -> Ptr (C'rrd_blob_t)
u'rrd_infoval'u_cnt :: C'rrd_infoval -> CULong -> IO C'rrd_infoval
u'rrd_infoval'u_cnt v vf = alloca $ \p -> do
  poke p v
  pokeByteOff p 0 vf
  vu <- peek p
  return $ v
    {c'rrd_infoval'u_cnt = c'rrd_infoval'u_cnt vu}
    {c'rrd_infoval'u_val = c'rrd_infoval'u_val vu}
    {c'rrd_infoval'u_str = c'rrd_infoval'u_str vu}
    {c'rrd_infoval'u_int = c'rrd_infoval'u_int vu}
    {c'rrd_infoval'u_blo = c'rrd_infoval'u_blo vu}
u'rrd_infoval'u_val :: C'rrd_infoval -> C'rrd_value_t -> IO C'rrd_infoval
u'rrd_infoval'u_val v vf = alloca $ \p -> do
  poke p v
  pokeByteOff p 0 vf
  vu <- peek p
  return $ v
    {c'rrd_infoval'u_cnt = c'rrd_infoval'u_cnt vu}
    {c'rrd_infoval'u_val = c'rrd_infoval'u_val vu}
    {c'rrd_infoval'u_str = c'rrd_infoval'u_str vu}
    {c'rrd_infoval'u_int = c'rrd_infoval'u_int vu}
    {c'rrd_infoval'u_blo = c'rrd_infoval'u_blo vu}
u'rrd_infoval'u_str :: C'rrd_infoval -> CString -> IO C'rrd_infoval
u'rrd_infoval'u_str v vf = alloca $ \p -> do
  poke p v
  pokeByteOff p 0 vf
  vu <- peek p
  return $ v
    {c'rrd_infoval'u_cnt = c'rrd_infoval'u_cnt vu}
    {c'rrd_infoval'u_val = c'rrd_infoval'u_val vu}
    {c'rrd_infoval'u_str = c'rrd_infoval'u_str vu}
    {c'rrd_infoval'u_int = c'rrd_infoval'u_int vu}
    {c'rrd_infoval'u_blo = c'rrd_infoval'u_blo vu}
u'rrd_infoval'u_int :: C'rrd_infoval -> CInt -> IO C'rrd_infoval
u'rrd_infoval'u_int v vf = alloca $ \p -> do
  poke p v
  pokeByteOff p 0 vf
  vu <- peek p
  return $ v
    {c'rrd_infoval'u_cnt = c'rrd_infoval'u_cnt vu}
    {c'rrd_infoval'u_val = c'rrd_infoval'u_val vu}
    {c'rrd_infoval'u_str = c'rrd_infoval'u_str vu}
    {c'rrd_infoval'u_int = c'rrd_infoval'u_int vu}
    {c'rrd_infoval'u_blo = c'rrd_infoval'u_blo vu}
u'rrd_infoval'u_blo :: C'rrd_infoval -> C'rrd_blob_t -> IO C'rrd_infoval
u'rrd_infoval'u_blo v vf = alloca $ \p -> do
  poke p v
  pokeByteOff p 0 vf
  vu <- peek p
  return $ v
    {c'rrd_infoval'u_cnt = c'rrd_infoval'u_cnt vu}
    {c'rrd_infoval'u_val = c'rrd_infoval'u_val vu}
    {c'rrd_infoval'u_str = c'rrd_infoval'u_str vu}
    {c'rrd_infoval'u_int = c'rrd_infoval'u_int vu}
    {c'rrd_infoval'u_blo = c'rrd_infoval'u_blo vu}
instance Storable C'rrd_infoval where
  sizeOf _ = 8
  alignment = sizeOf
  peek p = do
    v0 <- peekByteOff p 0
    v1 <- peekByteOff p 0
    v2 <- peekByteOff p 0
    v3 <- peekByteOff p 0
    v4 <- peekByteOff p 0
    return $ C'rrd_infoval v0 v1 v2 v3 v4
  poke p (C'rrd_infoval v0 v1 v2 v3 v4) = do
    pokeByteOff p 0 v0
    pokeByteOff p 0 v1
    pokeByteOff p 0 v2
    pokeByteOff p 0 v3
    pokeByteOff p 0 v4
    return ()

{-# LINE 58 "Bindings/Librrd.hsc" #-}
type C'rrd_infoval_t = C'rrd_infoval

{-# LINE 59 "Bindings/Librrd.hsc" #-}


{-# LINE 61 "Bindings/Librrd.hsc" #-}

{-# LINE 62 "Bindings/Librrd.hsc" #-}

{-# LINE 63 "Bindings/Librrd.hsc" #-}

{-# LINE 64 "Bindings/Librrd.hsc" #-}

{-# LINE 65 "Bindings/Librrd.hsc" #-}
data C'rrd_info_t = C'rrd_info_t{
  c'rrd_info_t'key :: CString,
  c'rrd_info_t'type :: C'rrd_info_type_t,
  c'rrd_info_t'value :: C'rrd_infoval_t,
  c'rrd_info_t'next :: Ptr C'rrd_info_t
} deriving (Eq,Show)
p'rrd_info_t'key p = plusPtr p 0
p'rrd_info_t'key :: Ptr (C'rrd_info_t) -> Ptr (CString)
p'rrd_info_t'type p = plusPtr p 4
p'rrd_info_t'type :: Ptr (C'rrd_info_t) -> Ptr (C'rrd_info_type_t)
p'rrd_info_t'value p = plusPtr p 8
p'rrd_info_t'value :: Ptr (C'rrd_info_t) -> Ptr (C'rrd_infoval_t)
p'rrd_info_t'next p = plusPtr p 16
p'rrd_info_t'next :: Ptr (C'rrd_info_t) -> Ptr (Ptr C'rrd_info_t)
instance Storable C'rrd_info_t where
  sizeOf _ = 20
  alignment = sizeOf
  peek p = do
    v0 <- peekByteOff p 0
    v1 <- peekByteOff p 4
    v2 <- peekByteOff p 8
    v3 <- peekByteOff p 16
    return $ C'rrd_info_t v0 v1 v2 v3
  poke p (C'rrd_info_t v0 v1 v2 v3) = do
    pokeByteOff p 0 v0
    pokeByteOff p 4 v1
    pokeByteOff p 8 v2
    pokeByteOff p 16 v3
    return ()

{-# LINE 66 "Bindings/Librrd.hsc" #-}

{-|The correct type for this callback should be @'Ptr' a -> 'CSize'
  -> 'Ptr' b -> 'IO' 'CSize'@ but that's impossible because of
  bindings-DSL restriction.
 -}
type C'rrd_output_callback_t = FunPtr (Ptr () -> CSize -> Ptr () -> IO CSize)
foreign import ccall "wrapper" mk'rrd_output_callback_t
  :: (Ptr () -> CSize -> Ptr () -> IO CSize) -> IO C'rrd_output_callback_t
foreign import ccall "dynamic" mK'rrd_output_callback_t
  :: C'rrd_output_callback_t -> (Ptr () -> CSize -> Ptr () -> IO CSize)

{-# LINE 72 "Bindings/Librrd.hsc" #-}

-- main function blocks
foreign import ccall "rrd_create" c'rrd_create
  :: CInt -> Ptr CString -> IO CInt
foreign import ccall "&rrd_create" p'rrd_create
  :: FunPtr (CInt -> Ptr CString -> IO CInt)

{-# LINE 75 "Bindings/Librrd.hsc" #-}
foreign import ccall "rrd_info" c'rrd_info
  :: CInt -> Ptr CString -> IO (Ptr C'rrd_info_t)
foreign import ccall "&rrd_info" p'rrd_info
  :: FunPtr (CInt -> Ptr CString -> IO (Ptr C'rrd_info_t))

{-# LINE 76 "Bindings/Librrd.hsc" #-}
foreign import ccall "inline_rrd_info_push" c'rrd_info_push
  :: Ptr C'rrd_info_t -> CString -> C'rrd_info_type_t -> Ptr C'rrd_infoval_t -> IO (Ptr C'rrd_info_t)

{-# LINE 77 "Bindings/Librrd.hsc" #-}
foreign import ccall "rrd_info_print" c'rrd_info_print
  :: Ptr C'rrd_info_t -> IO ()
foreign import ccall "&rrd_info_print" p'rrd_info_print
  :: FunPtr (Ptr C'rrd_info_t -> IO ())

{-# LINE 78 "Bindings/Librrd.hsc" #-}
foreign import ccall "rrd_info_free" c'rrd_info_free
  :: Ptr C'rrd_info_t -> IO ()
foreign import ccall "&rrd_info_free" p'rrd_info_free
  :: FunPtr (Ptr C'rrd_info_t -> IO ())

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

{-# LINE 80 "Bindings/Librrd.hsc" #-}
foreign import ccall "rrd_update_v" c'rrd_update_v
  :: CInt -> Ptr CString -> IO (Ptr C'rrd_info_t)
foreign import ccall "&rrd_update_v" p'rrd_update_v
  :: FunPtr (CInt -> Ptr CString -> IO (Ptr C'rrd_info_t))

{-# LINE 81 "Bindings/Librrd.hsc" #-}
foreign import ccall "rrd_graph" c'rrd_graph
  :: CInt -> Ptr CString -> Ptr (Ptr CString) -> Ptr CInt -> Ptr CInt -> Ptr CFile -> Ptr CDouble -> Ptr CDouble -> IO CInt
foreign import ccall "&rrd_graph" p'rrd_graph
  :: FunPtr (CInt -> Ptr CString -> Ptr (Ptr CString) -> Ptr CInt -> Ptr CInt -> Ptr CFile -> Ptr CDouble -> Ptr CDouble -> IO CInt)

{-# LINE 82 "Bindings/Librrd.hsc" #-}
foreign import ccall "rrd_graph_v" c'rrd_graph_v
  :: CInt -> Ptr CString -> IO (Ptr C'rrd_info_t)
foreign import ccall "&rrd_graph_v" p'rrd_graph_v
  :: FunPtr (CInt -> Ptr CString -> IO (Ptr C'rrd_info_t))

{-# LINE 83 "Bindings/Librrd.hsc" #-}
foreign import ccall "rrd_fetch" c'rrd_fetch
  :: CInt -> Ptr CString -> Ptr CTime -> Ptr CTime -> Ptr CULong -> Ptr CULong -> Ptr (Ptr CString) -> Ptr (Ptr C'rrd_value_t) -> IO CInt
foreign import ccall "&rrd_fetch" p'rrd_fetch
  :: FunPtr (CInt -> Ptr CString -> Ptr CTime -> Ptr CTime -> Ptr CULong -> Ptr CULong -> Ptr (Ptr CString) -> Ptr (Ptr C'rrd_value_t) -> IO CInt)

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

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

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

{-# LINE 87 "Bindings/Librrd.hsc" #-}
foreign import ccall "rrd_last" c'rrd_last
  :: CInt -> Ptr CString -> IO CTime
foreign import ccall "&rrd_last" p'rrd_last
  :: FunPtr (CInt -> Ptr CString -> IO CTime)

{-# LINE 88 "Bindings/Librrd.hsc" #-}
foreign import ccall "rrd_lastupdate" c'rrd_lastupdate
  :: CInt -> Ptr CString -> Ptr CTime -> Ptr CULong -> Ptr (Ptr CString) -> Ptr (Ptr CString) -> IO CInt
foreign import ccall "&rrd_lastupdate" p'rrd_lastupdate
  :: FunPtr (CInt -> Ptr CString -> Ptr CTime -> Ptr CULong -> Ptr (Ptr CString) -> Ptr (Ptr CString) -> IO CInt)

{-# LINE 89 "Bindings/Librrd.hsc" #-}
foreign import ccall "rrd_first" c'rrd_first
  :: CInt -> Ptr CString -> IO CTime
foreign import ccall "&rrd_first" p'rrd_first
  :: FunPtr (CInt -> Ptr CString -> IO CTime)

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

{-# LINE 91 "Bindings/Librrd.hsc" #-}
foreign import ccall "rrd_strversion" c'rrd_strversion
  :: IO CString
foreign import ccall "&rrd_strversion" p'rrd_strversion
  :: FunPtr (IO CString)

{-# LINE 92 "Bindings/Librrd.hsc" #-}
foreign import ccall "rrd_version" c'rrd_version
  :: IO CDouble
foreign import ccall "&rrd_version" p'rrd_version
  :: FunPtr (IO CDouble)

{-# LINE 93 "Bindings/Librrd.hsc" #-}
foreign import ccall "rrd_xport" c'rrd_xport
  :: CInt -> Ptr CString -> Ptr CInt -> Ptr CTime -> Ptr CTime -> Ptr CULong -> Ptr CULong -> Ptr (Ptr CString) -> Ptr (Ptr C'rrd_value_t) -> IO CInt
foreign import ccall "&rrd_xport" p'rrd_xport
  :: FunPtr (CInt -> Ptr CString -> Ptr CInt -> Ptr CTime -> Ptr CTime -> Ptr CULong -> Ptr CULong -> Ptr (Ptr CString) -> Ptr (Ptr C'rrd_value_t) -> IO CInt)

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

{-# LINE 95 "Bindings/Librrd.hsc" #-}
foreign import ccall "rrd_freemem" c'rrd_freemem
  :: Ptr a -> IO ()
foreign import ccall "&rrd_freemem" p'rrd_freemem
  :: FunPtr (Ptr a -> IO ())

{-# LINE 96 "Bindings/Librrd.hsc" #-}

-- thread-safe (hopefully)
foreign import ccall "rrd_create_r" c'rrd_create_r
  :: CString -> CULong -> CTime -> CInt -> Ptr CString -> IO CInt
foreign import ccall "&rrd_create_r" p'rrd_create_r
  :: FunPtr (CString -> CULong -> CTime -> CInt -> Ptr CString -> IO CInt)

{-# LINE 99 "Bindings/Librrd.hsc" #-}
-- NOTE: rrd_update_r are only thread-safe if no at-style time
-- specifications get used!!!
foreign import ccall "rrd_info_r" c'rrd_info_r
  :: CString -> IO (Ptr C'rrd_info_t)
foreign import ccall "&rrd_info_r" p'rrd_info_r
  :: FunPtr (CString -> IO (Ptr C'rrd_info_t))

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

{-# LINE 103 "Bindings/Librrd.hsc" #-}
foreign import ccall "rrd_fetch_r" c'rrd_fetch_r
  :: CString -> CString -> Ptr CTime -> Ptr CTime -> Ptr CULong -> Ptr CULong -> Ptr (Ptr CString) -> Ptr (Ptr C'rrd_value_t) -> IO CInt
foreign import ccall "&rrd_fetch_r" p'rrd_fetch_r
  :: FunPtr (CString -> CString -> Ptr CTime -> Ptr CTime -> Ptr CULong -> Ptr CULong -> Ptr (Ptr CString) -> Ptr (Ptr C'rrd_value_t) -> IO CInt)

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

{-# LINE 105 "Bindings/Librrd.hsc" #-}
foreign import ccall "rrd_last_r" c'rrd_last_r
  :: CString -> IO CTime
foreign import ccall "&rrd_last_r" p'rrd_last_r
  :: FunPtr (CString -> IO CTime)

{-# LINE 106 "Bindings/Librrd.hsc" #-}
foreign import ccall "rrd_lastupdate_r" c'rrd_lastupdate_r
  :: CString -> Ptr CTime -> Ptr CULong -> Ptr (Ptr CString) -> Ptr (Ptr CString) -> IO CInt
foreign import ccall "&rrd_lastupdate_r" p'rrd_lastupdate_r
  :: FunPtr (CString -> Ptr CTime -> Ptr CULong -> Ptr (Ptr CString) -> Ptr (Ptr CString) -> IO CInt)

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

{-# LINE 108 "Bindings/Librrd.hsc" #-}

foreign import ccall "rrd_dump_cb_r" c'rrd_dump_cb_r
  :: CString -> CInt -> C'rrd_output_callback_t -> Ptr b -> IO CInt
foreign import ccall "&rrd_dump_cb_r" p'rrd_dump_cb_r
  :: FunPtr (CString -> CInt -> C'rrd_output_callback_t -> Ptr b -> IO CInt)

{-# LINE 110 "Bindings/Librrd.hsc" #-}

-- Transplanted from rrd_parsetime.h
type C'rrd_timetype_t = CUInt

{-# LINE 113 "Bindings/Librrd.hsc" #-}
c'ABSOLUTE_TIME = 0
c'ABSOLUTE_TIME :: (Num a) => a

{-# LINE 114 "Bindings/Librrd.hsc" #-}
c'RELATIVE_TO_START_TIME = 1
c'RELATIVE_TO_START_TIME :: (Num a) => a

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

{-# LINE 116 "Bindings/Librrd.hsc" #-}

c'TIME_OK = wordPtrToPtr 0
c'TIME_OK :: Ptr a

{-# LINE 118 "Bindings/Librrd.hsc" #-}


{-# LINE 120 "Bindings/Librrd.hsc" #-}

{-# LINE 121 "Bindings/Librrd.hsc" #-}

{-# LINE 122 "Bindings/Librrd.hsc" #-}

{-# LINE 123 "Bindings/Librrd.hsc" #-}
data C'rrd_time_value = C'rrd_time_value{
  c'rrd_time_value'type :: C'rrd_timetype_t,
  c'rrd_time_value'offset :: CLong,
  c'rrd_time_value'tm :: C'tm
} deriving (Eq,Show)
p'rrd_time_value'type p = plusPtr p 0
p'rrd_time_value'type :: Ptr (C'rrd_time_value) -> Ptr (C'rrd_timetype_t)
p'rrd_time_value'offset p = plusPtr p 4
p'rrd_time_value'offset :: Ptr (C'rrd_time_value) -> Ptr (CLong)
p'rrd_time_value'tm p = plusPtr p 8
p'rrd_time_value'tm :: Ptr (C'rrd_time_value) -> Ptr (C'tm)
instance Storable C'rrd_time_value where
  sizeOf _ = 52
  alignment = sizeOf
  peek p = do
    v0 <- peekByteOff p 0
    v1 <- peekByteOff p 4
    v2 <- peekByteOff p 8
    return $ C'rrd_time_value v0 v1 v2
  poke p (C'rrd_time_value v0 v1 v2) = do
    pokeByteOff p 0 v0
    pokeByteOff p 4 v1
    pokeByteOff p 8 v2
    return ()

{-# LINE 124 "Bindings/Librrd.hsc" #-}
type C'rrd_time_value_t = C'rrd_time_value

{-# LINE 125 "Bindings/Librrd.hsc" #-}

foreign import ccall "rrd_parsetime" c'rrd_parsetime
  :: CString -> Ptr C'rrd_time_value_t -> IO CString
foreign import ccall "&rrd_parsetime" p'rrd_parsetime
  :: FunPtr (CString -> Ptr C'rrd_time_value_t -> IO CString)

{-# LINE 127 "Bindings/Librrd.hsc" #-}


{-# LINE 129 "Bindings/Librrd.hsc" #-}

{-# LINE 130 "Bindings/Librrd.hsc" #-}

{-# LINE 131 "Bindings/Librrd.hsc" #-}
data C'rrd_context = C'rrd_context{
  c'rrd_context'lib_errstr :: [CChar],
  c'rrd_context'rrd_error :: [CChar]
} deriving (Eq,Show)
p'rrd_context'lib_errstr p = plusPtr p 0
p'rrd_context'lib_errstr :: Ptr (C'rrd_context) -> Ptr (CChar)
p'rrd_context'rrd_error p = plusPtr p 256
p'rrd_context'rrd_error :: Ptr (C'rrd_context) -> Ptr (CChar)
instance Storable C'rrd_context where
  sizeOf _ = 4352
  alignment = sizeOf
  peek p = do
    v0 <- peekArray 256 (plusPtr p 0)
    v1 <- peekArray 4096 (plusPtr p 256)
    return $ C'rrd_context v0 v1
  poke p (C'rrd_context v0 v1) = do
    pokeArray (plusPtr p 0) (take 256 v0)
    pokeArray (plusPtr p 256) (take 4096 v1)
    return ()

{-# LINE 132 "Bindings/Librrd.hsc" #-}
type C'rrd_context_t = C'rrd_context

{-# LINE 133 "Bindings/Librrd.hsc" #-}

-- returns the current per-thread rrd_context
foreign import ccall "rrd_get_context" c'rrd_get_context
  :: IO (Ptr C'rrd_context_t)
foreign import ccall "&rrd_get_context" p'rrd_get_context
  :: FunPtr (IO (Ptr C'rrd_context_t))

{-# LINE 136 "Bindings/Librrd.hsc" #-}

foreign import ccall "rrd_proc_start_end" c'rrd_proc_start_end
  :: Ptr C'rrd_time_value_t -> Ptr C'rrd_time_value_t -> Ptr CTime -> Ptr CTime -> IO CInt
foreign import ccall "&rrd_proc_start_end" p'rrd_proc_start_end
  :: FunPtr (Ptr C'rrd_time_value_t -> Ptr C'rrd_time_value_t -> Ptr CTime -> Ptr CTime -> IO CInt)

{-# LINE 138 "Bindings/Librrd.hsc" #-}

-- HELPER FUNCTIONS
-- rrd_set_error() is unavailable as it uses C varargs.
foreign import ccall "rrd_clear_error" c'rrd_clear_error
  :: IO ()
foreign import ccall "&rrd_clear_error" p'rrd_clear_error
  :: FunPtr (IO ())

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

{-# LINE 143 "Bindings/Librrd.hsc" #-}
foreign import ccall "rrd_get_error" c'rrd_get_error
  :: IO CString
foreign import ccall "&rrd_get_error" p'rrd_get_error
  :: FunPtr (IO CString)

{-# LINE 144 "Bindings/Librrd.hsc" #-}
-- rrd_strerror is thread safe, but still it uses a global buffer (but
-- one per thread), thus subsequent calls within a single thread
-- overwrite the same buffer
foreign import ccall "rrd_strerror" c'rrd_strerror
  :: CInt -> IO CString
foreign import ccall "&rrd_strerror" p'rrd_strerror
  :: FunPtr (CInt -> IO CString)

{-# LINE 148 "Bindings/Librrd.hsc" #-}

-- MULTITHREADED HELPER FUNCTIONS
foreign import ccall "rrd_new_context" c'rrd_new_context
  :: IO (Ptr C'rrd_context_t)
foreign import ccall "&rrd_new_context" p'rrd_new_context
  :: FunPtr (IO (Ptr C'rrd_context_t))

{-# LINE 151 "Bindings/Librrd.hsc" #-}
foreign import ccall "rrd_free_context" c'rrd_free_context
  :: Ptr C'rrd_context_t -> IO ()
foreign import ccall "&rrd_free_context" p'rrd_free_context
  :: FunPtr (Ptr C'rrd_context_t -> IO ())

{-# LINE 152 "Bindings/Librrd.hsc" #-}

-- UTILITY FUNCTIONS
foreign import ccall "rrd_random" c'rrd_random
  :: IO CLong
foreign import ccall "&rrd_random" p'rrd_random
  :: FunPtr (IO CLong)

{-# LINE 155 "Bindings/Librrd.hsc" #-}
foreign import ccall "rrd_add_ptr" c'rrd_add_ptr
  :: Ptr (Ptr (Ptr a)) -> Ptr CSize -> Ptr a -> IO CInt
foreign import ccall "&rrd_add_ptr" p'rrd_add_ptr
  :: FunPtr (Ptr (Ptr (Ptr a)) -> Ptr CSize -> Ptr a -> IO CInt)

{-# LINE 156 "Bindings/Librrd.hsc" #-}
foreign import ccall "rrd_add_strdup" c'rrd_add_strdup
  :: Ptr (Ptr CString) -> Ptr CSize -> CString -> IO CInt
foreign import ccall "&rrd_add_strdup" p'rrd_add_strdup
  :: FunPtr (Ptr (Ptr CString) -> Ptr CSize -> CString -> IO CInt)

{-# LINE 157 "Bindings/Librrd.hsc" #-}
foreign import ccall "rrd_free_ptrs" c'rrd_free_ptrs
  :: Ptr (Ptr (Ptr a)) -> CSize -> IO ()
foreign import ccall "&rrd_free_ptrs" p'rrd_free_ptrs
  :: FunPtr (Ptr (Ptr (Ptr a)) -> CSize -> IO ())

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

{-# LINE 159 "Bindings/Librrd.hsc" #-}