module Codec.RPM.Internal.Numbers(asWord16,
asWord32,
asWord64)
where
import Data.Bits((.|.), shift)
import qualified Data.ByteString as BS
import Data.Word
asWord16 :: BS.ByteString -> Word16
asWord16 :: ByteString -> Word16
asWord16 bs :: ByteString
bs = Word8 -> Word16
forall a b. (Integral a, Num b) => a -> b
fromIntegral (ByteString
bs ByteString -> Int -> Word8
`BS.index` 0) Word16 -> Int -> Word16
forall a. Bits a => a -> Int -> a
`shift` 8 Word16 -> Word16 -> Word16
forall a. Bits a => a -> a -> a
.|.
Word8 -> Word16
forall a b. (Integral a, Num b) => a -> b
fromIntegral (ByteString
bs ByteString -> Int -> Word8
`BS.index` 1)
asWord32 :: BS.ByteString -> Word32
asWord32 :: ByteString -> Word32
asWord32 bs :: ByteString
bs = Word8 -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (ByteString
bs ByteString -> Int -> Word8
`BS.index` 0) Word32 -> Int -> Word32
forall a. Bits a => a -> Int -> a
`shift` 24 Word32 -> Word32 -> Word32
forall a. Bits a => a -> a -> a
.|.
Word8 -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (ByteString
bs ByteString -> Int -> Word8
`BS.index` 1) Word32 -> Int -> Word32
forall a. Bits a => a -> Int -> a
`shift` 16 Word32 -> Word32 -> Word32
forall a. Bits a => a -> a -> a
.|.
Word8 -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (ByteString
bs ByteString -> Int -> Word8
`BS.index` 2) Word32 -> Int -> Word32
forall a. Bits a => a -> Int -> a
`shift` 8 Word32 -> Word32 -> Word32
forall a. Bits a => a -> a -> a
.|.
Word8 -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (ByteString
bs ByteString -> Int -> Word8
`BS.index` 3)
asWord64 :: BS.ByteString -> Word64
asWord64 :: ByteString -> Word64
asWord64 bs :: ByteString
bs = Word8 -> Word64
forall a b. (Integral a, Num b) => a -> b
fromIntegral (ByteString
bs ByteString -> Int -> Word8
`BS.index` 0) Word64 -> Int -> Word64
forall a. Bits a => a -> Int -> a
`shift` 56 Word64 -> Word64 -> Word64
forall a. Bits a => a -> a -> a
.|.
Word8 -> Word64
forall a b. (Integral a, Num b) => a -> b
fromIntegral (ByteString
bs ByteString -> Int -> Word8
`BS.index` 1) Word64 -> Int -> Word64
forall a. Bits a => a -> Int -> a
`shift` 48 Word64 -> Word64 -> Word64
forall a. Bits a => a -> a -> a
.|.
Word8 -> Word64
forall a b. (Integral a, Num b) => a -> b
fromIntegral (ByteString
bs ByteString -> Int -> Word8
`BS.index` 2) Word64 -> Int -> Word64
forall a. Bits a => a -> Int -> a
`shift` 40 Word64 -> Word64 -> Word64
forall a. Bits a => a -> a -> a
.|.
Word8 -> Word64
forall a b. (Integral a, Num b) => a -> b
fromIntegral (ByteString
bs ByteString -> Int -> Word8
`BS.index` 3) Word64 -> Int -> Word64
forall a. Bits a => a -> Int -> a
`shift` 32 Word64 -> Word64 -> Word64
forall a. Bits a => a -> a -> a
.|.
Word8 -> Word64
forall a b. (Integral a, Num b) => a -> b
fromIntegral (ByteString
bs ByteString -> Int -> Word8
`BS.index` 4) Word64 -> Int -> Word64
forall a. Bits a => a -> Int -> a
`shift` 24 Word64 -> Word64 -> Word64
forall a. Bits a => a -> a -> a
.|.
Word8 -> Word64
forall a b. (Integral a, Num b) => a -> b
fromIntegral (ByteString
bs ByteString -> Int -> Word8
`BS.index` 5) Word64 -> Int -> Word64
forall a. Bits a => a -> Int -> a
`shift` 16 Word64 -> Word64 -> Word64
forall a. Bits a => a -> a -> a
.|.
Word8 -> Word64
forall a b. (Integral a, Num b) => a -> b
fromIntegral (ByteString
bs ByteString -> Int -> Word8
`BS.index` 6) Word64 -> Int -> Word64
forall a. Bits a => a -> Int -> a
`shift` 8 Word64 -> Word64 -> Word64
forall a. Bits a => a -> a -> a
.|.
Word8 -> Word64
forall a b. (Integral a, Num b) => a -> b
fromIntegral (ByteString
bs ByteString -> Int -> Word8
`BS.index` 7)