{-# OPTIONS_HADDOCK ignore-exports#-}
{-# LANGUAGE DataKinds                  #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE PatternSynonyms            #-}
{-# LANGUAGE Strict                     #-}
module Graphics.Vulkan.Types.Enum.SharingMode
       (VkSharingMode(VkSharingMode, VK_SHARING_MODE_EXCLUSIVE,
                      VK_SHARING_MODE_CONCURRENT))
       where
import Foreign.Storable                (Storable)
import GHC.Read                        (choose, expectP)
import Graphics.Vulkan.Marshal         (Int32)
import Text.ParserCombinators.ReadPrec (prec, step, (+++))
import Text.Read                       (Read (..), parens)
import Text.Read.Lex                   (Lexeme (..))

-- | type = @enum@
--
--   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkSharingMode VkSharingMode registry at www.khronos.org>
newtype VkSharingMode = VkSharingMode Int32
                        deriving (VkSharingMode -> VkSharingMode -> Bool
(VkSharingMode -> VkSharingMode -> Bool)
-> (VkSharingMode -> VkSharingMode -> Bool) -> Eq VkSharingMode
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: VkSharingMode -> VkSharingMode -> Bool
$c/= :: VkSharingMode -> VkSharingMode -> Bool
== :: VkSharingMode -> VkSharingMode -> Bool
$c== :: VkSharingMode -> VkSharingMode -> Bool
Eq, Eq VkSharingMode
Eq VkSharingMode
-> (VkSharingMode -> VkSharingMode -> Ordering)
-> (VkSharingMode -> VkSharingMode -> Bool)
-> (VkSharingMode -> VkSharingMode -> Bool)
-> (VkSharingMode -> VkSharingMode -> Bool)
-> (VkSharingMode -> VkSharingMode -> Bool)
-> (VkSharingMode -> VkSharingMode -> VkSharingMode)
-> (VkSharingMode -> VkSharingMode -> VkSharingMode)
-> Ord VkSharingMode
VkSharingMode -> VkSharingMode -> Bool
VkSharingMode -> VkSharingMode -> Ordering
VkSharingMode -> VkSharingMode -> VkSharingMode
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 :: VkSharingMode -> VkSharingMode -> VkSharingMode
$cmin :: VkSharingMode -> VkSharingMode -> VkSharingMode
max :: VkSharingMode -> VkSharingMode -> VkSharingMode
$cmax :: VkSharingMode -> VkSharingMode -> VkSharingMode
>= :: VkSharingMode -> VkSharingMode -> Bool
$c>= :: VkSharingMode -> VkSharingMode -> Bool
> :: VkSharingMode -> VkSharingMode -> Bool
$c> :: VkSharingMode -> VkSharingMode -> Bool
<= :: VkSharingMode -> VkSharingMode -> Bool
$c<= :: VkSharingMode -> VkSharingMode -> Bool
< :: VkSharingMode -> VkSharingMode -> Bool
$c< :: VkSharingMode -> VkSharingMode -> Bool
compare :: VkSharingMode -> VkSharingMode -> Ordering
$ccompare :: VkSharingMode -> VkSharingMode -> Ordering
Ord, Int -> VkSharingMode
VkSharingMode -> Int
VkSharingMode -> [VkSharingMode]
VkSharingMode -> VkSharingMode
VkSharingMode -> VkSharingMode -> [VkSharingMode]
VkSharingMode -> VkSharingMode -> VkSharingMode -> [VkSharingMode]
(VkSharingMode -> VkSharingMode)
-> (VkSharingMode -> VkSharingMode)
-> (Int -> VkSharingMode)
-> (VkSharingMode -> Int)
-> (VkSharingMode -> [VkSharingMode])
-> (VkSharingMode -> VkSharingMode -> [VkSharingMode])
-> (VkSharingMode -> VkSharingMode -> [VkSharingMode])
-> (VkSharingMode
    -> VkSharingMode -> VkSharingMode -> [VkSharingMode])
-> Enum VkSharingMode
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: VkSharingMode -> VkSharingMode -> VkSharingMode -> [VkSharingMode]
$cenumFromThenTo :: VkSharingMode -> VkSharingMode -> VkSharingMode -> [VkSharingMode]
enumFromTo :: VkSharingMode -> VkSharingMode -> [VkSharingMode]
$cenumFromTo :: VkSharingMode -> VkSharingMode -> [VkSharingMode]
enumFromThen :: VkSharingMode -> VkSharingMode -> [VkSharingMode]
$cenumFromThen :: VkSharingMode -> VkSharingMode -> [VkSharingMode]
enumFrom :: VkSharingMode -> [VkSharingMode]
$cenumFrom :: VkSharingMode -> [VkSharingMode]
fromEnum :: VkSharingMode -> Int
$cfromEnum :: VkSharingMode -> Int
toEnum :: Int -> VkSharingMode
$ctoEnum :: Int -> VkSharingMode
pred :: VkSharingMode -> VkSharingMode
$cpred :: VkSharingMode -> VkSharingMode
succ :: VkSharingMode -> VkSharingMode
$csucc :: VkSharingMode -> VkSharingMode
Enum, Ptr VkSharingMode -> IO VkSharingMode
Ptr VkSharingMode -> Int -> IO VkSharingMode
Ptr VkSharingMode -> Int -> VkSharingMode -> IO ()
Ptr VkSharingMode -> VkSharingMode -> IO ()
VkSharingMode -> Int
(VkSharingMode -> Int)
-> (VkSharingMode -> Int)
-> (Ptr VkSharingMode -> Int -> IO VkSharingMode)
-> (Ptr VkSharingMode -> Int -> VkSharingMode -> IO ())
-> (forall b. Ptr b -> Int -> IO VkSharingMode)
-> (forall b. Ptr b -> Int -> VkSharingMode -> IO ())
-> (Ptr VkSharingMode -> IO VkSharingMode)
-> (Ptr VkSharingMode -> VkSharingMode -> IO ())
-> Storable VkSharingMode
forall b. Ptr b -> Int -> IO VkSharingMode
forall b. Ptr b -> Int -> VkSharingMode -> 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 VkSharingMode -> VkSharingMode -> IO ()
$cpoke :: Ptr VkSharingMode -> VkSharingMode -> IO ()
peek :: Ptr VkSharingMode -> IO VkSharingMode
$cpeek :: Ptr VkSharingMode -> IO VkSharingMode
pokeByteOff :: forall b. Ptr b -> Int -> VkSharingMode -> IO ()
$cpokeByteOff :: forall b. Ptr b -> Int -> VkSharingMode -> IO ()
peekByteOff :: forall b. Ptr b -> Int -> IO VkSharingMode
$cpeekByteOff :: forall b. Ptr b -> Int -> IO VkSharingMode
pokeElemOff :: Ptr VkSharingMode -> Int -> VkSharingMode -> IO ()
$cpokeElemOff :: Ptr VkSharingMode -> Int -> VkSharingMode -> IO ()
peekElemOff :: Ptr VkSharingMode -> Int -> IO VkSharingMode
$cpeekElemOff :: Ptr VkSharingMode -> Int -> IO VkSharingMode
alignment :: VkSharingMode -> Int
$calignment :: VkSharingMode -> Int
sizeOf :: VkSharingMode -> Int
$csizeOf :: VkSharingMode -> Int
Storable)

instance Show VkSharingMode where
    showsPrec :: Int -> VkSharingMode -> ShowS
showsPrec Int
_ VkSharingMode
VK_SHARING_MODE_EXCLUSIVE
      = String -> ShowS
showString String
"VK_SHARING_MODE_EXCLUSIVE"
    showsPrec Int
_ VkSharingMode
VK_SHARING_MODE_CONCURRENT
      = String -> ShowS
showString String
"VK_SHARING_MODE_CONCURRENT"
    showsPrec Int
p (VkSharingMode Int32
x)
      = Bool -> ShowS -> ShowS
showParen (Int
p Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= Int
11)
          (String -> ShowS
showString String
"VkSharingMode " ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Int32 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec Int
11 Int32
x)

instance Read VkSharingMode where
    readPrec :: ReadPrec VkSharingMode
readPrec
      = ReadPrec VkSharingMode -> ReadPrec VkSharingMode
forall a. ReadPrec a -> ReadPrec a
parens
          ([(String, ReadPrec VkSharingMode)] -> ReadPrec VkSharingMode
forall a. [(String, ReadPrec a)] -> ReadPrec a
choose
             [(String
"VK_SHARING_MODE_EXCLUSIVE", VkSharingMode -> ReadPrec VkSharingMode
forall (f :: * -> *) a. Applicative f => a -> f a
pure VkSharingMode
VK_SHARING_MODE_EXCLUSIVE),
              (String
"VK_SHARING_MODE_CONCURRENT", VkSharingMode -> ReadPrec VkSharingMode
forall (f :: * -> *) a. Applicative f => a -> f a
pure VkSharingMode
VK_SHARING_MODE_CONCURRENT)]
             ReadPrec VkSharingMode
-> ReadPrec VkSharingMode -> ReadPrec VkSharingMode
forall a. ReadPrec a -> ReadPrec a -> ReadPrec a
+++
             Int -> ReadPrec VkSharingMode -> ReadPrec VkSharingMode
forall a. Int -> ReadPrec a -> ReadPrec a
prec Int
10
               (Lexeme -> ReadPrec ()
expectP (String -> Lexeme
Ident String
"VkSharingMode") ReadPrec () -> ReadPrec VkSharingMode -> ReadPrec VkSharingMode
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
                  (Int32 -> VkSharingMode
VkSharingMode (Int32 -> VkSharingMode)
-> ReadPrec Int32 -> ReadPrec VkSharingMode
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReadPrec Int32 -> ReadPrec Int32
forall a. ReadPrec a -> ReadPrec a
step ReadPrec Int32
forall a. Read a => ReadPrec a
readPrec)))

pattern VK_SHARING_MODE_EXCLUSIVE :: VkSharingMode

pattern $bVK_SHARING_MODE_EXCLUSIVE :: VkSharingMode
$mVK_SHARING_MODE_EXCLUSIVE :: forall {r}. VkSharingMode -> (Void# -> r) -> (Void# -> r) -> r
VK_SHARING_MODE_EXCLUSIVE = VkSharingMode 0

pattern VK_SHARING_MODE_CONCURRENT :: VkSharingMode

pattern $bVK_SHARING_MODE_CONCURRENT :: VkSharingMode
$mVK_SHARING_MODE_CONCURRENT :: forall {r}. VkSharingMode -> (Void# -> r) -> (Void# -> r) -> r
VK_SHARING_MODE_CONCURRENT = VkSharingMode 1