packages feed

fir-0.1.0.0: src/SPIRV/Version.hs

{-# LANGUAGE DerivingStrategies #-}

{-|
Module: SPIRV.Version

Handles SPIR-V version numbers.

-}

module SPIRV.Version
  ( Version(..), magicNo )
  where

-- base
import Data.Bits
  ( Bits(shiftL) )
import Data.Word
  ( Word8, Word32 )

-- fir
import Data.Binary.Class.Put
  ( Put(..) )

----------------------------------------------------------------------------

data Version = Version { major :: Word8, minor :: Word8 }
  deriving stock ( Eq, Ord )

instance Show Version where
  show (Version majorVer minorVer)
    = show majorVer ++ "." ++ show minorVer

instance Put Version where
  put (Version majorVer minorVer) = put ver
    where
      ver :: Word32
      ver = (fromIntegral majorVer) `shiftL` 16
          + (fromIntegral minorVer) `shiftL` 8
  wordCount _ = 1

magicNo :: Word32
magicNo = 0x07230203