module Sound.MED.Basic.ByteString where import qualified Data.ByteString as B import Data.Bits (Bits, shiftL, (.|.)) import Data.Word (Word8, Word16, Word32) import Data.Int (Int8, Int16, Int32) type PTR = Word32 type Peek a = B.ByteString -> PTR -> a peekInt32 :: Peek Int32; peekInt32 :: Peek Int32 peekInt32 ByteString xs = forall a b. (Integral a, Num b) => a -> b fromIntegral forall b c a. (b -> c) -> (a -> b) -> a -> c . Peek PTR peekWord32 ByteString xs peekInt16 :: Peek Int16; peekInt16 :: Peek Int16 peekInt16 ByteString xs = forall a b. (Integral a, Num b) => a -> b fromIntegral forall b c a. (b -> c) -> (a -> b) -> a -> c . Peek Word16 peekWord16 ByteString xs peekInt8 :: Peek Int8; peekInt8 :: Peek Int8 peekInt8 ByteString xs = forall a b. (Integral a, Num b) => a -> b fromIntegral forall b c a. (b -> c) -> (a -> b) -> a -> c . Peek Word8 peekWord8 ByteString xs peekWord32 :: Peek Word32 peekWord32 :: Peek PTR peekWord32 ByteString xs PTR ptr = let k :: Int k = forall a b. (Integral a, Num b) => a -> b fromIntegral PTR ptr in forall a. (Bits a, Num a) => ByteString -> Int -> Int -> a peekOffset ByteString xs Int k Int 0 forall a. Bits a => a -> a -> a <+ forall a. (Bits a, Num a) => ByteString -> Int -> Int -> a peekOffset ByteString xs Int k Int 1 forall a. Bits a => a -> a -> a <+ forall a. (Bits a, Num a) => ByteString -> Int -> Int -> a peekOffset ByteString xs Int k Int 2 forall a. Bits a => a -> a -> a <+ forall a. (Bits a, Num a) => ByteString -> Int -> Int -> a peekOffset ByteString xs Int k Int 3 peekWord16 :: Peek Word16 peekWord16 :: Peek Word16 peekWord16 ByteString xs PTR ptr = let k :: Int k = forall a b. (Integral a, Num b) => a -> b fromIntegral PTR ptr in forall a. (Bits a, Num a) => ByteString -> Int -> Int -> a peekOffset ByteString xs Int k Int 0 forall a. Bits a => a -> a -> a <+ forall a. (Bits a, Num a) => ByteString -> Int -> Int -> a peekOffset ByteString xs Int k Int 1 infixl 6 <+ (<+) :: (Bits a) => a -> a -> a a x <+ :: forall a. Bits a => a -> a -> a <+ a y = forall a. Bits a => a -> Int -> a shiftL a x Int 8 forall a. Bits a => a -> a -> a .|. a y peekOffset :: (Bits a, Num a) => B.ByteString -> Int -> Int -> a peekOffset :: forall a. (Bits a, Num a) => ByteString -> Int -> Int -> a peekOffset ByteString xs Int k Int d = forall a b. (Integral a, Num b) => a -> b fromIntegral forall a b. (a -> b) -> a -> b $ HasCallStack => ByteString -> Int -> Word8 B.index ByteString xs forall a b. (a -> b) -> a -> b $ Int kforall a. Num a => a -> a -> a +Int d peekWord8 :: Peek Word8 peekWord8 :: Peek Word8 peekWord8 ByteString xs PTR k = HasCallStack => ByteString -> Int -> Word8 B.index ByteString xs forall a b. (a -> b) -> a -> b $ forall a b. (Integral a, Num b) => a -> b fromIntegral PTR k