module Data.SpirV.Enum.FunctionControl where

import Data.Bits (Bits)
import Data.String (IsString(..))
import Data.Word (Word32)
import Foreign (Storable(..))
import GHC.Read (Read(..))
import Text.ParserCombinators.ReadPrec (pfail)
import qualified GHC.Read as Read
import qualified Text.Read.Lex as Lex

newtype FunctionControl = FunctionControl Word32
  deriving (FunctionControl -> FunctionControl -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: FunctionControl -> FunctionControl -> Bool
$c/= :: FunctionControl -> FunctionControl -> Bool
== :: FunctionControl -> FunctionControl -> Bool
$c== :: FunctionControl -> FunctionControl -> Bool
Eq, Eq FunctionControl
FunctionControl -> FunctionControl -> Bool
FunctionControl -> FunctionControl -> Ordering
FunctionControl -> FunctionControl -> FunctionControl
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: FunctionControl -> FunctionControl -> FunctionControl
$cmin :: FunctionControl -> FunctionControl -> FunctionControl
max :: FunctionControl -> FunctionControl -> FunctionControl
$cmax :: FunctionControl -> FunctionControl -> FunctionControl
>= :: FunctionControl -> FunctionControl -> Bool
$c>= :: FunctionControl -> FunctionControl -> Bool
> :: FunctionControl -> FunctionControl -> Bool
$c> :: FunctionControl -> FunctionControl -> Bool
<= :: FunctionControl -> FunctionControl -> Bool
$c<= :: FunctionControl -> FunctionControl -> Bool
< :: FunctionControl -> FunctionControl -> Bool
$c< :: FunctionControl -> FunctionControl -> Bool
compare :: FunctionControl -> FunctionControl -> Ordering
$ccompare :: FunctionControl -> FunctionControl -> Ordering
Ord, Ptr FunctionControl -> IO FunctionControl
Ptr FunctionControl -> Int -> IO FunctionControl
Ptr FunctionControl -> Int -> FunctionControl -> IO ()
Ptr FunctionControl -> FunctionControl -> IO ()
FunctionControl -> Int
forall b. Ptr b -> Int -> IO FunctionControl
forall b. Ptr b -> Int -> FunctionControl -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
poke :: Ptr FunctionControl -> FunctionControl -> IO ()
$cpoke :: Ptr FunctionControl -> FunctionControl -> IO ()
peek :: Ptr FunctionControl -> IO FunctionControl
$cpeek :: Ptr FunctionControl -> IO FunctionControl
pokeByteOff :: forall b. Ptr b -> Int -> FunctionControl -> IO ()
$cpokeByteOff :: forall b. Ptr b -> Int -> FunctionControl -> IO ()
peekByteOff :: forall b. Ptr b -> Int -> IO FunctionControl
$cpeekByteOff :: forall b. Ptr b -> Int -> IO FunctionControl
pokeElemOff :: Ptr FunctionControl -> Int -> FunctionControl -> IO ()
$cpokeElemOff :: Ptr FunctionControl -> Int -> FunctionControl -> IO ()
peekElemOff :: Ptr FunctionControl -> Int -> IO FunctionControl
$cpeekElemOff :: Ptr FunctionControl -> Int -> IO FunctionControl
alignment :: FunctionControl -> Int
$calignment :: FunctionControl -> Int
sizeOf :: FunctionControl -> Int
$csizeOf :: FunctionControl -> Int
Storable, Eq FunctionControl
FunctionControl
Int -> FunctionControl
FunctionControl -> Bool
FunctionControl -> Int
FunctionControl -> Maybe Int
FunctionControl -> FunctionControl
FunctionControl -> Int -> Bool
FunctionControl -> Int -> FunctionControl
FunctionControl -> FunctionControl -> FunctionControl
forall a.
Eq a
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> a
-> (Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> Bool)
-> (a -> Maybe Int)
-> (a -> Int)
-> (a -> Bool)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int)
-> Bits a
popCount :: FunctionControl -> Int
$cpopCount :: FunctionControl -> Int
rotateR :: FunctionControl -> Int -> FunctionControl
$crotateR :: FunctionControl -> Int -> FunctionControl
rotateL :: FunctionControl -> Int -> FunctionControl
$crotateL :: FunctionControl -> Int -> FunctionControl
unsafeShiftR :: FunctionControl -> Int -> FunctionControl
$cunsafeShiftR :: FunctionControl -> Int -> FunctionControl
shiftR :: FunctionControl -> Int -> FunctionControl
$cshiftR :: FunctionControl -> Int -> FunctionControl
unsafeShiftL :: FunctionControl -> Int -> FunctionControl
$cunsafeShiftL :: FunctionControl -> Int -> FunctionControl
shiftL :: FunctionControl -> Int -> FunctionControl
$cshiftL :: FunctionControl -> Int -> FunctionControl
isSigned :: FunctionControl -> Bool
$cisSigned :: FunctionControl -> Bool
bitSize :: FunctionControl -> Int
$cbitSize :: FunctionControl -> Int
bitSizeMaybe :: FunctionControl -> Maybe Int
$cbitSizeMaybe :: FunctionControl -> Maybe Int
testBit :: FunctionControl -> Int -> Bool
$ctestBit :: FunctionControl -> Int -> Bool
complementBit :: FunctionControl -> Int -> FunctionControl
$ccomplementBit :: FunctionControl -> Int -> FunctionControl
clearBit :: FunctionControl -> Int -> FunctionControl
$cclearBit :: FunctionControl -> Int -> FunctionControl
setBit :: FunctionControl -> Int -> FunctionControl
$csetBit :: FunctionControl -> Int -> FunctionControl
bit :: Int -> FunctionControl
$cbit :: Int -> FunctionControl
zeroBits :: FunctionControl
$czeroBits :: FunctionControl
rotate :: FunctionControl -> Int -> FunctionControl
$crotate :: FunctionControl -> Int -> FunctionControl
shift :: FunctionControl -> Int -> FunctionControl
$cshift :: FunctionControl -> Int -> FunctionControl
complement :: FunctionControl -> FunctionControl
$ccomplement :: FunctionControl -> FunctionControl
xor :: FunctionControl -> FunctionControl -> FunctionControl
$cxor :: FunctionControl -> FunctionControl -> FunctionControl
.|. :: FunctionControl -> FunctionControl -> FunctionControl
$c.|. :: FunctionControl -> FunctionControl -> FunctionControl
.&. :: FunctionControl -> FunctionControl -> FunctionControl
$c.&. :: FunctionControl -> FunctionControl -> FunctionControl
Bits)

pattern Inline :: FunctionControl
pattern $bInline :: FunctionControl
$mInline :: forall {r}. FunctionControl -> ((# #) -> r) -> ((# #) -> r) -> r
Inline = FunctionControl 0x1

pattern DontInline :: FunctionControl
pattern $bDontInline :: FunctionControl
$mDontInline :: forall {r}. FunctionControl -> ((# #) -> r) -> ((# #) -> r) -> r
DontInline = FunctionControl 0x2

pattern Pure :: FunctionControl
pattern $bPure :: FunctionControl
$mPure :: forall {r}. FunctionControl -> ((# #) -> r) -> ((# #) -> r) -> r
Pure = FunctionControl 0x4

pattern Const :: FunctionControl
pattern $bConst :: FunctionControl
$mConst :: forall {r}. FunctionControl -> ((# #) -> r) -> ((# #) -> r) -> r
Const = FunctionControl 0x8

pattern OptNoneINTEL :: FunctionControl
pattern $bOptNoneINTEL :: FunctionControl
$mOptNoneINTEL :: forall {r}. FunctionControl -> ((# #) -> r) -> ((# #) -> r) -> r
OptNoneINTEL = FunctionControl 0x10000

toName :: IsString a => FunctionControl -> a
toName :: forall a. IsString a => FunctionControl -> a
toName FunctionControl
x = case FunctionControl
x of
  FunctionControl
Inline -> a
"Inline"
  FunctionControl
DontInline -> a
"DontInline"
  FunctionControl
Pure -> a
"Pure"
  FunctionControl
Const -> a
"Const"
  FunctionControl
OptNoneINTEL -> a
"OptNoneINTEL"
  FunctionControl
unknown -> forall a. IsString a => [Char] -> a
fromString forall a b. (a -> b) -> a -> b
$ [Char]
"FunctionControl " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> [Char]
show FunctionControl
unknown

instance Show FunctionControl where
  show :: FunctionControl -> [Char]
show = forall a. IsString a => FunctionControl -> a
toName

fromName :: (IsString a, Eq a) => a -> Maybe FunctionControl
fromName :: forall a. (IsString a, Eq a) => a -> Maybe FunctionControl
fromName a
x = case a
x of
  a
"Inline" -> forall a. a -> Maybe a
Just FunctionControl
Inline
  a
"DontInline" -> forall a. a -> Maybe a
Just FunctionControl
DontInline
  a
"Pure" -> forall a. a -> Maybe a
Just FunctionControl
Pure
  a
"Const" -> forall a. a -> Maybe a
Just FunctionControl
Const
  a
"OptNoneINTEL" -> forall a. a -> Maybe a
Just FunctionControl
OptNoneINTEL
  a
_unknown -> forall a. Maybe a
Nothing

instance Read FunctionControl where
  readPrec :: ReadPrec FunctionControl
readPrec = forall a. ReadPrec a -> ReadPrec a
Read.parens do
    Lex.Ident [Char]
s <- ReadPrec Lexeme
Read.lexP
    forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. ReadPrec a
pfail forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ forall a. (IsString a, Eq a) => a -> Maybe FunctionControl
fromName [Char]
s