{-# INCLUDE <bindings.macros.h> #-}
{-# INCLUDE <sys/select.h> #-}
{-# LINE 1 "src/Bindings/Posix/Sys/Select.hsc" #-}

{-# LINE 2 "src/Bindings/Posix/Sys/Select.hsc" #-}

{-# LINE 3 "src/Bindings/Posix/Sys/Select.hsc" #-}

-- | <http://www.opengroup.org/onlinepubs/9699919799/basedefs/sys_select.h.html>

module Bindings.Posix.Sys.Select where
import Foreign
import Foreign.C
import Bindings.Posix.Sys.Types
import Bindings.Posix.Time
import Bindings.Posix.Signal


{-# LINE 14 "src/Bindings/Posix/Sys/Select.hsc" #-}

{-# LINE 15 "src/Bindings/Posix/Sys/Select.hsc" #-}

{-# LINE 16 "src/Bindings/Posix/Sys/Select.hsc" #-}
data C'timeval = C'timeval {timeval'tv_sec :: CTime , timeval'tv_usec ::  C'suseconds_t }
instance Storable C'timeval where
 sizeOf _ = 8
 alignment = sizeOf
 peek p = do
  v0 <- peekByteOff p 0
  v1 <- peekByteOff p 4
  return $ C'timeval v0 v1
 poke p (C'timeval v0 v1  ) = do
  pokeByteOff p 0 v0
  pokeByteOff p 4 v1
  return ()

{-# LINE 17 "src/Bindings/Posix/Sys/Select.hsc" #-}


{-# LINE 19 "src/Bindings/Posix/Sys/Select.hsc" #-}
data C'fd_set = C'fd_set
instance Storable C'fd_set where
 sizeOf _ = 128
 alignment = sizeOf
 peek p = do
  return $ C'fd_set
 poke p (C'fd_set  ) = do
  return ()

{-# LINE 20 "src/Bindings/Posix/Sys/Select.hsc" #-}

c'FD_SETSIZE = 1024 ; c'FD_SETSIZE :: (Num a) => a

{-# LINE 22 "src/Bindings/Posix/Sys/Select.hsc" #-}

foreign import ccall "inline_FD_CLR" c'FD_CLR :: CInt -> Ptr  C'fd_set  -> IO ()

{-# LINE 24 "src/Bindings/Posix/Sys/Select.hsc" #-}
foreign import ccall "inline_FD_ISSET" c'FD_ISSET :: CInt -> Ptr  C'fd_set  -> IO CInt

{-# LINE 25 "src/Bindings/Posix/Sys/Select.hsc" #-}
foreign import ccall "inline_FD_SET" c'FD_SET :: CInt -> Ptr  C'fd_set  -> IO ()

{-# LINE 26 "src/Bindings/Posix/Sys/Select.hsc" #-}
foreign import ccall "inline_FD_ZERO" c'FD_ZERO :: Ptr  C'fd_set  -> IO ()

{-# LINE 27 "src/Bindings/Posix/Sys/Select.hsc" #-}

foreign import ccall "pselect" c'pselect :: CInt -> Ptr  C'fd_set  -> Ptr  C'fd_set  -> Ptr  C'fd_set  -> Ptr  C'timespec  -> Ptr  C'sigset_t  -> IO CInt
foreign import ccall "&pselect" p'pselect :: FunPtr (CInt -> Ptr  C'fd_set  -> Ptr  C'fd_set  -> Ptr  C'fd_set  -> Ptr  C'timespec  -> Ptr  C'sigset_t  -> IO CInt)

{-# LINE 30 "src/Bindings/Posix/Sys/Select.hsc" #-}
foreign import ccall "select" c'select :: CInt -> Ptr  C'fd_set  -> Ptr  C'fd_set  -> Ptr  C'fd_set  -> Ptr  C'timeval  -> IO CInt
foreign import ccall "&select" p'select :: FunPtr (CInt -> Ptr  C'fd_set  -> Ptr  C'fd_set  -> Ptr  C'fd_set  -> Ptr  C'timeval  -> IO CInt)

{-# LINE 32 "src/Bindings/Posix/Sys/Select.hsc" #-}