{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

module Gpu.Vulkan.Device.GroupDevice.Internal (

	CreateInfo(..),

	Mask(..), pattern AllDevice, Index, mkMask

	) where

import Data.Bits
import Data.Word
import Data.Default
import Gpu.Vulkan.Device.GroupDevice.Middle

newtype Mask = Mask Word32 deriving (Int -> Mask -> ShowS
[Mask] -> ShowS
Mask -> String
(Int -> Mask -> ShowS)
-> (Mask -> String) -> ([Mask] -> ShowS) -> Show Mask
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Mask -> ShowS
showsPrec :: Int -> Mask -> ShowS
$cshow :: Mask -> String
show :: Mask -> String
$cshowList :: [Mask] -> ShowS
showList :: [Mask] -> ShowS
Show, Mask -> Mask -> Bool
(Mask -> Mask -> Bool) -> (Mask -> Mask -> Bool) -> Eq Mask
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Mask -> Mask -> Bool
== :: Mask -> Mask -> Bool
$c/= :: Mask -> Mask -> Bool
/= :: Mask -> Mask -> Bool
Eq, Eq Mask
Mask
Eq Mask =>
(Mask -> Mask -> Mask)
-> (Mask -> Mask -> Mask)
-> (Mask -> Mask -> Mask)
-> (Mask -> Mask)
-> (Mask -> Int -> Mask)
-> (Mask -> Int -> Mask)
-> Mask
-> (Int -> Mask)
-> (Mask -> Int -> Mask)
-> (Mask -> Int -> Mask)
-> (Mask -> Int -> Mask)
-> (Mask -> Int -> Bool)
-> (Mask -> Maybe Int)
-> (Mask -> Int)
-> (Mask -> Bool)
-> (Mask -> Int -> Mask)
-> (Mask -> Int -> Mask)
-> (Mask -> Int -> Mask)
-> (Mask -> Int -> Mask)
-> (Mask -> Int -> Mask)
-> (Mask -> Int -> Mask)
-> (Mask -> Int)
-> Bits Mask
Int -> Mask
Mask -> Bool
Mask -> Int
Mask -> Maybe Int
Mask -> Mask
Mask -> Int -> Bool
Mask -> Int -> Mask
Mask -> Mask -> Mask
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
$c.&. :: Mask -> Mask -> Mask
.&. :: Mask -> Mask -> Mask
$c.|. :: Mask -> Mask -> Mask
.|. :: Mask -> Mask -> Mask
$cxor :: Mask -> Mask -> Mask
xor :: Mask -> Mask -> Mask
$ccomplement :: Mask -> Mask
complement :: Mask -> Mask
$cshift :: Mask -> Int -> Mask
shift :: Mask -> Int -> Mask
$crotate :: Mask -> Int -> Mask
rotate :: Mask -> Int -> Mask
$czeroBits :: Mask
zeroBits :: Mask
$cbit :: Int -> Mask
bit :: Int -> Mask
$csetBit :: Mask -> Int -> Mask
setBit :: Mask -> Int -> Mask
$cclearBit :: Mask -> Int -> Mask
clearBit :: Mask -> Int -> Mask
$ccomplementBit :: Mask -> Int -> Mask
complementBit :: Mask -> Int -> Mask
$ctestBit :: Mask -> Int -> Bool
testBit :: Mask -> Int -> Bool
$cbitSizeMaybe :: Mask -> Maybe Int
bitSizeMaybe :: Mask -> Maybe Int
$cbitSize :: Mask -> Int
bitSize :: Mask -> Int
$cisSigned :: Mask -> Bool
isSigned :: Mask -> Bool
$cshiftL :: Mask -> Int -> Mask
shiftL :: Mask -> Int -> Mask
$cunsafeShiftL :: Mask -> Int -> Mask
unsafeShiftL :: Mask -> Int -> Mask
$cshiftR :: Mask -> Int -> Mask
shiftR :: Mask -> Int -> Mask
$cunsafeShiftR :: Mask -> Int -> Mask
unsafeShiftR :: Mask -> Int -> Mask
$crotateL :: Mask -> Int -> Mask
rotateL :: Mask -> Int -> Mask
$crotateR :: Mask -> Int -> Mask
rotateR :: Mask -> Int -> Mask
$cpopCount :: Mask -> Int
popCount :: Mask -> Int
Bits)

instance Default Mask where def :: Mask
def = Mask
AllDevice

pattern AllDevice :: Mask
pattern $mAllDevice :: forall {r}. Mask -> ((# #) -> r) -> ((# #) -> r) -> r
$bAllDevice :: Mask
AllDevice = Mask 0

type Index = Word32

mkMask :: [Index] -> Mask
mkMask :: [Index] -> Mask
mkMask = (Mask -> Index -> Mask) -> Mask -> [Index] -> Mask
forall b a. (b -> a -> b) -> b -> [a] -> b
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl (((Int -> Mask) -> (Index -> Int) -> Index -> Mask
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Index -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral) ((Int -> Mask) -> Index -> Mask)
-> (Mask -> Int -> Mask) -> Mask -> Index -> Mask
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Mask -> Int -> Mask
forall a. Bits a => a -> Int -> a
setBit) Mask
forall a. Bits a => a
zeroBits