{-# OPTIONS_HADDOCK ignore-exports#-}
{-# LANGUAGE DataKinds                  #-}
{-# LANGUAGE DeriveDataTypeable         #-}
{-# LANGUAGE DeriveGeneric              #-}
{-# LANGUAGE FlexibleInstances          #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE KindSignatures             #-}
{-# LANGUAGE PatternSynonyms            #-}
{-# LANGUAGE StandaloneDeriving         #-}
{-# LANGUAGE Strict                     #-}
{-# LANGUAGE TypeSynonymInstances       #-}
module Graphics.Vulkan.Types.Enum.CompositeAlphaFlagsKHR
       (VkCompositeAlphaBitmaskKHR(VkCompositeAlphaBitmaskKHR,
                                   VkCompositeAlphaFlagsKHR, VkCompositeAlphaFlagBitsKHR,
                                   VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR,
                                   VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR,
                                   VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR,
                                   VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR),
        VkCompositeAlphaFlagsKHR, VkCompositeAlphaFlagBitsKHR)
       where
import           Data.Bits                       (Bits, FiniteBits)
import           Data.Data                       (Data)
import           Foreign.Storable                (Storable)
import           GHC.Generics                    (Generic)
import           GHC.Read                        (choose, expectP)
import           Graphics.Vulkan.Marshal         (FlagBit, FlagMask, FlagType)
import           Graphics.Vulkan.Types.BaseTypes (VkFlags (..))
import           Text.ParserCombinators.ReadPrec (prec, step, (+++))
import           Text.Read                       (Read (..), parens)
import           Text.Read.Lex                   (Lexeme (..))

newtype VkCompositeAlphaBitmaskKHR (a ::
                                      FlagType) = VkCompositeAlphaBitmaskKHR VkFlags
                                                    deriving (Eq, Ord, Storable, Data, Generic)

type VkCompositeAlphaFlagsKHR = VkCompositeAlphaBitmaskKHR FlagMask

type VkCompositeAlphaFlagBitsKHR =
     VkCompositeAlphaBitmaskKHR FlagBit

pattern VkCompositeAlphaFlagBitsKHR ::
        VkFlags -> VkCompositeAlphaBitmaskKHR FlagBit

pattern VkCompositeAlphaFlagBitsKHR n =
        VkCompositeAlphaBitmaskKHR n

pattern VkCompositeAlphaFlagsKHR ::
        VkFlags -> VkCompositeAlphaBitmaskKHR FlagMask

pattern VkCompositeAlphaFlagsKHR n = VkCompositeAlphaBitmaskKHR n

deriving instance Bits (VkCompositeAlphaBitmaskKHR FlagMask)

deriving instance FiniteBits (VkCompositeAlphaBitmaskKHR FlagMask)

deriving instance Integral (VkCompositeAlphaBitmaskKHR FlagMask)

deriving instance Num (VkCompositeAlphaBitmaskKHR FlagMask)

deriving instance Bounded (VkCompositeAlphaBitmaskKHR FlagMask)

deriving instance Enum (VkCompositeAlphaBitmaskKHR FlagMask)

deriving instance Real (VkCompositeAlphaBitmaskKHR FlagMask)

instance Show (VkCompositeAlphaBitmaskKHR a) where
        showsPrec _ VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR
          = showString "VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR"
        showsPrec _ VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR
          = showString "VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR"
        showsPrec _ VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR
          = showString "VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR"
        showsPrec _ VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR
          = showString "VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR"
        showsPrec p (VkCompositeAlphaBitmaskKHR x)
          = showParen (p >= 11)
              (showString "VkCompositeAlphaBitmaskKHR " . showsPrec 11 x)

instance Read (VkCompositeAlphaBitmaskKHR a) where
        readPrec
          = parens
              (choose
                 [("VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR",
                   pure VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR),
                  ("VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR",
                   pure VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR),
                  ("VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR",
                   pure VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR),
                  ("VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR",
                   pure VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR)]
                 +++
                 prec 10
                   (expectP (Ident "VkCompositeAlphaBitmaskKHR") >>
                      (VkCompositeAlphaBitmaskKHR <$> step readPrec)))

-- | bitpos = @0@
pattern VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR ::
        VkCompositeAlphaBitmaskKHR a

pattern VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR =
        VkCompositeAlphaBitmaskKHR 1

-- | bitpos = @1@
pattern VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR ::
        VkCompositeAlphaBitmaskKHR a

pattern VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR =
        VkCompositeAlphaBitmaskKHR 2

-- | bitpos = @2@
pattern VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR ::
        VkCompositeAlphaBitmaskKHR a

pattern VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR =
        VkCompositeAlphaBitmaskKHR 4

-- | bitpos = @3@
pattern VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR ::
        VkCompositeAlphaBitmaskKHR a

pattern VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR =
        VkCompositeAlphaBitmaskKHR 8