{-# HLINT ignore "Use const" #-}
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE UnboxedTuples #-}
{-# OPTIONS_GHC -Wno-orphans #-}
{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-}

-- | Exists to give orphan Prim instances to 24-bit integral types.
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