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

pattern Bias :: ImageOperands
pattern $bBias :: ImageOperands
$mBias :: forall {r}. ImageOperands -> ((# #) -> r) -> ((# #) -> r) -> r
Bias = ImageOperands 0x1

pattern Lod :: ImageOperands
pattern $bLod :: ImageOperands
$mLod :: forall {r}. ImageOperands -> ((# #) -> r) -> ((# #) -> r) -> r
Lod = ImageOperands 0x2

pattern Grad :: ImageOperands
pattern $bGrad :: ImageOperands
$mGrad :: forall {r}. ImageOperands -> ((# #) -> r) -> ((# #) -> r) -> r
Grad = ImageOperands 0x4

pattern ConstOffset :: ImageOperands
pattern $bConstOffset :: ImageOperands
$mConstOffset :: forall {r}. ImageOperands -> ((# #) -> r) -> ((# #) -> r) -> r
ConstOffset = ImageOperands 0x8

pattern Offset :: ImageOperands
pattern $bOffset :: ImageOperands
$mOffset :: forall {r}. ImageOperands -> ((# #) -> r) -> ((# #) -> r) -> r
Offset = ImageOperands 0x10

pattern ConstOffsets :: ImageOperands
pattern $bConstOffsets :: ImageOperands
$mConstOffsets :: forall {r}. ImageOperands -> ((# #) -> r) -> ((# #) -> r) -> r
ConstOffsets = ImageOperands 0x20

pattern Sample :: ImageOperands
pattern $bSample :: ImageOperands
$mSample :: forall {r}. ImageOperands -> ((# #) -> r) -> ((# #) -> r) -> r
Sample = ImageOperands 0x40

pattern MinLod :: ImageOperands
pattern $bMinLod :: ImageOperands
$mMinLod :: forall {r}. ImageOperands -> ((# #) -> r) -> ((# #) -> r) -> r
MinLod = ImageOperands 0x80

pattern MakeTexelAvailable :: ImageOperands
pattern $bMakeTexelAvailable :: ImageOperands
$mMakeTexelAvailable :: forall {r}. ImageOperands -> ((# #) -> r) -> ((# #) -> r) -> r
MakeTexelAvailable = ImageOperands 0x100

pattern MakeTexelAvailableKHR :: ImageOperands
pattern $bMakeTexelAvailableKHR :: ImageOperands
$mMakeTexelAvailableKHR :: forall {r}. ImageOperands -> ((# #) -> r) -> ((# #) -> r) -> r
MakeTexelAvailableKHR = ImageOperands 0x100

pattern MakeTexelVisible :: ImageOperands
pattern $bMakeTexelVisible :: ImageOperands
$mMakeTexelVisible :: forall {r}. ImageOperands -> ((# #) -> r) -> ((# #) -> r) -> r
MakeTexelVisible = ImageOperands 0x200

pattern MakeTexelVisibleKHR :: ImageOperands
pattern $bMakeTexelVisibleKHR :: ImageOperands
$mMakeTexelVisibleKHR :: forall {r}. ImageOperands -> ((# #) -> r) -> ((# #) -> r) -> r
MakeTexelVisibleKHR = ImageOperands 0x200

pattern NonPrivateTexel :: ImageOperands
pattern $bNonPrivateTexel :: ImageOperands
$mNonPrivateTexel :: forall {r}. ImageOperands -> ((# #) -> r) -> ((# #) -> r) -> r
NonPrivateTexel = ImageOperands 0x400

pattern NonPrivateTexelKHR :: ImageOperands
pattern $bNonPrivateTexelKHR :: ImageOperands
$mNonPrivateTexelKHR :: forall {r}. ImageOperands -> ((# #) -> r) -> ((# #) -> r) -> r
NonPrivateTexelKHR = ImageOperands 0x400

pattern VolatileTexel :: ImageOperands
pattern $bVolatileTexel :: ImageOperands
$mVolatileTexel :: forall {r}. ImageOperands -> ((# #) -> r) -> ((# #) -> r) -> r
VolatileTexel = ImageOperands 0x800

pattern VolatileTexelKHR :: ImageOperands
pattern $bVolatileTexelKHR :: ImageOperands
$mVolatileTexelKHR :: forall {r}. ImageOperands -> ((# #) -> r) -> ((# #) -> r) -> r
VolatileTexelKHR = ImageOperands 0x800

pattern SignExtend :: ImageOperands
pattern $bSignExtend :: ImageOperands
$mSignExtend :: forall {r}. ImageOperands -> ((# #) -> r) -> ((# #) -> r) -> r
SignExtend = ImageOperands 0x1000

pattern ZeroExtend :: ImageOperands
pattern $bZeroExtend :: ImageOperands
$mZeroExtend :: forall {r}. ImageOperands -> ((# #) -> r) -> ((# #) -> r) -> r
ZeroExtend = ImageOperands 0x2000

pattern Nontemporal :: ImageOperands
pattern $bNontemporal :: ImageOperands
$mNontemporal :: forall {r}. ImageOperands -> ((# #) -> r) -> ((# #) -> r) -> r
Nontemporal = ImageOperands 0x4000

pattern Offsets :: ImageOperands
pattern $bOffsets :: ImageOperands
$mOffsets :: forall {r}. ImageOperands -> ((# #) -> r) -> ((# #) -> r) -> r
Offsets = ImageOperands 0x10000

toName :: IsString a => ImageOperands -> a
toName :: forall a. IsString a => ImageOperands -> a
toName ImageOperands
x = case ImageOperands
x of
  ImageOperands
Bias -> a
"Bias"
  ImageOperands
Lod -> a
"Lod"
  ImageOperands
Grad -> a
"Grad"
  ImageOperands
ConstOffset -> a
"ConstOffset"
  ImageOperands
Offset -> a
"Offset"
  ImageOperands
ConstOffsets -> a
"ConstOffsets"
  ImageOperands
Sample -> a
"Sample"
  ImageOperands
MinLod -> a
"MinLod"
  ImageOperands
MakeTexelAvailable -> a
"MakeTexelAvailable"
  ImageOperands
MakeTexelAvailableKHR -> a
"MakeTexelAvailableKHR"
  ImageOperands
MakeTexelVisible -> a
"MakeTexelVisible"
  ImageOperands
MakeTexelVisibleKHR -> a
"MakeTexelVisibleKHR"
  ImageOperands
NonPrivateTexel -> a
"NonPrivateTexel"
  ImageOperands
NonPrivateTexelKHR -> a
"NonPrivateTexelKHR"
  ImageOperands
VolatileTexel -> a
"VolatileTexel"
  ImageOperands
VolatileTexelKHR -> a
"VolatileTexelKHR"
  ImageOperands
SignExtend -> a
"SignExtend"
  ImageOperands
ZeroExtend -> a
"ZeroExtend"
  ImageOperands
Nontemporal -> a
"Nontemporal"
  ImageOperands
Offsets -> a
"Offsets"
  ImageOperands
unknown -> forall a. IsString a => [Char] -> a
fromString forall a b. (a -> b) -> a -> b
$ [Char]
"ImageOperands " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> [Char]
show ImageOperands
unknown

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

fromName :: (IsString a, Eq a) => a -> Maybe ImageOperands
fromName :: forall a. (IsString a, Eq a) => a -> Maybe ImageOperands
fromName a
x = case a
x of
  a
"Bias" -> forall a. a -> Maybe a
Just ImageOperands
Bias
  a
"Lod" -> forall a. a -> Maybe a
Just ImageOperands
Lod
  a
"Grad" -> forall a. a -> Maybe a
Just ImageOperands
Grad
  a
"ConstOffset" -> forall a. a -> Maybe a
Just ImageOperands
ConstOffset
  a
"Offset" -> forall a. a -> Maybe a
Just ImageOperands
Offset
  a
"ConstOffsets" -> forall a. a -> Maybe a
Just ImageOperands
ConstOffsets
  a
"Sample" -> forall a. a -> Maybe a
Just ImageOperands
Sample
  a
"MinLod" -> forall a. a -> Maybe a
Just ImageOperands
MinLod
  a
"MakeTexelAvailable" -> forall a. a -> Maybe a
Just ImageOperands
MakeTexelAvailable
  a
"MakeTexelAvailableKHR" -> forall a. a -> Maybe a
Just ImageOperands
MakeTexelAvailableKHR
  a
"MakeTexelVisible" -> forall a. a -> Maybe a
Just ImageOperands
MakeTexelVisible
  a
"MakeTexelVisibleKHR" -> forall a. a -> Maybe a
Just ImageOperands
MakeTexelVisibleKHR
  a
"NonPrivateTexel" -> forall a. a -> Maybe a
Just ImageOperands
NonPrivateTexel
  a
"NonPrivateTexelKHR" -> forall a. a -> Maybe a
Just ImageOperands
NonPrivateTexelKHR
  a
"VolatileTexel" -> forall a. a -> Maybe a
Just ImageOperands
VolatileTexel
  a
"VolatileTexelKHR" -> forall a. a -> Maybe a
Just ImageOperands
VolatileTexelKHR
  a
"SignExtend" -> forall a. a -> Maybe a
Just ImageOperands
SignExtend
  a
"ZeroExtend" -> forall a. a -> Maybe a
Just ImageOperands
ZeroExtend
  a
"Nontemporal" -> forall a. a -> Maybe a
Just ImageOperands
Nontemporal
  a
"Offsets" -> forall a. a -> Maybe a
Just ImageOperands
Offsets
  a
_unknown -> forall a. Maybe a
Nothing

instance Read ImageOperands where
  readPrec :: ReadPrec ImageOperands
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 ImageOperands
fromName [Char]
s