module Rattletrap.Primitive.Word32 where import Rattletrap.Utility import qualified Data.Binary as Binary import qualified Data.Binary.Bits.Get as BinaryBit import qualified Data.Binary.Bits.Put as BinaryBit import qualified Data.Binary.Get as Binary import qualified Data.Binary.Put as Binary import qualified Data.ByteString.Lazy as ByteString import qualified Data.Word as Word newtype Word32 = Word32 { word32Value :: Word.Word32 } deriving (Eq, Ord, Show) getWord32 :: Binary.Get Word32 getWord32 = do word32 <- Binary.getWord32le pure (Word32 word32) putWord32 :: Word32 -> Binary.Put putWord32 word32 = Binary.putWord32le (word32Value word32) getWord32Bits :: BinaryBit.BitGet Word32 getWord32Bits = do bytes <- BinaryBit.getLazyByteString 4 pure (Binary.runGet getWord32 (reverseBytes bytes)) putWord32Bits :: Word32 -> BinaryBit.BitPut () putWord32Bits word32 = do let bytes = Binary.runPut (putWord32 word32) BinaryBit.putByteString (ByteString.toStrict (reverseBytes bytes))