module Data.SpirV.Enum.GroupOperation where 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 GroupOperation = GroupOperation Word32 deriving (Eq, Ord, Storable) pattern Reduce :: GroupOperation pattern Reduce = GroupOperation 0 pattern InclusiveScan :: GroupOperation pattern InclusiveScan = GroupOperation 1 pattern ExclusiveScan :: GroupOperation pattern ExclusiveScan = GroupOperation 2 pattern ClusteredReduce :: GroupOperation pattern ClusteredReduce = GroupOperation 3 pattern PartitionedReduceNV :: GroupOperation pattern PartitionedReduceNV = GroupOperation 6 pattern PartitionedInclusiveScanNV :: GroupOperation pattern PartitionedInclusiveScanNV = GroupOperation 7 pattern PartitionedExclusiveScanNV :: GroupOperation pattern PartitionedExclusiveScanNV = GroupOperation 8 toName :: IsString a => GroupOperation -> a toName x = case x of Reduce -> "Reduce" InclusiveScan -> "InclusiveScan" ExclusiveScan -> "ExclusiveScan" ClusteredReduce -> "ClusteredReduce" PartitionedReduceNV -> "PartitionedReduceNV" PartitionedInclusiveScanNV -> "PartitionedInclusiveScanNV" PartitionedExclusiveScanNV -> "PartitionedExclusiveScanNV" unknown -> fromString $ "GroupOperation " ++ show unknown instance Show GroupOperation where show = toName fromName :: (IsString a, Eq a) => a -> Maybe GroupOperation fromName x = case x of "Reduce" -> Just Reduce "InclusiveScan" -> Just InclusiveScan "ExclusiveScan" -> Just ExclusiveScan "ClusteredReduce" -> Just ClusteredReduce "PartitionedReduceNV" -> Just PartitionedReduceNV "PartitionedInclusiveScanNV" -> Just PartitionedInclusiveScanNV "PartitionedExclusiveScanNV" -> Just PartitionedExclusiveScanNV _unknown -> Nothing instance Read GroupOperation where readPrec = Read.parens do Lex.Ident s <- Read.lexP maybe pfail pure $ fromName s