{-# OPTIONS_GHC -optc-D_GNU_SOURCE #-}
{-# LINE 1 "src/Posix/Poll/Types.hsc" #-}
{-# language BangPatterns #-}
{-# language BinaryLiterals #-}
{-# language DataKinds #-}
{-# language DerivingStrategies #-}
{-# language DuplicateRecordFields #-}
{-# language GADTSyntax #-}
{-# language GeneralizedNewtypeDeriving #-}
{-# language KindSignatures #-}
{-# language NamedFieldPuns #-}
{-# language TypeApplications #-}
{-# language MagicHash #-}
{-# language UnboxedTuples #-}
{-# language PolyKinds #-}
{-# language TypeInType #-}
{-# OPTIONS_GHC -fno-warn-unticked-promoted-constructors #-}
module Posix.Poll.Types
( PollFd(..)
, Exchange(..)
, input
, output
, error
, hangup
, invalid
, isSubeventOf
) where
import Prelude hiding (truncate,error)
import Data.Bits ((.|.),(.&.))
import Data.Word (Word8,Word16,Word32,Word64)
import Data.Primitive (Prim(..))
import Foreign.C.Types (CInt(..),CShort)
import Foreign.Storable (Storable(..))
import GHC.Ptr (Ptr(..))
import GHC.Exts (RealWorld,Int(I#),Int#,(+#),(*#))
import System.Posix.Types (Fd(..))
import qualified Data.Kind
import qualified Data.Primitive as PM
data PollFd = PollFd
{ descriptor :: !Fd
, request :: !(Event Request)
, response :: !(Event Response)
}
newtype Event :: Exchange -> Data.Kind.Type where
Event :: CShort -> Event e
deriving newtype (Eq,Storable,Prim)
instance Semigroup (Event e) where
Event a <> Event b = Event (a .|. b)
instance Monoid (Event e) where
mempty = Event 0
data Exchange = Request | Response
instance Storable PollFd where
sizeOf _ = (8)
{-# LINE 74 "src/Posix/Poll/Types.hsc" #-}
alignment _ = alignment (undefined :: CInt)
peek ptr = do
descriptor <- (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 77 "src/Posix/Poll/Types.hsc" #-}
request <- (\hsc_ptr -> peekByteOff hsc_ptr 4) ptr
{-# LINE 78 "src/Posix/Poll/Types.hsc" #-}
response <- (\hsc_ptr -> peekByteOff hsc_ptr 6) ptr
{-# LINE 79 "src/Posix/Poll/Types.hsc" #-}
let !pollfd = PollFd{descriptor,request,response}
pure pollfd
poke ptr PollFd{descriptor,request,response} = do
(\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr descriptor
{-# LINE 83 "src/Posix/Poll/Types.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 4) ptr request
{-# LINE 84 "src/Posix/Poll/Types.hsc" #-}
(\hsc_ptr -> pokeByteOff hsc_ptr 6) ptr response
{-# LINE 85 "src/Posix/Poll/Types.hsc" #-}
unI :: Int -> Int#
unI (I# i) = i
instance Prim PollFd where
sizeOf# _ = unI (8)
{-# LINE 91 "src/Posix/Poll/Types.hsc" #-}
alignment# _ = alignment# (undefined :: CInt)
indexByteArray# arr i = PollFd
{ descriptor = (\hsc_arr hsc_ix -> indexByteArray# hsc_arr (0# +# (hsc_ix *# 2#))) arr i
{-# LINE 94 "src/Posix/Poll/Types.hsc" #-}
, request = (\hsc_arr hsc_ix -> indexByteArray# hsc_arr (2# +# (hsc_ix *# 4#))) arr i
{-# LINE 95 "src/Posix/Poll/Types.hsc" #-}
, response = (\hsc_arr hsc_ix -> indexByteArray# hsc_arr (3# +# (hsc_ix *# 4#))) arr i
{-# LINE 96 "src/Posix/Poll/Types.hsc" #-}
}
writeByteArray# arr i PollFd{descriptor,request,response} s0 = case (\hsc_arr hsc_ix -> writeByteArray# hsc_arr (0# +# (hsc_ix *# 2#))) arr i descriptor s0 of
{-# LINE 98 "src/Posix/Poll/Types.hsc" #-}
s1 -> case (\hsc_arr hsc_ix -> writeByteArray# hsc_arr (2# +# (hsc_ix *# 4#))) arr i request s1 of
{-# LINE 99 "src/Posix/Poll/Types.hsc" #-}
s2 -> (\hsc_arr hsc_ix -> writeByteArray# hsc_arr (3# +# (hsc_ix *# 4#))) arr i response s2
{-# LINE 100 "src/Posix/Poll/Types.hsc" #-}
readByteArray# arr i s0 = case (\hsc_arr hsc_ix -> readByteArray# hsc_arr (0# +# (hsc_ix *# 2#))) arr i s0 of
{-# LINE 101 "src/Posix/Poll/Types.hsc" #-}
(# s1, descriptor #) -> case (\hsc_arr hsc_ix -> readByteArray# hsc_arr (2# +# (hsc_ix *# 4#))) arr i s1 of
{-# LINE 102 "src/Posix/Poll/Types.hsc" #-}
(# s2, request #) -> case (\hsc_arr hsc_ix -> readByteArray# hsc_arr (3# +# (hsc_ix *# 4#))) arr i s2 of
{-# LINE 103 "src/Posix/Poll/Types.hsc" #-}
(# s3, response #) -> (# s3, PollFd{descriptor,request,response} #)
setByteArray# = PM.defaultSetByteArray#
indexOffAddr# arr i = PollFd
{ descriptor = (\hsc_arr hsc_ix -> indexOffAddr# hsc_arr (0# +# (hsc_ix *# 2#))) arr i
{-# LINE 107 "src/Posix/Poll/Types.hsc" #-}
, request = (\hsc_arr hsc_ix -> indexOffAddr# hsc_arr (2# +# (hsc_ix *# 4#))) arr i
{-# LINE 108 "src/Posix/Poll/Types.hsc" #-}
, response = (\hsc_arr hsc_ix -> indexOffAddr# hsc_arr (3# +# (hsc_ix *# 4#))) arr i
{-# LINE 109 "src/Posix/Poll/Types.hsc" #-}
}
writeOffAddr# arr i PollFd{descriptor,request,response} s0 = case (\hsc_arr hsc_ix -> writeOffAddr# hsc_arr (0# +# (hsc_ix *# 2#))) arr i descriptor s0 of
{-# LINE 111 "src/Posix/Poll/Types.hsc" #-}
s1 -> case (\hsc_arr hsc_ix -> writeOffAddr# hsc_arr (2# +# (hsc_ix *# 4#))) arr i request s1 of
{-# LINE 112 "src/Posix/Poll/Types.hsc" #-}
s2 -> (\hsc_arr hsc_ix -> writeOffAddr# hsc_arr (3# +# (hsc_ix *# 4#))) arr i response s2
{-# LINE 113 "src/Posix/Poll/Types.hsc" #-}
readOffAddr# arr i s0 = case (\hsc_arr hsc_ix -> readOffAddr# hsc_arr (0# +# (hsc_ix *# 2#))) arr i s0 of
{-# LINE 114 "src/Posix/Poll/Types.hsc" #-}
(# s1, fdVal #) -> case (\hsc_arr hsc_ix -> readOffAddr# hsc_arr (2# +# (hsc_ix *# 4#))) arr i s1 of
{-# LINE 115 "src/Posix/Poll/Types.hsc" #-}
(# s2, eventsVal #) -> case (\hsc_arr hsc_ix -> readOffAddr# hsc_arr (3# +# (hsc_ix *# 4#))) arr i s2 of
{-# LINE 116 "src/Posix/Poll/Types.hsc" #-}
(# s3, reventsVal #) -> (# s3, PollFd fdVal eventsVal reventsVal #)
setOffAddr# = PM.defaultSetOffAddr#
input :: Event e
input = Event 1
{-# LINE 122 "src/Posix/Poll/Types.hsc" #-}
output :: Event e
output = Event 4
{-# LINE 126 "src/Posix/Poll/Types.hsc" #-}
error :: Event Response
error = Event 8
{-# LINE 130 "src/Posix/Poll/Types.hsc" #-}
hangup :: Event Response
hangup = Event 16
{-# LINE 134 "src/Posix/Poll/Types.hsc" #-}
invalid :: Event Response
invalid = Event 32
{-# LINE 138 "src/Posix/Poll/Types.hsc" #-}
isSubeventOf :: Event e -> Event e -> Bool
isSubeventOf (Event a) (Event b) = a .&. b == a