{-# LINE 1 "src/Bindings/Posix/Mqueue.hsc" #-}



-- | <http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/mqueue.h.html>

module Bindings.Posix.Mqueue 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 8 "src/Bindings/Posix/Mqueue.hsc" #-}
import Bindings.Posix.Signal
import Bindings.Posix.Sys.Types
import Bindings.Posix.Time

type C'mqd_t = CInt

{-# LINE 13 "src/Bindings/Posix/Mqueue.hsc" #-}


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

{-# LINE 16 "src/Bindings/Posix/Mqueue.hsc" #-}

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

{-# LINE 18 "src/Bindings/Posix/Mqueue.hsc" #-}

{-# LINE 19 "src/Bindings/Posix/Mqueue.hsc" #-}
data C'mq_attr = C'mq_attr{
  c'mq_attr'mq_flags :: CLong,
  c'mq_attr'mq_maxmsg :: CLong,
  c'mq_attr'mq_msgsize :: CLong,
  c'mq_attr'mq_curmsgs :: CLong
} deriving (Eq,Show)
p'mq_attr'mq_flags p = plusPtr p 0
p'mq_attr'mq_flags :: Ptr (C'mq_attr) -> Ptr (CLong)
p'mq_attr'mq_maxmsg p = plusPtr p 8
p'mq_attr'mq_maxmsg :: Ptr (C'mq_attr) -> Ptr (CLong)
p'mq_attr'mq_msgsize p = plusPtr p 16
p'mq_attr'mq_msgsize :: Ptr (C'mq_attr) -> Ptr (CLong)
p'mq_attr'mq_curmsgs p = plusPtr p 24
p'mq_attr'mq_curmsgs :: Ptr (C'mq_attr) -> Ptr (CLong)
instance Storable C'mq_attr where
  sizeOf _ = 64
  alignment _ = 8
  peek _p = do
    v0 <- peekByteOff _p 0
    v1 <- peekByteOff _p 8
    v2 <- peekByteOff _p 16
    v3 <- peekByteOff _p 24
    return $ C'mq_attr v0 v1 v2 v3
  poke _p (C'mq_attr v0 v1 v2 v3) = do
    pokeByteOff _p 0 v0
    pokeByteOff _p 8 v1
    pokeByteOff _p 16 v2
    pokeByteOff _p 24 v3
    return ()

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

foreign import ccall "mq_close" c'mq_close
  :: C'mqd_t -> IO CInt
foreign import ccall "&mq_close" p'mq_close
  :: FunPtr (C'mqd_t -> IO CInt)

{-# LINE 22 "src/Bindings/Posix/Mqueue.hsc" #-}
foreign import ccall "mq_getattr" c'mq_getattr
  :: C'mqd_t -> Ptr C'mq_attr -> IO CInt
foreign import ccall "&mq_getattr" p'mq_getattr
  :: FunPtr (C'mqd_t -> Ptr C'mq_attr -> IO CInt)

{-# LINE 23 "src/Bindings/Posix/Mqueue.hsc" #-}
foreign import ccall "mq_notify" c'mq_notify
  :: C'mqd_t -> Ptr C'sigevent -> IO CInt
foreign import ccall "&mq_notify" p'mq_notify
  :: FunPtr (C'mqd_t -> Ptr C'sigevent -> IO CInt)

{-# LINE 24 "src/Bindings/Posix/Mqueue.hsc" #-}
foreign import ccall "mq_open" c'mq_open
  :: Ptr CChar -> CInt -> C'mode_t -> Ptr C'mq_attr -> IO C'mqd_t
foreign import ccall "&mq_open" p'mq_open
  :: FunPtr (Ptr CChar -> CInt -> C'mode_t -> Ptr C'mq_attr -> IO C'mqd_t)

{-# LINE 25 "src/Bindings/Posix/Mqueue.hsc" #-}
foreign import ccall "mq_receive" c'mq_receive
  :: C'mqd_t -> Ptr CChar -> C'size_t -> Ptr CUInt -> IO C'ssize_t
foreign import ccall "&mq_receive" p'mq_receive
  :: FunPtr (C'mqd_t -> Ptr CChar -> C'size_t -> Ptr CUInt -> IO C'ssize_t)

{-# LINE 26 "src/Bindings/Posix/Mqueue.hsc" #-}
foreign import ccall "mq_send" c'mq_send
  :: C'mqd_t -> Ptr C'mq_attr -> C'size_t -> CUInt -> IO CInt
foreign import ccall "&mq_send" p'mq_send
  :: FunPtr (C'mqd_t -> Ptr C'mq_attr -> C'size_t -> CUInt -> IO CInt)

{-# LINE 27 "src/Bindings/Posix/Mqueue.hsc" #-}
foreign import ccall "mq_setattr" c'mq_setattr
  :: C'mqd_t -> Ptr C'mq_attr -> Ptr C'mq_attr -> IO CInt
foreign import ccall "&mq_setattr" p'mq_setattr
  :: FunPtr (C'mqd_t -> Ptr C'mq_attr -> Ptr C'mq_attr -> IO CInt)

{-# LINE 28 "src/Bindings/Posix/Mqueue.hsc" #-}
foreign import ccall "mq_timedreceive" c'mq_timedreceive
  :: C'mqd_t -> Ptr CChar -> C'size_t -> Ptr CUInt -> Ptr C'timespec -> IO C'ssize_t
foreign import ccall "&mq_timedreceive" p'mq_timedreceive
  :: FunPtr (C'mqd_t -> Ptr CChar -> C'size_t -> Ptr CUInt -> Ptr C'timespec -> IO C'ssize_t)

{-# LINE 29 "src/Bindings/Posix/Mqueue.hsc" #-}
foreign import ccall "mq_timedsend" c'mq_timedsend
  :: C'mqd_t -> Ptr CChar -> C'size_t -> CUInt -> Ptr C'timespec -> IO CInt
foreign import ccall "&mq_timedsend" p'mq_timedsend
  :: FunPtr (C'mqd_t -> Ptr CChar -> C'size_t -> CUInt -> Ptr C'timespec -> IO CInt)

{-# LINE 30 "src/Bindings/Posix/Mqueue.hsc" #-}
foreign import ccall "mq_unlink" c'mq_unlink
  :: Ptr CChar -> IO CInt
foreign import ccall "&mq_unlink" p'mq_unlink
  :: FunPtr (Ptr CChar -> IO CInt)

{-# LINE 31 "src/Bindings/Posix/Mqueue.hsc" #-}