{-# HLINT ignore "Use const" #-}
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE UnboxedTuples #-}
{-# OPTIONS_GHC -Wno-orphans #-}
{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-}
module Dahdit.ShortWord () where
import Data.Bits (Bits (..), shiftR)
import Data.Default (Default (..))
import Data.Primitive (Prim (..))
import Data.Primitive.ByteArray.Unaligned (PrimUnaligned (..))
import Data.ShortWord (Int24, Word24)
import Data.Word (Word8)
import GHC.Exts (Int (..), Int#, addIntC#, mulIntMayOflo#)
mkWord24 :: Word8 -> Word8 -> Word8 -> Word24
mkWord24 :: Word8 -> Word8 -> Word8 -> Word24
mkWord24 Word8
b0 Word8
b1 Word8
b2 =
let !w0 :: Word24
w0 = Word8 -> Word24
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word8
b0
!w1 :: Word24
w1 = Word24 -> Int -> Word24
forall a. Bits a => a -> Int -> a
shiftL (Word8 -> Word24
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word8
b1) Int
8
!w2 :: Word24
w2 = Word24 -> Int -> Word24
forall a. Bits a => a -> Int -> a
shiftL (Word8 -> Word24
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word8
b2) Int
16
!w :: Word24
w = Word24
w0 Word24 -> Word24 -> Word24
forall a. Bits a => a -> a -> a
.|. Word24
w1 Word24 -> Word24 -> Word24
forall a. Bits a => a -> a -> a
.|. Word24
w2
in Word24
w
{-# INLINE mkWord24 #-}
unMkWord24 :: Word24 -> (# Word8, Word8, Word8 #)
unMkWord24 :: Word24 -> (# Word8, Word8, Word8 #)
unMkWord24 Word24
w =
let !b0 :: Word8
b0 = Word24 -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Word24
w Word24 -> Word24 -> Word24
forall a. Bits a => a -> a -> a
.&. Word24
255)
!b1 :: Word8
b1 = Word24 -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Word24 -> Int -> Word24
forall a. Bits a => a -> Int -> a
shiftR Word24
w Int
8 Word24 -> Word24 -> Word24
forall a. Bits a => a -> a -> a
.&. Word24
255)
!b2 :: Word8
b2 = Word24 -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Word24 -> Int -> Word24
forall a. Bits a => a -> Int -> a
shiftR Word24
w Int
16 Word24 -> Word24 -> Word24
forall a. Bits a => a -> a -> a
.&. Word24
255)
!bs :: (# Word8, Word8, Word8 #)
bs = (# Word8
b0, Word8
b1, Word8
b2 #)
in (# Word8, Word8, Word8 #)
bs
{-# INLINE unMkWord24 #-}
mkInt24 :: Word8 -> Word8 -> Word8 -> Int24
mkInt24 :: Word8 -> Word8 -> Word8 -> Int24
mkInt24 Word8
b0 Word8
b1 Word8
b2 =
let !w0 :: Int24
w0 = Word8 -> Int24
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word8
b0
!w1 :: Int24
w1 = Int24 -> Int -> Int24
forall a. Bits a => a -> Int -> a
shiftL (Word8 -> Int24
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word8
b1) Int
8
!w2 :: Int24
w2 = Int24 -> Int -> Int24
forall a. Bits a => a -> Int -> a
shiftL (Word8 -> Int24
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word8
b2) Int
16
!w :: Int24
w = Int24
w0 Int24 -> Int24 -> Int24
forall a. Bits a => a -> a -> a
.|. Int24
w1 Int24 -> Int24 -> Int24
forall a. Bits a => a -> a -> a
.|. Int24
w2
in Int24
w
{-# INLINE mkInt24 #-}
unMkInt24 :: Int24 -> (# Word8, Word8, Word8 #)
unMkInt24 :: Int24 -> (# Word8, Word8, Word8 #)
unMkInt24 Int24
w =
let !b0 :: Word8
b0 = Int24 -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int24
w Int24 -> Int24 -> Int24
forall a. Bits a => a -> a -> a
.&. Int24
255)
!b1 :: Word8
b1 = Int24 -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int24 -> Int -> Int24
forall a. Bits a => a -> Int -> a
shiftR Int24
w Int
8 Int24 -> Int24 -> Int24
forall a. Bits a => a -> a -> a
.&. Int24
255)
!b2 :: Word8
b2 = Int24 -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int24 -> Int -> Int24
forall a. Bits a => a -> Int -> a
shiftR Int24
w Int
16 Int24 -> Int24 -> Int24
forall a. Bits a => a -> a -> a
.&. Int24
255)
!bs :: (# Word8, Word8, Word8 #)
bs = (# Word8
b0, Word8
b1, Word8
b2 #)
in (# Word8, Word8, Word8 #)
bs
{-# INLINE unMkInt24 #-}
k3 :: a -> Int#
k3 :: forall a. a -> Int#
k3 = let !(I# Int#
i) = Int
3 in \a
_ -> Int#
i
{-# INLINE k3 #-}
x3 :: Int# -> Int#
x3 :: Int# -> Int#
x3 =
let !(I# Int#
three) = Int
3
in Int# -> Int# -> Int#
mulIntMayOflo# Int#
three
{-# INLINE x3 #-}
x3p1 :: Int# -> Int#
x3p1 :: Int# -> Int#
x3p1 =
let !(I# Int#
three) = Int
3
!(I# Int#
one) = Int
1
in \Int#
i ->
let !(# Int#
x, Int#
_ #) = Int# -> Int# -> (# Int#, Int# #)
addIntC# Int#
one (Int# -> Int# -> Int#
mulIntMayOflo# Int#
three Int#
i)
in Int#
x
{-# INLINE x3p1 #-}
x3p2 :: Int# -> Int#
x3p2 :: Int# -> Int#
x3p2 =
let !(I# Int#
three) = Int
3
!(I# Int#
two) = Int
2
in \Int#
i ->
let !(# Int#
x, Int#
_ #) = Int# -> Int# -> (# Int#, Int# #)
addIntC# Int#
two (Int# -> Int# -> Int#
mulIntMayOflo# Int#
three Int#
i)
in Int#
x
{-# INLINE x3p2 #-}
p1 :: Int# -> Int#
p1 :: Int# -> Int#
p1 =
let !(I# Int#
one) = Int
1
in \Int#
i ->
let !(# Int#
x, Int#
_ #) = Int# -> Int# -> (# Int#, Int# #)
addIntC# Int#
one Int#
i
in Int#
x
{-# INLINE p1 #-}
p2 :: Int# -> Int#
p2 :: Int# -> Int#
p2 =
let !(I# Int#
two) = Int
2
in \Int#
i ->
let !(# Int#
x, Int#
_ #) = Int# -> Int# -> (# Int#, Int# #)
addIntC# Int#
two Int#
i
in Int#
x
{-# INLINE p2 #-}
instance Default Word24 where
def :: Word24
def = Word24
0
instance Default Int24 where
def :: Int24
def = Int24
0
instance Prim Word24 where
sizeOfType# :: Proxy Word24 -> Int#
sizeOfType# = Proxy Word24 -> Int#
forall a. a -> Int#
k3
sizeOf# :: Word24 -> Int#
sizeOf# = Word24 -> Int#
forall a. a -> Int#
k3
alignmentOfType# :: Proxy Word24 -> Int#
alignmentOfType# = Proxy Word24 -> Int#
forall a. a -> Int#
k3
alignment# :: Word24 -> Int#
alignment# = Word24 -> Int#
forall a. a -> Int#
k3
indexByteArray# :: ByteArray# -> Int# -> Word24
indexByteArray# ByteArray#
a Int#
i =
let !b0 :: Word8
b0 = ByteArray# -> Int# -> Word8
forall a. Prim a => ByteArray# -> Int# -> a
indexByteArray# ByteArray#
a (Int# -> Int#
x3 Int#
i)
!b1 :: Word8
b1 = ByteArray# -> Int# -> Word8
forall a. Prim a => ByteArray# -> Int# -> a
indexByteArray# ByteArray#
a (Int# -> Int#
x3p1 Int#
i)
!b2 :: Word8
b2 = ByteArray# -> Int# -> Word8
forall a. Prim a => ByteArray# -> Int# -> a
indexByteArray# ByteArray#
a (Int# -> Int#
x3p2 Int#
i)
!w :: Word24
w = Word8 -> Word8 -> Word8 -> Word24
mkWord24 Word8
b0 Word8
b1 Word8
b2
in Word24
w
readByteArray# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Word24 #)
readByteArray# MutableByteArray# s
a Int#
i State# s
s =
let !(# State# s
s0, Word8
b0 #) = MutableByteArray# s -> Int# -> State# s -> (# State# s, Word8 #)
forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Word8 #)
forall a s.
Prim a =>
MutableByteArray# s -> Int# -> State# s -> (# State# s, a #)
readByteArray# MutableByteArray# s
a (Int# -> Int#
x3 Int#
i) State# s
s
!(# State# s
s1, Word8
b1 #) = MutableByteArray# s -> Int# -> State# s -> (# State# s, Word8 #)
forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Word8 #)
forall a s.
Prim a =>
MutableByteArray# s -> Int# -> State# s -> (# State# s, a #)
readByteArray# MutableByteArray# s
a (Int# -> Int#
x3p1 Int#
i) State# s
s0
!(# State# s
s2, Word8
b2 #) = MutableByteArray# s -> Int# -> State# s -> (# State# s, Word8 #)
forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Word8 #)
forall a s.
Prim a =>
MutableByteArray# s -> Int# -> State# s -> (# State# s, a #)
readByteArray# MutableByteArray# s
a (Int# -> Int#
x3p2 Int#
i) State# s
s1
!w :: Word24
w = Word8 -> Word8 -> Word8 -> Word24
mkWord24 Word8
b0 Word8
b1 Word8
b2
!t :: (# State# s, Word24 #)
t = (# State# s
s2, Word24
w #)
in (# State# s, Word24 #)
t
writeByteArray# :: forall s.
MutableByteArray# s -> Int# -> Word24 -> State# s -> State# s
writeByteArray# MutableByteArray# s
a Int#
i Word24
w State# s
s =
let !(# Word8
b0, Word8
b1, Word8
b2 #) = Word24 -> (# Word8, Word8, Word8 #)
unMkWord24 Word24
w
!s0 :: State# s
s0 = MutableByteArray# s -> Int# -> Word8 -> State# s -> State# s
forall s.
MutableByteArray# s -> Int# -> Word8 -> State# s -> State# s
forall a s.
Prim a =>
MutableByteArray# s -> Int# -> a -> State# s -> State# s
writeByteArray# MutableByteArray# s
a (Int# -> Int#
x3 Int#
i) Word8
b0 State# s
s
!s1 :: State# s
s1 = MutableByteArray# s -> Int# -> Word8 -> State# s -> State# s
forall s.
MutableByteArray# s -> Int# -> Word8 -> State# s -> State# s
forall a s.
Prim a =>
MutableByteArray# s -> Int# -> a -> State# s -> State# s
writeByteArray# MutableByteArray# s
a (Int# -> Int#
x3p1 Int#
i) Word8
b1 State# s
s0
!s2 :: State# s
s2 = MutableByteArray# s -> Int# -> Word8 -> State# s -> State# s
forall s.
MutableByteArray# s -> Int# -> Word8 -> State# s -> State# s
forall a s.
Prim a =>
MutableByteArray# s -> Int# -> a -> State# s -> State# s
writeByteArray# MutableByteArray# s
a (Int# -> Int#
x3p2 Int#
i) Word8
b2 State# s
s1
in State# s
s2
indexOffAddr# :: Addr# -> Int# -> Word24
indexOffAddr# Addr#
a Int#
i =
let !b0 :: Word8
b0 = Addr# -> Int# -> Word8
forall a. Prim a => Addr# -> Int# -> a
indexOffAddr# Addr#
a (Int# -> Int#
x3 Int#
i)
!b1 :: Word8
b1 = Addr# -> Int# -> Word8
forall a. Prim a => Addr# -> Int# -> a
indexOffAddr# Addr#
a (Int# -> Int#
x3p1 Int#
i)
!b2 :: Word8
b2 = Addr# -> Int# -> Word8
forall a. Prim a => Addr# -> Int# -> a
indexOffAddr# Addr#
a (Int# -> Int#
x3p2 Int#
i)
!w :: Word24
w = Word8 -> Word8 -> Word8 -> Word24
mkWord24 Word8
b0 Word8
b1 Word8
b2
in Word24
w
readOffAddr# :: forall s. Addr# -> Int# -> State# s -> (# State# s, Word24 #)
readOffAddr# Addr#
a Int#
i State# s
s =
let !(# State# s
s0, Word8
b0 #) = Addr# -> Int# -> State# s -> (# State# s, Word8 #)
forall s. Addr# -> Int# -> State# s -> (# State# s, Word8 #)
forall a s.
Prim a =>
Addr# -> Int# -> State# s -> (# State# s, a #)
readOffAddr# Addr#
a (Int# -> Int#
x3 Int#
i) State# s
s
!(# State# s
s1, Word8
b1 #) = Addr# -> Int# -> State# s -> (# State# s, Word8 #)
forall s. Addr# -> Int# -> State# s -> (# State# s, Word8 #)
forall a s.
Prim a =>
Addr# -> Int# -> State# s -> (# State# s, a #)
readOffAddr# Addr#
a (Int# -> Int#
x3p1 Int#
i) State# s
s0
!(# State# s
s2, Word8
b2 #) = Addr# -> Int# -> State# s -> (# State# s, Word8 #)
forall s. Addr# -> Int# -> State# s -> (# State# s, Word8 #)
forall a s.
Prim a =>
Addr# -> Int# -> State# s -> (# State# s, a #)
readOffAddr# Addr#
a (Int# -> Int#
x3p2 Int#
i) State# s
s1
!w :: Word24
w = Word8 -> Word8 -> Word8 -> Word24
mkWord24 Word8
b0 Word8
b1 Word8
b2
!t :: (# State# s, Word24 #)
t = (# State# s
s2, Word24
w #)
in (# State# s, Word24 #)
t
writeOffAddr# :: forall s. Addr# -> Int# -> Word24 -> State# s -> State# s
writeOffAddr# Addr#
a Int#
i Word24
w State# s
s =
let !(# Word8
b0, Word8
b1, Word8
b2 #) = Word24 -> (# Word8, Word8, Word8 #)
unMkWord24 Word24
w
!s0 :: State# s
s0 = Addr# -> Int# -> Word8 -> State# s -> State# s
forall s. Addr# -> Int# -> Word8 -> State# s -> State# s
forall a s. Prim a => Addr# -> Int# -> a -> State# s -> State# s
writeOffAddr# Addr#
a (Int# -> Int#
x3 Int#
i) Word8
b0 State# s
s
!s1 :: State# s
s1 = Addr# -> Int# -> Word8 -> State# s -> State# s
forall s. Addr# -> Int# -> Word8 -> State# s -> State# s
forall a s. Prim a => Addr# -> Int# -> a -> State# s -> State# s
writeOffAddr# Addr#
a (Int# -> Int#
x3p1 Int#
i) Word8
b1 State# s
s0
!s2 :: State# s
s2 = Addr# -> Int# -> Word8 -> State# s -> State# s
forall s. Addr# -> Int# -> Word8 -> State# s -> State# s
forall a s. Prim a => Addr# -> Int# -> a -> State# s -> State# s
writeOffAddr# Addr#
a (Int# -> Int#
x3p2 Int#
i) Word8
b2 State# s
s1
in State# s
s2
instance Prim Int24 where
sizeOfType# :: Proxy Int24 -> Int#
sizeOfType# = Proxy Int24 -> Int#
forall a. a -> Int#
k3
sizeOf# :: Int24 -> Int#
sizeOf# = Int24 -> Int#
forall a. a -> Int#
k3
alignmentOfType# :: Proxy Int24 -> Int#
alignmentOfType# = Proxy Int24 -> Int#
forall a. a -> Int#
k3
alignment# :: Int24 -> Int#
alignment# = Int24 -> Int#
forall a. a -> Int#
k3
indexByteArray# :: ByteArray# -> Int# -> Int24
indexByteArray# ByteArray#
a Int#
i =
let !b0 :: Word8
b0 = ByteArray# -> Int# -> Word8
forall a. Prim a => ByteArray# -> Int# -> a
indexByteArray# ByteArray#
a (Int# -> Int#
x3 Int#
i)
!b1 :: Word8
b1 = ByteArray# -> Int# -> Word8
forall a. Prim a => ByteArray# -> Int# -> a
indexByteArray# ByteArray#
a (Int# -> Int#
x3p1 Int#
i)
!b2 :: Word8
b2 = ByteArray# -> Int# -> Word8
forall a. Prim a => ByteArray# -> Int# -> a
indexByteArray# ByteArray#
a (Int# -> Int#
x3p2 Int#
i)
!w :: Int24
w = Word8 -> Word8 -> Word8 -> Int24
mkInt24 Word8
b0 Word8
b1 Word8
b2
in Int24
w
readByteArray# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Int24 #)
readByteArray# MutableByteArray# s
a Int#
i State# s
s =
let !(# State# s
s0, Word8
b0 #) = MutableByteArray# s -> Int# -> State# s -> (# State# s, Word8 #)
forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Word8 #)
forall a s.
Prim a =>
MutableByteArray# s -> Int# -> State# s -> (# State# s, a #)
readByteArray# MutableByteArray# s
a (Int# -> Int#
x3 Int#
i) State# s
s
!(# State# s
s1, Word8
b1 #) = MutableByteArray# s -> Int# -> State# s -> (# State# s, Word8 #)
forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Word8 #)
forall a s.
Prim a =>
MutableByteArray# s -> Int# -> State# s -> (# State# s, a #)
readByteArray# MutableByteArray# s
a (Int# -> Int#
x3p1 Int#
i) State# s
s0
!(# State# s
s2, Word8
b2 #) = MutableByteArray# s -> Int# -> State# s -> (# State# s, Word8 #)
forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Word8 #)
forall a s.
Prim a =>
MutableByteArray# s -> Int# -> State# s -> (# State# s, a #)
readByteArray# MutableByteArray# s
a (Int# -> Int#
x3p2 Int#
i) State# s
s1
!w :: Int24
w = Word8 -> Word8 -> Word8 -> Int24
mkInt24 Word8
b0 Word8
b1 Word8
b2
!t :: (# State# s, Int24 #)
t = (# State# s
s2, Int24
w #)
in (# State# s, Int24 #)
t
writeByteArray# :: forall s.
MutableByteArray# s -> Int# -> Int24 -> State# s -> State# s
writeByteArray# MutableByteArray# s
a Int#
i Int24
w State# s
s =
let !(# Word8
b0, Word8
b1, Word8
b2 #) = Int24 -> (# Word8, Word8, Word8 #)
unMkInt24 Int24
w
!s0 :: State# s
s0 = MutableByteArray# s -> Int# -> Word8 -> State# s -> State# s
forall s.
MutableByteArray# s -> Int# -> Word8 -> State# s -> State# s
forall a s.
Prim a =>
MutableByteArray# s -> Int# -> a -> State# s -> State# s
writeByteArray# MutableByteArray# s
a (Int# -> Int#
x3 Int#
i) Word8
b0 State# s
s
!s1 :: State# s
s1 = MutableByteArray# s -> Int# -> Word8 -> State# s -> State# s
forall s.
MutableByteArray# s -> Int# -> Word8 -> State# s -> State# s
forall a s.
Prim a =>
MutableByteArray# s -> Int# -> a -> State# s -> State# s
writeByteArray# MutableByteArray# s
a (Int# -> Int#
x3p1 Int#
i) Word8
b1 State# s
s0
!s2 :: State# s
s2 = MutableByteArray# s -> Int# -> Word8 -> State# s -> State# s
forall s.
MutableByteArray# s -> Int# -> Word8 -> State# s -> State# s
forall a s.
Prim a =>
MutableByteArray# s -> Int# -> a -> State# s -> State# s
writeByteArray# MutableByteArray# s
a (Int# -> Int#
x3p2 Int#
i) Word8
b2 State# s
s1
in State# s
s2
indexOffAddr# :: Addr# -> Int# -> Int24
indexOffAddr# Addr#
a Int#
i =
let !b0 :: Word8
b0 = Addr# -> Int# -> Word8
forall a. Prim a => Addr# -> Int# -> a
indexOffAddr# Addr#
a (Int# -> Int#
x3 Int#
i)
!b1 :: Word8
b1 = Addr# -> Int# -> Word8
forall a. Prim a => Addr# -> Int# -> a
indexOffAddr# Addr#
a (Int# -> Int#
x3p1 Int#
i)
!b2 :: Word8
b2 = Addr# -> Int# -> Word8
forall a. Prim a => Addr# -> Int# -> a
indexOffAddr# Addr#
a (Int# -> Int#
x3p2 Int#
i)
!w :: Int24
w = Word8 -> Word8 -> Word8 -> Int24
mkInt24 Word8
b0 Word8
b1 Word8
b2
in Int24
w
readOffAddr# :: forall s. Addr# -> Int# -> State# s -> (# State# s, Int24 #)
readOffAddr# Addr#
a Int#
i State# s
s =
let !(# State# s
s0, Word8
b0 #) = Addr# -> Int# -> State# s -> (# State# s, Word8 #)
forall s. Addr# -> Int# -> State# s -> (# State# s, Word8 #)
forall a s.
Prim a =>
Addr# -> Int# -> State# s -> (# State# s, a #)
readOffAddr# Addr#
a (Int# -> Int#
x3 Int#
i) State# s
s
!(# State# s
s1, Word8
b1 #) = Addr# -> Int# -> State# s -> (# State# s, Word8 #)
forall s. Addr# -> Int# -> State# s -> (# State# s, Word8 #)
forall a s.
Prim a =>
Addr# -> Int# -> State# s -> (# State# s, a #)
readOffAddr# Addr#
a (Int# -> Int#
x3p1 Int#
i) State# s
s0
!(# State# s
s2, Word8
b2 #) = Addr# -> Int# -> State# s -> (# State# s, Word8 #)
forall s. Addr# -> Int# -> State# s -> (# State# s, Word8 #)
forall a s.
Prim a =>
Addr# -> Int# -> State# s -> (# State# s, a #)
readOffAddr# Addr#
a (Int# -> Int#
x3p2 Int#
i) State# s
s1
!w :: Int24
w = Word8 -> Word8 -> Word8 -> Int24
mkInt24 Word8
b0 Word8
b1 Word8
b2
!t :: (# State# s, Int24 #)
t = (# State# s
s2, Int24
w #)
in (# State# s, Int24 #)
t
writeOffAddr# :: forall s. Addr# -> Int# -> Int24 -> State# s -> State# s
writeOffAddr# Addr#
a Int#
i Int24
w State# s
s =
let !(# Word8
b0, Word8
b1, Word8
b2 #) = Int24 -> (# Word8, Word8, Word8 #)
unMkInt24 Int24
w
!s0 :: State# s
s0 = Addr# -> Int# -> Word8 -> State# s -> State# s
forall s. Addr# -> Int# -> Word8 -> State# s -> State# s
forall a s. Prim a => Addr# -> Int# -> a -> State# s -> State# s
writeOffAddr# Addr#
a (Int# -> Int#
x3 Int#
i) Word8
b0 State# s
s
!s1 :: State# s
s1 = Addr# -> Int# -> Word8 -> State# s -> State# s
forall s. Addr# -> Int# -> Word8 -> State# s -> State# s
forall a s. Prim a => Addr# -> Int# -> a -> State# s -> State# s
writeOffAddr# Addr#
a (Int# -> Int#
x3p1 Int#
i) Word8
b1 State# s
s0
!s2 :: State# s
s2 = Addr# -> Int# -> Word8 -> State# s -> State# s
forall s. Addr# -> Int# -> Word8 -> State# s -> State# s
forall a s. Prim a => Addr# -> Int# -> a -> State# s -> State# s
writeOffAddr# Addr#
a (Int# -> Int#
x3p2 Int#
i) Word8
b2 State# s
s1
in State# s
s2
instance PrimUnaligned Word24 where
indexUnalignedByteArray# :: ByteArray# -> Int# -> Word24
indexUnalignedByteArray# ByteArray#
a Int#
i =
let !b0 :: Word8
b0 = ByteArray# -> Int# -> Word8
forall a. Prim a => ByteArray# -> Int# -> a
indexByteArray# ByteArray#
a Int#
i
!b1 :: Word8
b1 = ByteArray# -> Int# -> Word8
forall a. Prim a => ByteArray# -> Int# -> a
indexByteArray# ByteArray#
a (Int# -> Int#
p1 Int#
i)
!b2 :: Word8
b2 = ByteArray# -> Int# -> Word8
forall a. Prim a => ByteArray# -> Int# -> a
indexByteArray# ByteArray#
a (Int# -> Int#
p2 Int#
i)
!w :: Word24
w = Word8 -> Word8 -> Word8 -> Word24
mkWord24 Word8
b0 Word8
b1 Word8
b2
in Word24
w
readUnalignedByteArray# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Word24 #)
readUnalignedByteArray# MutableByteArray# s
a Int#
i State# s
s =
let !(# State# s
s0, Word8
b0 #) = MutableByteArray# s -> Int# -> State# s -> (# State# s, Word8 #)
forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Word8 #)
forall a s.
Prim a =>
MutableByteArray# s -> Int# -> State# s -> (# State# s, a #)
readByteArray# MutableByteArray# s
a Int#
i State# s
s
!(# State# s
s1, Word8
b1 #) = MutableByteArray# s -> Int# -> State# s -> (# State# s, Word8 #)
forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Word8 #)
forall a s.
Prim a =>
MutableByteArray# s -> Int# -> State# s -> (# State# s, a #)
readByteArray# MutableByteArray# s
a (Int# -> Int#
p1 Int#
i) State# s
s0
!(# State# s
s2, Word8
b2 #) = MutableByteArray# s -> Int# -> State# s -> (# State# s, Word8 #)
forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Word8 #)
forall a s.
Prim a =>
MutableByteArray# s -> Int# -> State# s -> (# State# s, a #)
readByteArray# MutableByteArray# s
a (Int# -> Int#
p2 Int#
i) State# s
s1
!w :: Word24
w = Word8 -> Word8 -> Word8 -> Word24
mkWord24 Word8
b0 Word8
b1 Word8
b2
!t :: (# State# s, Word24 #)
t = (# State# s
s2, Word24
w #)
in (# State# s, Word24 #)
t
writeUnalignedByteArray# :: forall s.
MutableByteArray# s -> Int# -> Word24 -> State# s -> State# s
writeUnalignedByteArray# MutableByteArray# s
a Int#
i Word24
w State# s
s =
let !(# Word8
b0, Word8
b1, Word8
b2 #) = Word24 -> (# Word8, Word8, Word8 #)
unMkWord24 Word24
w
!s0 :: State# s
s0 = MutableByteArray# s -> Int# -> Word8 -> State# s -> State# s
forall s.
MutableByteArray# s -> Int# -> Word8 -> State# s -> State# s
forall a s.
Prim a =>
MutableByteArray# s -> Int# -> a -> State# s -> State# s
writeByteArray# MutableByteArray# s
a Int#
i Word8
b0 State# s
s
!s1 :: State# s
s1 = MutableByteArray# s -> Int# -> Word8 -> State# s -> State# s
forall s.
MutableByteArray# s -> Int# -> Word8 -> State# s -> State# s
forall a s.
Prim a =>
MutableByteArray# s -> Int# -> a -> State# s -> State# s
writeByteArray# MutableByteArray# s
a (Int# -> Int#
p1 Int#
i) Word8
b1 State# s
s0
!s2 :: State# s
s2 = MutableByteArray# s -> Int# -> Word8 -> State# s -> State# s
forall s.
MutableByteArray# s -> Int# -> Word8 -> State# s -> State# s
forall a s.
Prim a =>
MutableByteArray# s -> Int# -> a -> State# s -> State# s
writeByteArray# MutableByteArray# s
a (Int# -> Int#
p2 Int#
i) Word8
b2 State# s
s1
in State# s
s2
instance PrimUnaligned Int24 where
indexUnalignedByteArray# :: ByteArray# -> Int# -> Int24
indexUnalignedByteArray# ByteArray#
a Int#
i =
let !b0 :: Word8
b0 = ByteArray# -> Int# -> Word8
forall a. Prim a => ByteArray# -> Int# -> a
indexByteArray# ByteArray#
a Int#
i
!b1 :: Word8
b1 = ByteArray# -> Int# -> Word8
forall a. Prim a => ByteArray# -> Int# -> a
indexByteArray# ByteArray#
a (Int# -> Int#
p1 Int#
i)
!b2 :: Word8
b2 = ByteArray# -> Int# -> Word8
forall a. Prim a => ByteArray# -> Int# -> a
indexByteArray# ByteArray#
a (Int# -> Int#
p2 Int#
i)
!w :: Int24
w = Word8 -> Word8 -> Word8 -> Int24
mkInt24 Word8
b0 Word8
b1 Word8
b2
in Int24
w
readUnalignedByteArray# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Int24 #)
readUnalignedByteArray# MutableByteArray# s
a Int#
i State# s
s =
let !(# State# s
s0, Word8
b0 #) = MutableByteArray# s -> Int# -> State# s -> (# State# s, Word8 #)
forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Word8 #)
forall a s.
Prim a =>
MutableByteArray# s -> Int# -> State# s -> (# State# s, a #)
readByteArray# MutableByteArray# s
a Int#
i State# s
s
!(# State# s
s1, Word8
b1 #) = MutableByteArray# s -> Int# -> State# s -> (# State# s, Word8 #)
forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Word8 #)
forall a s.
Prim a =>
MutableByteArray# s -> Int# -> State# s -> (# State# s, a #)
readByteArray# MutableByteArray# s
a (Int# -> Int#
p1 Int#
i) State# s
s0
!(# State# s
s2, Word8
b2 #) = MutableByteArray# s -> Int# -> State# s -> (# State# s, Word8 #)
forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Word8 #)
forall a s.
Prim a =>
MutableByteArray# s -> Int# -> State# s -> (# State# s, a #)
readByteArray# MutableByteArray# s
a (Int# -> Int#
p2 Int#
i) State# s
s1
!w :: Int24
w = Word8 -> Word8 -> Word8 -> Int24
mkInt24 Word8
b0 Word8
b1 Word8
b2
!t :: (# State# s, Int24 #)
t = (# State# s
s2, Int24
w #)
in (# State# s, Int24 #)
t
writeUnalignedByteArray# :: forall s.
MutableByteArray# s -> Int# -> Int24 -> State# s -> State# s
writeUnalignedByteArray# MutableByteArray# s
a Int#
i Int24
w State# s
s =
let !(# Word8
b0, Word8
b1, Word8
b2 #) = Int24 -> (# Word8, Word8, Word8 #)
unMkInt24 Int24
w
!s0 :: State# s
s0 = MutableByteArray# s -> Int# -> Word8 -> State# s -> State# s
forall s.
MutableByteArray# s -> Int# -> Word8 -> State# s -> State# s
forall a s.
Prim a =>
MutableByteArray# s -> Int# -> a -> State# s -> State# s
writeByteArray# MutableByteArray# s
a Int#
i Word8
b0 State# s
s
!s1 :: State# s
s1 = MutableByteArray# s -> Int# -> Word8 -> State# s -> State# s
forall s.
MutableByteArray# s -> Int# -> Word8 -> State# s -> State# s
forall a s.
Prim a =>
MutableByteArray# s -> Int# -> a -> State# s -> State# s
writeByteArray# MutableByteArray# s
a (Int# -> Int#
p1 Int#
i) Word8
b1 State# s
s0
!s2 :: State# s
s2 = MutableByteArray# s -> Int# -> Word8 -> State# s -> State# s
forall s.
MutableByteArray# s -> Int# -> Word8 -> State# s -> State# s
forall a s.
Prim a =>
MutableByteArray# s -> Int# -> a -> State# s -> State# s
writeByteArray# MutableByteArray# s
a (Int# -> Int#
p2 Int#
i) Word8
b2 State# s
s1
in State# s
s2