{-# LANGUAGE ScopedTypeVariables #-}
module Z.Data.Array.Unaligned where
import Control.Monad.Primitive
import Data.Primitive.ByteArray
import Data.Primitive.PrimArray
import Data.Primitive.Types
import GHC.Int
import GHC.IO
import GHC.Exts
import GHC.Word
import GHC.Float (stgFloatToWord32, stgWord32ToFloat, stgWord64ToDouble, stgDoubleToWord64)
import Foreign.C.Types
#include "MachDeps.h"
newtype UnalignedSize a = UnalignedSize { forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize :: Int } deriving (Int -> UnalignedSize a -> ShowS
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall k (a :: k). Int -> UnalignedSize a -> ShowS
forall k (a :: k). [UnalignedSize a] -> ShowS
forall k (a :: k). UnalignedSize a -> String
showList :: [UnalignedSize a] -> ShowS
$cshowList :: forall k (a :: k). [UnalignedSize a] -> ShowS
show :: UnalignedSize a -> String
$cshow :: forall k (a :: k). UnalignedSize a -> String
showsPrec :: Int -> UnalignedSize a -> ShowS
$cshowsPrec :: forall k (a :: k). Int -> UnalignedSize a -> ShowS
Show, UnalignedSize a -> UnalignedSize a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall k (a :: k). UnalignedSize a -> UnalignedSize a -> Bool
/= :: UnalignedSize a -> UnalignedSize a -> Bool
$c/= :: forall k (a :: k). UnalignedSize a -> UnalignedSize a -> Bool
== :: UnalignedSize a -> UnalignedSize a -> Bool
$c== :: forall k (a :: k). UnalignedSize a -> UnalignedSize a -> Bool
Eq, UnalignedSize a -> UnalignedSize a -> Bool
UnalignedSize a -> UnalignedSize a -> Ordering
UnalignedSize a -> UnalignedSize a -> UnalignedSize a
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall k (a :: k). Eq (UnalignedSize a)
forall k (a :: k). UnalignedSize a -> UnalignedSize a -> Bool
forall k (a :: k). UnalignedSize a -> UnalignedSize a -> Ordering
forall k (a :: k).
UnalignedSize a -> UnalignedSize a -> UnalignedSize a
min :: UnalignedSize a -> UnalignedSize a -> UnalignedSize a
$cmin :: forall k (a :: k).
UnalignedSize a -> UnalignedSize a -> UnalignedSize a
max :: UnalignedSize a -> UnalignedSize a -> UnalignedSize a
$cmax :: forall k (a :: k).
UnalignedSize a -> UnalignedSize a -> UnalignedSize a
>= :: UnalignedSize a -> UnalignedSize a -> Bool
$c>= :: forall k (a :: k). UnalignedSize a -> UnalignedSize a -> Bool
> :: UnalignedSize a -> UnalignedSize a -> Bool
$c> :: forall k (a :: k). UnalignedSize a -> UnalignedSize a -> Bool
<= :: UnalignedSize a -> UnalignedSize a -> Bool
$c<= :: forall k (a :: k). UnalignedSize a -> UnalignedSize a -> Bool
< :: UnalignedSize a -> UnalignedSize a -> Bool
$c< :: forall k (a :: k). UnalignedSize a -> UnalignedSize a -> Bool
compare :: UnalignedSize a -> UnalignedSize a -> Ordering
$ccompare :: forall k (a :: k). UnalignedSize a -> UnalignedSize a -> Ordering
Ord)
deriving newtype Integer -> UnalignedSize a
UnalignedSize a -> UnalignedSize a
UnalignedSize a -> UnalignedSize a -> UnalignedSize a
forall a.
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (Integer -> a)
-> Num a
forall k (a :: k). Integer -> UnalignedSize a
forall k (a :: k). UnalignedSize a -> UnalignedSize a
forall k (a :: k).
UnalignedSize a -> UnalignedSize a -> UnalignedSize a
fromInteger :: Integer -> UnalignedSize a
$cfromInteger :: forall k (a :: k). Integer -> UnalignedSize a
signum :: UnalignedSize a -> UnalignedSize a
$csignum :: forall k (a :: k). UnalignedSize a -> UnalignedSize a
abs :: UnalignedSize a -> UnalignedSize a
$cabs :: forall k (a :: k). UnalignedSize a -> UnalignedSize a
negate :: UnalignedSize a -> UnalignedSize a
$cnegate :: forall k (a :: k). UnalignedSize a -> UnalignedSize a
* :: UnalignedSize a -> UnalignedSize a -> UnalignedSize a
$c* :: forall k (a :: k).
UnalignedSize a -> UnalignedSize a -> UnalignedSize a
- :: UnalignedSize a -> UnalignedSize a -> UnalignedSize a
$c- :: forall k (a :: k).
UnalignedSize a -> UnalignedSize a -> UnalignedSize a
+ :: UnalignedSize a -> UnalignedSize a -> UnalignedSize a
$c+ :: forall k (a :: k).
UnalignedSize a -> UnalignedSize a -> UnalignedSize a
Num
class Unaligned a where
{-# MINIMAL unalignedSize,
(indexWord8ArrayAs# | indexBA),
(writeWord8ArrayAs# | peekMBA),
(readWord8ArrayAs# | pokeMBA) #-}
unalignedSize :: UnalignedSize a
indexWord8ArrayAs# :: ByteArray# -> Int# -> a
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# ByteArray#
ba# Int#
i# = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# (Int# -> Int
I# Int#
i#)
readWord8ArrayAs# :: MutableByteArray# s -> Int# -> State# s -> (# State# s, a #)
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s# =
unsafeCoerce# :: forall a b. a -> b
unsafeCoerce# (forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA (unsafeCoerce# :: forall a b. a -> b
unsafeCoerce# MutableByteArray# s
mba#) (Int# -> Int
I# Int#
i#) :: IO a) State# s
s#
writeWord8ArrayAs# :: MutableByteArray# s -> Int# -> a -> State# s -> State# s
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# a
x State# s
s# =
let !(# State# RealWorld
s'#, ()
_ #) = forall a. IO a -> State# RealWorld -> (# State# RealWorld, a #)
unIO (forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA (unsafeCoerce# :: forall a b. a -> b
unsafeCoerce# MutableByteArray# s
mba#) (Int# -> Int
I# Int#
i#) a
x :: IO ()) (unsafeCoerce# :: forall a b. a -> b
unsafeCoerce# State# s
s#)
in unsafeCoerce# :: forall a b. a -> b
unsafeCoerce# State# RealWorld
s'#
peekMBA :: MutableByteArray# RealWorld -> Int -> IO a
{-# INLINE peekMBA #-}
peekMBA MutableByteArray# RealWorld
mba# (I# Int#
i#) = forall (m :: * -> *) a.
PrimMonad m =>
(State# (PrimState m) -> (# State# (PrimState m), a #)) -> m a
primitive (forall a s.
Unaligned a =>
MutableByteArray# s -> Int# -> State# s -> (# State# s, a #)
readWord8ArrayAs# MutableByteArray# RealWorld
mba# Int#
i#)
pokeMBA :: MutableByteArray# RealWorld -> Int -> a -> IO ()
{-# INLINE pokeMBA #-}
pokeMBA MutableByteArray# RealWorld
mba# (I# Int#
i#) a
x = forall (m :: * -> *).
PrimMonad m =>
(State# (PrimState m) -> State# (PrimState m)) -> m ()
primitive_ (forall a s.
Unaligned a =>
MutableByteArray# s -> Int# -> a -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# RealWorld
mba# Int#
i# a
x)
indexBA :: ByteArray# -> Int -> a
{-# INLINE indexBA #-}
indexBA ByteArray#
ba# (I# Int#
i#) = forall a. Unaligned a => ByteArray# -> Int# -> a
indexWord8ArrayAs# ByteArray#
ba# Int#
i#
writeWord8ArrayAs :: (PrimMonad m, Unaligned a) => MutableByteArray (PrimState m) -> Int -> a -> m ()
{-# INLINE writeWord8ArrayAs #-}
writeWord8ArrayAs :: forall (m :: * -> *) a.
(PrimMonad m, Unaligned a) =>
MutableByteArray (PrimState m) -> Int -> a -> m ()
writeWord8ArrayAs (MutableByteArray MutableByteArray# (PrimState m)
mba#) (I# Int#
i#) a
x = forall (m :: * -> *).
PrimMonad m =>
(State# (PrimState m) -> State# (PrimState m)) -> m ()
primitive_ (forall a s.
Unaligned a =>
MutableByteArray# s -> Int# -> a -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# (PrimState m)
mba# Int#
i# a
x)
readWord8ArrayAs :: (PrimMonad m, Unaligned a) => MutableByteArray (PrimState m) -> Int -> m a
{-# INLINE readWord8ArrayAs #-}
readWord8ArrayAs :: forall (m :: * -> *) a.
(PrimMonad m, Unaligned a) =>
MutableByteArray (PrimState m) -> Int -> m a
readWord8ArrayAs (MutableByteArray MutableByteArray# (PrimState m)
mba#) (I# Int#
i#) = forall (m :: * -> *) a.
PrimMonad m =>
(State# (PrimState m) -> (# State# (PrimState m), a #)) -> m a
primitive (forall a s.
Unaligned a =>
MutableByteArray# s -> Int# -> State# s -> (# State# s, a #)
readWord8ArrayAs# MutableByteArray# (PrimState m)
mba# Int#
i#)
indexWord8ArrayAs :: Unaligned a => ByteArray -> Int -> a
{-# INLINE indexWord8ArrayAs #-}
indexWord8ArrayAs :: forall a. Unaligned a => ByteArray -> Int -> a
indexWord8ArrayAs (ByteArray ByteArray#
ba#) (I# Int#
i#) = forall a. Unaligned a => ByteArray# -> Int# -> a
indexWord8ArrayAs# ByteArray#
ba# Int#
i#
writePrimWord8ArrayAs :: (PrimMonad m, Unaligned a) => MutablePrimArray (PrimState m) Word8 -> Int -> a -> m ()
{-# INLINE writePrimWord8ArrayAs #-}
writePrimWord8ArrayAs :: forall (m :: * -> *) a.
(PrimMonad m, Unaligned a) =>
MutablePrimArray (PrimState m) Word8 -> Int -> a -> m ()
writePrimWord8ArrayAs (MutablePrimArray MutableByteArray# (PrimState m)
mba#) (I# Int#
i#) a
x = forall (m :: * -> *).
PrimMonad m =>
(State# (PrimState m) -> State# (PrimState m)) -> m ()
primitive_ (forall a s.
Unaligned a =>
MutableByteArray# s -> Int# -> a -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# (PrimState m)
mba# Int#
i# a
x)
readPrimWord8ArrayAs :: (PrimMonad m, Unaligned a) => MutablePrimArray (PrimState m) Word8 -> Int -> m a
{-# INLINE readPrimWord8ArrayAs #-}
readPrimWord8ArrayAs :: forall (m :: * -> *) a.
(PrimMonad m, Unaligned a) =>
MutablePrimArray (PrimState m) Word8 -> Int -> m a
readPrimWord8ArrayAs (MutablePrimArray MutableByteArray# (PrimState m)
mba#) (I# Int#
i#) = forall (m :: * -> *) a.
PrimMonad m =>
(State# (PrimState m) -> (# State# (PrimState m), a #)) -> m a
primitive (forall a s.
Unaligned a =>
MutableByteArray# s -> Int# -> State# s -> (# State# s, a #)
readWord8ArrayAs# MutableByteArray# (PrimState m)
mba# Int#
i#)
indexPrimWord8ArrayAs :: Unaligned a => PrimArray Word8 -> Int -> a
{-# INLINE indexPrimWord8ArrayAs #-}
indexPrimWord8ArrayAs :: forall a. Unaligned a => PrimArray Word8 -> Int -> a
indexPrimWord8ArrayAs (PrimArray ByteArray#
ba#) (I# Int#
i#) = forall a. Unaligned a => ByteArray# -> Int# -> a
indexWord8ArrayAs# ByteArray#
ba# Int#
i#
primArrayToBE :: forall a. (Prim a, Unaligned (BE a)) => PrimArray a -> Int -> Int -> PrimArray Word8
{-# INLINE primArrayToBE #-}
primArrayToBE :: forall a.
(Prim a, Unaligned (BE a)) =>
PrimArray a -> Int -> Int -> PrimArray Word8
primArrayToBE PrimArray a
parr Int
off Int
len = forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$ do
MutablePrimArray RealWorld Word8
buf <- forall (m :: * -> *) a.
(PrimMonad m, Prim a) =>
Int -> m (MutablePrimArray (PrimState m) a)
newPrimArray Int
siz
MutablePrimArray RealWorld Word8
-> Int -> Int -> IO (PrimArray Word8)
go MutablePrimArray RealWorld Word8
buf Int
off Int
0
where
s :: Int
s = forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @(BE a))
siz :: Int
siz = Int
len forall a. Num a => a -> a -> a
* Int
s
go :: MutablePrimArray RealWorld Word8
-> Int -> Int -> IO (PrimArray Word8)
go MutablePrimArray RealWorld Word8
buf !Int
i !Int
j
| Int
j forall a. Eq a => a -> a -> Bool
== Int
siz = forall (m :: * -> *) a.
PrimMonad m =>
MutablePrimArray (PrimState m) a -> m (PrimArray a)
unsafeFreezePrimArray MutablePrimArray RealWorld Word8
buf
| Bool
otherwise = do
forall (m :: * -> *) a.
(PrimMonad m, Unaligned a) =>
MutablePrimArray (PrimState m) Word8 -> Int -> a -> m ()
writePrimWord8ArrayAs MutablePrimArray RealWorld Word8
buf Int
j (forall a. a -> BE a
BE (forall a. Prim a => PrimArray a -> Int -> a
indexPrimArray PrimArray a
parr Int
i))
MutablePrimArray RealWorld Word8
-> Int -> Int -> IO (PrimArray Word8)
go MutablePrimArray RealWorld Word8
buf (Int
iforall a. Num a => a -> a -> a
+Int
1) (Int
jforall a. Num a => a -> a -> a
+Int
s)
primArrayFromBE :: forall a. (Prim a, Unaligned (BE a)) => PrimArray Word8 -> Int -> Int -> PrimArray a
{-# INLINE primArrayFromBE #-}
primArrayFromBE :: forall a.
(Prim a, Unaligned (BE a)) =>
PrimArray Word8 -> Int -> Int -> PrimArray a
primArrayFromBE PrimArray Word8
parr Int
off Int
len = forall a. IO a -> a
unsafeDupablePerformIO forall a b. (a -> b) -> a -> b
$ do
MutablePrimArray RealWorld a
buf <- forall (m :: * -> *) a.
(PrimMonad m, Prim a) =>
Int -> m (MutablePrimArray (PrimState m) a)
newPrimArray Int
siz
MutablePrimArray RealWorld a -> Int -> Int -> IO (PrimArray a)
go MutablePrimArray RealWorld a
buf Int
off Int
0
where
s :: Int
s = forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @(BE a))
siz :: Int
siz = Int
len forall a. Integral a => a -> a -> a
`quot` Int
s
go :: MutablePrimArray RealWorld a -> Int -> Int -> IO (PrimArray a)
go MutablePrimArray RealWorld a
buf !Int
i !Int
j
| Int
j forall a. Eq a => a -> a -> Bool
== Int
siz = forall (m :: * -> *) a.
PrimMonad m =>
MutablePrimArray (PrimState m) a -> m (PrimArray a)
unsafeFreezePrimArray MutablePrimArray RealWorld a
buf
| Bool
otherwise = do
forall a (m :: * -> *).
(Prim a, PrimMonad m) =>
MutablePrimArray (PrimState m) a -> Int -> a -> m ()
writePrimArray MutablePrimArray RealWorld a
buf Int
j (forall a. BE a -> a
getBE (forall a. Unaligned a => PrimArray Word8 -> Int -> a
indexPrimWord8ArrayAs PrimArray Word8
parr Int
i))
MutablePrimArray RealWorld a -> Int -> Int -> IO (PrimArray a)
go MutablePrimArray RealWorld a
buf (Int
iforall a. Num a => a -> a -> a
+Int
s) (Int
jforall a. Num a => a -> a -> a
+Int
1)
instance Unaligned Word8 where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize Word8
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
1
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> Word8 -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (W8# Word8#
x#) = forall d.
MutableByteArray# d -> Int# -> Word8# -> State# d -> State# d
writeWord8Array# MutableByteArray# s
mba# Int#
i# Word8#
x#
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Word8 #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0 =
let !(# State# s
s1, Word8#
x# #) = forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Word8# #)
readWord8Array# MutableByteArray# s
mba# Int#
i# State# s
s0 in (# State# s
s1, Word8# -> Word8
W8# Word8#
x# #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# :: ByteArray# -> Int# -> Word8
indexWord8ArrayAs# ByteArray#
ba# Int#
i# = Word8# -> Word8
W8# (ByteArray# -> Int# -> Word8#
indexWord8Array# ByteArray#
ba# Int#
i#)
instance Unaligned Int8 where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize Int8
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
1
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> Int8 -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (I8# Int8#
x#) = forall d.
MutableByteArray# d -> Int# -> Int8# -> State# d -> State# d
writeInt8Array# MutableByteArray# s
mba# Int#
i# Int8#
x#
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Int8 #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0 =
let !(# State# s
s1, Int8#
x# #) = forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Int8# #)
readInt8Array# MutableByteArray# s
mba# Int#
i# State# s
s0 in (# State# s
s1, Int8# -> Int8
I8# Int8#
x# #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# :: ByteArray# -> Int# -> Int8
indexWord8ArrayAs# ByteArray#
ba# Int#
i# = Int8# -> Int8
I8# (ByteArray# -> Int# -> Int8#
indexInt8Array# ByteArray#
ba# Int#
i#)
newtype LE a = LE { forall a. LE a -> a
getLE :: a } deriving (Int -> LE a -> ShowS
forall a. Show a => Int -> LE a -> ShowS
forall a. Show a => [LE a] -> ShowS
forall a. Show a => LE a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [LE a] -> ShowS
$cshowList :: forall a. Show a => [LE a] -> ShowS
show :: LE a -> String
$cshow :: forall a. Show a => LE a -> String
showsPrec :: Int -> LE a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> LE a -> ShowS
Show, LE a -> LE a -> Bool
forall a. Eq a => LE a -> LE a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: LE a -> LE a -> Bool
$c/= :: forall a. Eq a => LE a -> LE a -> Bool
== :: LE a -> LE a -> Bool
$c== :: forall a. Eq a => LE a -> LE a -> Bool
Eq)
newtype BE a = BE { forall a. BE a -> a
getBE :: a } deriving (Int -> BE a -> ShowS
forall a. Show a => Int -> BE a -> ShowS
forall a. Show a => [BE a] -> ShowS
forall a. Show a => BE a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [BE a] -> ShowS
$cshowList :: forall a. Show a => [BE a] -> ShowS
show :: BE a -> String
$cshow :: forall a. Show a => BE a -> String
showsPrec :: Int -> BE a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> BE a -> ShowS
Show, BE a -> BE a -> Bool
forall a. Eq a => BE a -> BE a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: BE a -> BE a -> Bool
$c/= :: forall a. Eq a => BE a -> BE a -> Bool
== :: BE a -> BE a -> Bool
$c== :: forall a. Eq a => BE a -> BE a -> Bool
Eq)
#define USE_HOST_IMPL(END) \
{-# INLINE writeWord8ArrayAs# #-}; \
writeWord8ArrayAs# mba# i# (END x) = writeWord8ArrayAs# mba# i# x; \
{-# INLINE readWord8ArrayAs# #-}; \
readWord8ArrayAs# mba# i# s0 = \
let !(# s1, x #) = readWord8ArrayAs# mba# i# s0 in (# s1, END x #); \
{-# INLINE indexWord8ArrayAs# #-}; \
indexWord8ArrayAs# ba# i# = END (indexWord8ArrayAs# ba# i#);
instance Unaligned Word16 where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize Word16
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
2
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> Word16 -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (W16# Word16#
x#) = forall d.
MutableByteArray# d -> Int# -> Word16# -> State# d -> State# d
writeWord8ArrayAsWord16# MutableByteArray# s
mba# Int#
i# Word16#
x#
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Word16 #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0 =
let !(# State# s
s1, Word16#
x# #) = forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Word16# #)
readWord8ArrayAsWord16# MutableByteArray# s
mba# Int#
i# State# s
s0 in (# State# s
s1, Word16# -> Word16
W16# Word16#
x# #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# :: ByteArray# -> Int# -> Word16
indexWord8ArrayAs# ByteArray#
ba# Int#
i# = Word16# -> Word16
W16# (ByteArray# -> Int# -> Word16#
indexWord8ArrayAsWord16# ByteArray#
ba# Int#
i#)
word16ToWord8# :: Word16# -> Word8#
{-# INLINE word16ToWord8# #-}
word16ToWord8# :: Word16# -> Word8#
word16ToWord8# Word16#
w# = Word# -> Word8#
wordToWord8# (Word16# -> Word#
word16ToWord# Word16#
w#)
word8ToWord16# :: Word8# -> Word16#
{-# INLINE word8ToWord16# #-}
word8ToWord16# :: Word8# -> Word16#
word8ToWord16# Word8#
w# = Word# -> Word16#
wordToWord16# (Word8# -> Word#
word8ToWord# Word8#
w#)
instance Unaligned (LE Word16) where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize (LE Word16)
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
2
#if defined(WORDS_BIGENDIAN)
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# mba# i# (LE (W16# x#)) s0 =
let s1 = writeWord8Array# mba# i# (word16ToWord8# x#) s0
in writeWord8Array# mba# (i# +# 1#) (word16ToWord8# (uncheckedShiftRLWord16# x# 8#)) s1
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# mba# i# s0 =
let !(# s1, w1# #) = readWord8Array# mba# i# s0
!(# s2, w2# #) = readWord8Array# mba# (i# +# 1#) s1
in (# s2, LE (W16# (uncheckedShiftRLWord16# (word8ToWord16# w2#) 8# `orWord16#` (word8ToWord16# w1#))) #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# ba# i# =
let w1# = indexWord8Array# ba# i#
w2# = indexWord8Array# ba# (i# +# 1#)
in LE (W16# (uncheckedShiftRLWord16# (word8ToWord16# w2#) 8# `orWord16#` (word8ToWord16# w1#)))
#else
USE_HOST_IMPL(LE)
#endif
instance Unaligned (BE Word16) where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize (BE Word16)
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
2
#if defined(WORDS_BIGENDIAN)
USE_HOST_IMPL(BE)
#else
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> BE Word16 -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (BE (W16# Word16#
x#)) State# s
s0 =
let s1 :: State# s
s1 = forall d.
MutableByteArray# d -> Int# -> Word8# -> State# d -> State# d
writeWord8Array# MutableByteArray# s
mba# Int#
i# (Word16# -> Word8#
word16ToWord8# (Word16# -> Int# -> Word16#
uncheckedShiftRLWord16# Word16#
x# Int#
8#)) State# s
s0
in forall d.
MutableByteArray# d -> Int# -> Word8# -> State# d -> State# d
writeWord8Array# MutableByteArray# s
mba# (Int#
i# Int# -> Int# -> Int#
+# Int#
1#) (Word16# -> Word8#
word16ToWord8# Word16#
x#) State# s
s1
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# :: forall s.
MutableByteArray# s
-> Int# -> State# s -> (# State# s, BE Word16 #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0 =
let !(# State# s
s1, Word8#
w1# #) = forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Word8# #)
readWord8Array# MutableByteArray# s
mba# Int#
i# State# s
s0
!(# State# s
s2, Word8#
w2# #) = forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Word8# #)
readWord8Array# MutableByteArray# s
mba# (Int#
i# Int# -> Int# -> Int#
+# Int#
1#) State# s
s1
in (# State# s
s2, forall a. a -> BE a
BE (Word16# -> Word16
W16# (Word16# -> Int# -> Word16#
uncheckedShiftLWord16# (Word8# -> Word16#
word8ToWord16# Word8#
w1#) Int#
8# Word16# -> Word16# -> Word16#
`orWord16#` (Word8# -> Word16#
word8ToWord16# Word8#
w2#))) #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# :: ByteArray# -> Int# -> BE Word16
indexWord8ArrayAs# ByteArray#
ba# Int#
i# =
let w1# :: Word8#
w1# = ByteArray# -> Int# -> Word8#
indexWord8Array# ByteArray#
ba# Int#
i#
w2# :: Word8#
w2# = ByteArray# -> Int# -> Word8#
indexWord8Array# ByteArray#
ba# (Int#
i# Int# -> Int# -> Int#
+# Int#
1#)
in forall a. a -> BE a
BE (Word16# -> Word16
W16# (Word16# -> Int# -> Word16#
uncheckedShiftLWord16# (Word8# -> Word16#
word8ToWord16# Word8#
w1#) Int#
8# Word16# -> Word16# -> Word16#
`orWord16#` (Word8# -> Word16#
word8ToWord16# Word8#
w2#)))
#endif
instance Unaligned Word32 where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize Word32
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
4
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> Word32 -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (W32# Word32#
x#) State# s
s0 = forall d.
MutableByteArray# d -> Int# -> Word32# -> State# d -> State# d
writeWord8ArrayAsWord32# MutableByteArray# s
mba# Int#
i# Word32#
x# State# s
s0
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Word32 #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0 =
let !(# State# s
s1, Word32#
x# #) = forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Word32# #)
readWord8ArrayAsWord32# MutableByteArray# s
mba# Int#
i# State# s
s0 in (# State# s
s1, Word32# -> Word32
W32# Word32#
x# #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# :: ByteArray# -> Int# -> Word32
indexWord8ArrayAs# ByteArray#
ba# Int#
i# = Word32# -> Word32
W32# (ByteArray# -> Int# -> Word32#
indexWord8ArrayAsWord32# ByteArray#
ba# Int#
i#)
instance Unaligned (LE Word32) where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize (LE Word32)
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
4
#if defined(WORDS_BIGENDIAN)
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# mba# i# (LE w) s0 = writeWord8ArrayAs# mba# i# (byteSwap32 w) s0
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# mba# i# s0 =
let !(# s1, x# #) = readWord8ArrayAsWord32# mba# i# s0
in (# s1, LE (byteSwap32 (W32# x#)) #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# ba# i# = LE (byteSwap32 (W32# (indexWord8ArrayAsWord32# ba# i#)))
#else
USE_HOST_IMPL(LE)
#endif
instance Unaligned (BE Word32) where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize (BE Word32)
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
4
#if defined(WORDS_BIGENDIAN) || defined(USE_SHIFT)
USE_HOST_IMPL(BE)
#else
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> BE Word32 -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (BE Word32
x) State# s
s0 = forall a s.
Unaligned a =>
MutableByteArray# s -> Int# -> a -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (Word32 -> Word32
byteSwap32 Word32
x) State# s
s0
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# :: forall s.
MutableByteArray# s
-> Int# -> State# s -> (# State# s, BE Word32 #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0 =
let !(# State# s
s1, Word32#
x# #) = forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Word32# #)
readWord8ArrayAsWord32# MutableByteArray# s
mba# Int#
i# State# s
s0
in (# State# s
s1, forall a. a -> BE a
BE (Word32 -> Word32
byteSwap32 (Word32# -> Word32
W32# Word32#
x#)) #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# :: ByteArray# -> Int# -> BE Word32
indexWord8ArrayAs# ByteArray#
ba# Int#
i# = forall a. a -> BE a
BE (Word32 -> Word32
byteSwap32 (Word32# -> Word32
W32# (ByteArray# -> Int# -> Word32#
indexWord8ArrayAsWord32# ByteArray#
ba# Int#
i#)))
#endif
instance Unaligned Word64 where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize Word64
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
8
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> Word64 -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (W64# Word#
x#) State# s
s0 = forall d.
MutableByteArray# d -> Int# -> Word# -> State# d -> State# d
writeWord8ArrayAsWord64# MutableByteArray# s
mba# Int#
i# Word#
x# State# s
s0
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Word64 #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0 =
let !(# State# s
s1, Word#
x# #) = forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Word# #)
readWord8ArrayAsWord64# MutableByteArray# s
mba# Int#
i# State# s
s0 in (# State# s
s1, Word# -> Word64
W64# Word#
x# #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# :: ByteArray# -> Int# -> Word64
indexWord8ArrayAs# ByteArray#
ba# Int#
i# = Word# -> Word64
W64# (ByteArray# -> Int# -> Word#
indexWord8ArrayAsWord64# ByteArray#
ba# Int#
i#)
instance Unaligned (LE Word64) where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize (LE Word64)
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
8
#if defined(WORDS_BIGENDIAN)
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# mba# i# (LE w) s0 = writeWord8ArrayAs# mba# i# (byteSwap64 w) s0
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# mba# i# s0 =
let !(# s1, x# #) = readWord8ArrayAsWord64# mba# i# s0
in (# s1, LE (byteSwap64 (W64# x#)) #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# ba# i# = LE (byteSwap64 (W64# (indexWord8ArrayAsWord64# ba# i#)))
#else
USE_HOST_IMPL(LE)
#endif
instance Unaligned (BE Word64) where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize (BE Word64)
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
8
#if defined(WORDS_BIGENDIAN) || defined(USE_SHIFT)
USE_HOST_IMPL(BE)
#else
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> BE Word64 -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (BE Word64
x) State# s
s0 = forall a s.
Unaligned a =>
MutableByteArray# s -> Int# -> a -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (Word64 -> Word64
byteSwap64 Word64
x) State# s
s0
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# :: forall s.
MutableByteArray# s
-> Int# -> State# s -> (# State# s, BE Word64 #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0 =
let !(# State# s
s1, Word#
x# #) = forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Word# #)
readWord8ArrayAsWord64# MutableByteArray# s
mba# Int#
i# State# s
s0
in (# State# s
s1, forall a. a -> BE a
BE (Word64 -> Word64
byteSwap64 (Word# -> Word64
W64# Word#
x#)) #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# :: ByteArray# -> Int# -> BE Word64
indexWord8ArrayAs# ByteArray#
ba# Int#
i# = forall a. a -> BE a
BE (Word64 -> Word64
byteSwap64 (Word# -> Word64
W64# (ByteArray# -> Int# -> Word#
indexWord8ArrayAsWord64# ByteArray#
ba# Int#
i#)))
#endif
instance Unaligned Word where
#if SIZEOF_HSWORD == 4
{-# INLINE unalignedSize #-}
unalignedSize = UnalignedSize 4
#else
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize Word
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
8
#endif
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> Word -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (W# Word#
x#) State# s
s0 = forall d.
MutableByteArray# d -> Int# -> Word# -> State# d -> State# d
writeWord8ArrayAsWord# MutableByteArray# s
mba# Int#
i# Word#
x# State# s
s0
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Word #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0 =
let !(# State# s
s1, Word#
x# #) = forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Word# #)
readWord8ArrayAsWord# MutableByteArray# s
mba# Int#
i# State# s
s0 in (# State# s
s1, Word# -> Word
W# Word#
x# #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# :: ByteArray# -> Int# -> Word
indexWord8ArrayAs# ByteArray#
ba# Int#
i# = Word# -> Word
W# (ByteArray# -> Int# -> Word#
indexWord8ArrayAsWord# ByteArray#
ba# Int#
i#)
instance Unaligned (LE Word) where
#if SIZEOF_HSWORD == 4
{-# INLINE unalignedSize #-}
unalignedSize = UnalignedSize 4
#else
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize (LE Word)
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
8
#endif
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> LE Word -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (LE (W# Word#
x#)) State# s
s0 = forall d.
MutableByteArray# d -> Int# -> Word# -> State# d -> State# d
writeWord8ArrayAsWord# MutableByteArray# s
mba# Int#
i# (Word# -> Word#
byteSwap# Word#
x#) State# s
s0
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, LE Word #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0 =
let !(# State# s
s1, Word#
x# #) = forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Word# #)
readWord8ArrayAsWord# MutableByteArray# s
mba# Int#
i# State# s
s0 in (# State# s
s1, forall a. a -> LE a
LE (Word# -> Word
W# (Word# -> Word#
byteSwap# Word#
x#)) #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# :: ByteArray# -> Int# -> LE Word
indexWord8ArrayAs# ByteArray#
ba# Int#
i# = forall a. a -> LE a
LE (Word# -> Word
W# (Word# -> Word#
byteSwap# (ByteArray# -> Int# -> Word#
indexWord8ArrayAsWord# ByteArray#
ba# Int#
i#)))
instance Unaligned (BE Word) where
#if SIZEOF_HSWORD == 4
{-# INLINE unalignedSize #-}
unalignedSize = UnalignedSize 4
#else
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize (BE Word)
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
8
#endif
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> BE Word -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (BE (W# Word#
x#)) State# s
s0 = forall d.
MutableByteArray# d -> Int# -> Word# -> State# d -> State# d
writeWord8ArrayAsWord# MutableByteArray# s
mba# Int#
i# (Word# -> Word#
byteSwap# Word#
x#) State# s
s0
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, BE Word #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0 =
let !(# State# s
s1, Word#
x# #) = forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Word# #)
readWord8ArrayAsWord# MutableByteArray# s
mba# Int#
i# State# s
s0 in (# State# s
s1, forall a. a -> BE a
BE (Word# -> Word
W# (Word# -> Word#
byteSwap# Word#
x#)) #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# :: ByteArray# -> Int# -> BE Word
indexWord8ArrayAs# ByteArray#
ba# Int#
i# = forall a. a -> BE a
BE (Word# -> Word
W# (Word# -> Word#
byteSwap# (ByteArray# -> Int# -> Word#
indexWord8ArrayAsWord# ByteArray#
ba# Int#
i#)))
instance Unaligned Int16 where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize Int16
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
2
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> Int16 -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (I16# Int16#
x#) = forall d.
MutableByteArray# d -> Int# -> Int16# -> State# d -> State# d
writeWord8ArrayAsInt16# MutableByteArray# s
mba# Int#
i# Int16#
x#
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Int16 #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0 =
let !(# State# s
s1, Int16#
x# #) = forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Int16# #)
readWord8ArrayAsInt16# MutableByteArray# s
mba# Int#
i# State# s
s0 in (# State# s
s1, Int16# -> Int16
I16# Int16#
x# #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# :: ByteArray# -> Int# -> Int16
indexWord8ArrayAs# ByteArray#
ba# Int#
i# = Int16# -> Int16
I16# (ByteArray# -> Int# -> Int16#
indexWord8ArrayAsInt16# ByteArray#
ba# Int#
i#)
int16ToWord8# :: Int16# -> Word8#
{-# INLINE int16ToWord8# #-}
int16ToWord8# :: Int16# -> Word8#
int16ToWord8# Int16#
w# = Word# -> Word8#
wordToWord8# (Word16# -> Word#
word16ToWord# (Int16# -> Word16#
int16ToWord16# Int16#
w#))
instance Unaligned (LE Int16) where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize (LE Int16)
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
2
#if defined(WORDS_BIGENDIAN)
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# mba# i# (LE (I16# x#)) s0 =
let s1 = writeWord8Array# mba# i# (int16ToWord8# x#) s0
in writeWord8Array# mba# (i# +# 1#) (int16ToWord8# (uncheckedShiftRLInt16# x# 8#)) s1
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# mba# i# s0 =
let !(# s1, w1# #) = readWord8Array# mba# i# s0
!(# s2, w2# #) = readWord8Array# mba# (i# +# 1#) s1
in (# s2, LE (I16# (word16ToInt16# (uncheckedShiftRLWord16# (word8ToWord16# w2#) 8# `orWord16#` (word8ToWord16# w1#)))) #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# ba# i# =
let w1# = indexWord8Array# ba# i#
w2# = indexWord8Array# ba# (i# +# 1#)
in LE (I16# (word16ToInt16# (uncheckedShiftRLWord16# (word8ToWord16# w2#) 8# `orWord16#` (word8ToWord16# w1#))))
#else
USE_HOST_IMPL(LE)
#endif
instance Unaligned (BE Int16) where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize (BE Int16)
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
2
#if defined(WORDS_BIGENDIAN)
USE_HOST_IMPL(BE)
#else
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> BE Int16 -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (BE (I16# Int16#
x#)) State# s
s0 =
let s1 :: State# s
s1 = forall d.
MutableByteArray# d -> Int# -> Word8# -> State# d -> State# d
writeWord8Array# MutableByteArray# s
mba# Int#
i# (Int16# -> Word8#
int16ToWord8# (Int16# -> Int# -> Int16#
uncheckedShiftRLInt16# Int16#
x# Int#
8#)) State# s
s0
in forall d.
MutableByteArray# d -> Int# -> Word8# -> State# d -> State# d
writeWord8Array# MutableByteArray# s
mba# (Int#
i# Int# -> Int# -> Int#
+# Int#
1#) (Int16# -> Word8#
int16ToWord8# Int16#
x#) State# s
s1
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, BE Int16 #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0 =
let !(# State# s
s1, Word8#
w1# #) = forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Word8# #)
readWord8Array# MutableByteArray# s
mba# Int#
i# State# s
s0
!(# State# s
s2, Word8#
w2# #) = forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Word8# #)
readWord8Array# MutableByteArray# s
mba# (Int#
i# Int# -> Int# -> Int#
+# Int#
1#) State# s
s1
in (# State# s
s2, forall a. a -> BE a
BE (Int16# -> Int16
I16# (Word16# -> Int16#
word16ToInt16# (Word16# -> Int# -> Word16#
uncheckedShiftLWord16# (Word8# -> Word16#
word8ToWord16# Word8#
w1#) Int#
8# Word16# -> Word16# -> Word16#
`orWord16#` (Word8# -> Word16#
word8ToWord16# Word8#
w2#)))) #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# :: ByteArray# -> Int# -> BE Int16
indexWord8ArrayAs# ByteArray#
ba# Int#
i# =
let w1# :: Word8#
w1# = ByteArray# -> Int# -> Word8#
indexWord8Array# ByteArray#
ba# Int#
i#
w2# :: Word8#
w2# = ByteArray# -> Int# -> Word8#
indexWord8Array# ByteArray#
ba# (Int#
i# Int# -> Int# -> Int#
+# Int#
1#)
in forall a. a -> BE a
BE (Int16# -> Int16
I16# (Word16# -> Int16#
word16ToInt16# (Word16# -> Int# -> Word16#
uncheckedShiftLWord16# (Word8# -> Word16#
word8ToWord16# Word8#
w1#) Int#
8# Word16# -> Word16# -> Word16#
`orWord16#` (Word8# -> Word16#
word8ToWord16# Word8#
w2#))))
#endif
instance Unaligned Int32 where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize Int32
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
4
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> Int32 -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (I32# Int32#
x#) State# s
s0 = forall d.
MutableByteArray# d -> Int# -> Int32# -> State# d -> State# d
writeWord8ArrayAsInt32# MutableByteArray# s
mba# Int#
i# Int32#
x# State# s
s0
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Int32 #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0 =
let !(# State# s
s1, Int32#
x# #) = forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Int32# #)
readWord8ArrayAsInt32# MutableByteArray# s
mba# Int#
i# State# s
s0 in (# State# s
s1, Int32# -> Int32
I32# Int32#
x# #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# :: ByteArray# -> Int# -> Int32
indexWord8ArrayAs# ByteArray#
ba# Int#
i# = Int32# -> Int32
I32# (ByteArray# -> Int# -> Int32#
indexWord8ArrayAsInt32# ByteArray#
ba# Int#
i#)
byteSwapInt32 :: Int32 -> Int32
{-# INLINE byteSwapInt32 #-}
byteSwapInt32 :: Int32 -> Int32
byteSwapInt32 Int32
i = forall a b. (Integral a, Num b) => a -> b
fromIntegral (Word32 -> Word32
byteSwap32 (forall a b. (Integral a, Num b) => a -> b
fromIntegral Int32
i))
instance Unaligned (LE Int32) where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize (LE Int32)
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
4
#if defined(WORDS_BIGENDIAN)
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# mba# i# (LE w) s0 = writeWord8ArrayAs# mba# i# (byteSwapInt32 w) s0
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# mba# i# s0 =
let !(# s1, x# #) = readWord8ArrayAsWord32# mba# i# s0
in (# s1, LE (byteSwapInt32 (I32# x#)) #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# ba# i# = LE (byteSwapInt32 (I32# (indexWord8ArrayAsInt32# ba# i#)))
#else
USE_HOST_IMPL(LE)
#endif
instance Unaligned (BE Int32) where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize (BE Int32)
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
4
#if defined(WORDS_BIGENDIAN) || defined(USE_SHIFT)
USE_HOST_IMPL(BE)
#else
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> BE Int32 -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (BE Int32
x) State# s
s0 = forall a s.
Unaligned a =>
MutableByteArray# s -> Int# -> a -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (Int32 -> Int32
byteSwapInt32 Int32
x) State# s
s0
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, BE Int32 #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0 =
let !(# State# s
s1, Int32#
x# #) = forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Int32# #)
readWord8ArrayAsInt32# MutableByteArray# s
mba# Int#
i# State# s
s0
in (# State# s
s1, forall a. a -> BE a
BE (Int32 -> Int32
byteSwapInt32 (Int32# -> Int32
I32# Int32#
x#)) #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# :: ByteArray# -> Int# -> BE Int32
indexWord8ArrayAs# ByteArray#
ba# Int#
i# = forall a. a -> BE a
BE (Int32 -> Int32
byteSwapInt32 (Int32# -> Int32
I32# (ByteArray# -> Int# -> Int32#
indexWord8ArrayAsInt32# ByteArray#
ba# Int#
i#)))
#endif
instance Unaligned Int64 where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize Int64
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
8
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> Int64 -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (I64# Int#
x#) State# s
s0 = forall d.
MutableByteArray# d -> Int# -> Int# -> State# d -> State# d
writeWord8ArrayAsInt64# MutableByteArray# s
mba# Int#
i# Int#
x# State# s
s0
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Int64 #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0 =
let !(# State# s
s1, Int#
x# #) = forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Int# #)
readWord8ArrayAsInt64# MutableByteArray# s
mba# Int#
i# State# s
s0 in (# State# s
s1, Int# -> Int64
I64# Int#
x# #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# :: ByteArray# -> Int# -> Int64
indexWord8ArrayAs# ByteArray#
ba# Int#
i# = Int# -> Int64
I64# (ByteArray# -> Int# -> Int#
indexWord8ArrayAsInt64# ByteArray#
ba# Int#
i#)
byteSwapInt64 :: Int64 -> Int64
{-# INLINE byteSwapInt64 #-}
byteSwapInt64 :: Int64 -> Int64
byteSwapInt64 Int64
i = forall a b. (Integral a, Num b) => a -> b
fromIntegral (Word64 -> Word64
byteSwap64 (forall a b. (Integral a, Num b) => a -> b
fromIntegral Int64
i))
instance Unaligned (LE Int64) where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize (LE Int64)
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
8
#if defined(WORDS_BIGENDIAN)
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# mba# i# (LE w) s0 = writeWord8ArrayAs# mba# i# (byteSwapInt64 w) s0
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# mba# i# s0 =
let !(# s1, x# #) = readWord8ArrayAsInt64# mba# i# s0
in (# s1, LE (byteSwapInt64 (I64# x#)) #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# ba# i# = LE (byteSwapInt64 (I64# (indexWord8ArrayAsInt64# ba# i#)))
#else
USE_HOST_IMPL(LE)
#endif
instance Unaligned (BE Int64) where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize (BE Int64)
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
8
#if defined(WORDS_BIGENDIAN) || defined(USE_SHIFT)
USE_HOST_IMPL(BE)
#else
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> BE Int64 -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (BE Int64
x) State# s
s0 = forall a s.
Unaligned a =>
MutableByteArray# s -> Int# -> a -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (Int64 -> Int64
byteSwapInt64 Int64
x) State# s
s0
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, BE Int64 #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0 =
let !(# State# s
s1, Int#
x# #) = forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Int# #)
readWord8ArrayAsInt64# MutableByteArray# s
mba# Int#
i# State# s
s0
in (# State# s
s1, forall a. a -> BE a
BE (Int64 -> Int64
byteSwapInt64 (Int# -> Int64
I64# Int#
x#)) #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# :: ByteArray# -> Int# -> BE Int64
indexWord8ArrayAs# ByteArray#
ba# Int#
i# = forall a. a -> BE a
BE (Int64 -> Int64
byteSwapInt64 (Int# -> Int64
I64# (ByteArray# -> Int# -> Int#
indexWord8ArrayAsInt64# ByteArray#
ba# Int#
i#)))
#endif
instance Unaligned Int where
#if SIZEOF_HSWORD == 4
{-# INLINE unalignedSize #-}
unalignedSize = UnalignedSize 4
#else
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize Int
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
8
#endif
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> Int -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (I# Int#
x#) State# s
s0 = forall d.
MutableByteArray# d -> Int# -> Int# -> State# d -> State# d
writeWord8ArrayAsInt# MutableByteArray# s
mba# Int#
i# Int#
x# State# s
s0
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Int #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0 =
let !(# State# s
s1, Int#
x# #) = forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Int# #)
readWord8ArrayAsInt# MutableByteArray# s
mba# Int#
i# State# s
s0 in (# State# s
s1, Int# -> Int
I# Int#
x# #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# :: ByteArray# -> Int# -> Int
indexWord8ArrayAs# ByteArray#
ba# Int#
i# = Int# -> Int
I# (ByteArray# -> Int# -> Int#
indexWord8ArrayAsInt# ByteArray#
ba# Int#
i#)
byteSwapInt :: Int -> Int
{-# INLINE byteSwapInt #-}
byteSwapInt :: Int -> Int
byteSwapInt (I# Int#
i#) = Int# -> Int
I# (Word# -> Int#
word2Int# (Word# -> Word#
byteSwap# (Int# -> Word#
int2Word# Int#
i#)))
instance Unaligned (LE Int) where
#if SIZEOF_HSWORD == 4
{-# INLINE unalignedSize #-}
unalignedSize = UnalignedSize 4
#else
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize (LE Int)
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
8
#endif
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> LE Int -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (LE Int
x) State# s
s0 = forall a s.
Unaligned a =>
MutableByteArray# s -> Int# -> a -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (Int -> Int
byteSwapInt Int
x) State# s
s0
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, LE Int #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0 =
let !(# State# s
s1, Int
x #) = forall a s.
Unaligned a =>
MutableByteArray# s -> Int# -> State# s -> (# State# s, a #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0 in (# State# s
s1, forall a. a -> LE a
LE (Int -> Int
byteSwapInt Int
x) #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# :: ByteArray# -> Int# -> LE Int
indexWord8ArrayAs# ByteArray#
ba# Int#
i# = forall a. a -> LE a
LE (Int -> Int
byteSwapInt (forall a. Unaligned a => ByteArray# -> Int# -> a
indexWord8ArrayAs# ByteArray#
ba# Int#
i#))
instance Unaligned (BE Int) where
#if SIZEOF_HSWORD == 4
{-# INLINE unalignedSize #-}
unalignedSize = UnalignedSize 4
#else
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize (BE Int)
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
8
#endif
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> BE Int -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (BE Int
x) State# s
s0 = forall a s.
Unaligned a =>
MutableByteArray# s -> Int# -> a -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (Int -> Int
byteSwapInt Int
x) State# s
s0
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, BE Int #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0 =
let !(# State# s
s1, Int
x #) = forall a s.
Unaligned a =>
MutableByteArray# s -> Int# -> State# s -> (# State# s, a #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0 in (# State# s
s1, forall a. a -> BE a
BE (Int -> Int
byteSwapInt Int
x) #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# :: ByteArray# -> Int# -> BE Int
indexWord8ArrayAs# ByteArray#
ba# Int#
i# = forall a. a -> BE a
BE (Int -> Int
byteSwapInt (forall a. Unaligned a => ByteArray# -> Int# -> a
indexWord8ArrayAs# ByteArray#
ba# Int#
i#))
instance Unaligned (Ptr a) where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize (Ptr a)
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize SIZEOF_HSPTR
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> Ptr a -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (Ptr Addr#
x#) = forall d.
MutableByteArray# d -> Int# -> Addr# -> State# d -> State# d
writeWord8ArrayAsAddr# MutableByteArray# s
mba# Int#
i# Addr#
x#
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Ptr a #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0 =
let !(# State# s
s1, Addr#
x# #) = forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Addr# #)
readWord8ArrayAsAddr# MutableByteArray# s
mba# Int#
i# State# s
s0 in (# State# s
s1, forall a. Addr# -> Ptr a
Ptr Addr#
x# #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# :: ByteArray# -> Int# -> Ptr a
indexWord8ArrayAs# ByteArray#
ba# Int#
i# = forall a. Addr# -> Ptr a
Ptr (ByteArray# -> Int# -> Addr#
indexWord8ArrayAsAddr# ByteArray#
ba# Int#
i#)
instance Unaligned Float where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize Float
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
4
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> Float -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (F# Float#
x#) = forall d.
MutableByteArray# d -> Int# -> Float# -> State# d -> State# d
writeWord8ArrayAsFloat# MutableByteArray# s
mba# Int#
i# Float#
x#
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Float #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0 =
let !(# State# s
s1, Float#
x# #) = forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Float# #)
readWord8ArrayAsFloat# MutableByteArray# s
mba# Int#
i# State# s
s0 in (# State# s
s1, Float# -> Float
F# Float#
x# #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# :: ByteArray# -> Int# -> Float
indexWord8ArrayAs# ByteArray#
ba# Int#
i# = Float# -> Float
F# (ByteArray# -> Int# -> Float#
indexWord8ArrayAsFloat# ByteArray#
ba# Int#
i#)
instance Unaligned (LE Float) where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize (LE Float)
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
4
#if defined(WORDS_BIGENDIAN)
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# mba# i# (LE (F# x#)) =
writeWord8ArrayAs# mba# i# (LE (W32# (stgFloatToWord32 x#)))
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# mba# i# s0 =
let !(# s1, LE (W32# x#) #) = readWord8ArrayAs# mba# i# s0
in (# s1, LE (F# (stgWord32ToFloat x#)) #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# ba# i# =
let LE (W32# x#) = indexWord8ArrayAs# ba# i#
in LE (F# (stgWord32ToFloat x#))
#else
USE_HOST_IMPL(LE)
#endif
instance Unaligned (BE Float) where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize (BE Float)
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
4
#if defined(WORDS_BIGENDIAN)
USE_HOST_IMPL(BE)
#else
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> BE Float -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (BE (F# Float#
x#)) =
forall a s.
Unaligned a =>
MutableByteArray# s -> Int# -> a -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (forall a. a -> BE a
BE (Word32# -> Word32
W32# (Float# -> Word32#
stgFloatToWord32 Float#
x#)))
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, BE Float #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0 =
let !(# State# s
s1, BE (W32# Word32#
x#) #) = forall a s.
Unaligned a =>
MutableByteArray# s -> Int# -> State# s -> (# State# s, a #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0
in (# State# s
s1, forall a. a -> BE a
BE (Float# -> Float
F# (Word32# -> Float#
stgWord32ToFloat Word32#
x#)) #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# :: ByteArray# -> Int# -> BE Float
indexWord8ArrayAs# ByteArray#
ba# Int#
i# =
let !(BE (W32# Word32#
x#)) = forall a. Unaligned a => ByteArray# -> Int# -> a
indexWord8ArrayAs# ByteArray#
ba# Int#
i#
in forall a. a -> BE a
BE (Float# -> Float
F# (Word32# -> Float#
stgWord32ToFloat Word32#
x#))
#endif
instance Unaligned Double where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize Double
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
8
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> Double -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (D# Double#
x#) = forall d.
MutableByteArray# d -> Int# -> Double# -> State# d -> State# d
writeWord8ArrayAsDouble# MutableByteArray# s
mba# Int#
i# Double#
x#
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Double #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0 =
let !(# State# s
s1, Double#
x# #) = forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Double# #)
readWord8ArrayAsDouble# MutableByteArray# s
mba# Int#
i# State# s
s0 in (# State# s
s1, Double# -> Double
D# Double#
x# #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# :: ByteArray# -> Int# -> Double
indexWord8ArrayAs# ByteArray#
ba# Int#
i# = Double# -> Double
D# (ByteArray# -> Int# -> Double#
indexWord8ArrayAsDouble# ByteArray#
ba# Int#
i#)
instance Unaligned (LE Double) where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize (LE Double)
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
8
#if defined(WORDS_BIGENDIAN)
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# mba# i# (LE (D# x#)) =
writeWord8ArrayAs# mba# i# (LE (W64# (stgDoubleToWord64 x#)))
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# mba# i# s0 =
let !(# s1, LE (W64# x#) #) = readWord8ArrayAs# mba# i# s0
in (# s1, LE (D# (stgWord64ToDouble x#)) #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# ba# i# =
let LE (W64# x#) = indexWord8ArrayAs# ba# i#
in LE (D# (stgWord64ToDouble x#))
#else
USE_HOST_IMPL(LE)
#endif
instance Unaligned (BE Double) where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize (BE Double)
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
8
#if defined(WORDS_BIGENDIAN)
USE_HOST_IMPL(BE)
#else
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> BE Double -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (BE (D# Double#
x#)) =
forall a s.
Unaligned a =>
MutableByteArray# s -> Int# -> a -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (forall a. a -> BE a
BE (Word# -> Word64
W64# (Double# -> Word#
stgDoubleToWord64 Double#
x#)))
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# :: forall s.
MutableByteArray# s
-> Int# -> State# s -> (# State# s, BE Double #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0 =
let !(# State# s
s1, BE (W64# Word#
x#) #) = forall a s.
Unaligned a =>
MutableByteArray# s -> Int# -> State# s -> (# State# s, a #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0
in (# State# s
s1, forall a. a -> BE a
BE (Double# -> Double
D# (Word# -> Double#
stgWord64ToDouble Word#
x#)) #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# :: ByteArray# -> Int# -> BE Double
indexWord8ArrayAs# ByteArray#
ba# Int#
i# =
let !(BE (W64# Word#
x#)) = forall a. Unaligned a => ByteArray# -> Int# -> a
indexWord8ArrayAs# ByteArray#
ba# Int#
i#
in forall a. a -> BE a
BE (Double# -> Double
D# (Word# -> Double#
stgWord64ToDouble Word#
x#))
#endif
instance Unaligned Char where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize Char
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
4
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> Char -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (C# Char#
x#) = forall d.
MutableByteArray# d -> Int# -> Char# -> State# d -> State# d
writeWord8ArrayAsWideChar# MutableByteArray# s
mba# Int#
i# Char#
x#
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, Char #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0 =
let !(# State# s
s1, Char#
x# #) = forall d.
MutableByteArray# d -> Int# -> State# d -> (# State# d, Char# #)
readWord8ArrayAsWideChar# MutableByteArray# s
mba# Int#
i# State# s
s0 in (# State# s
s1, Char# -> Char
C# Char#
x# #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# :: ByteArray# -> Int# -> Char
indexWord8ArrayAs# ByteArray#
ba# Int#
i# = Char# -> Char
C# (ByteArray# -> Int# -> Char#
indexWord8ArrayAsWideChar# ByteArray#
ba# Int#
i#)
instance Unaligned (LE Char) where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize (LE Char)
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
4
#if defined(WORDS_BIGENDIAN)
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# mba# i# (LE (C# x#)) =
writeWord8ArrayAs# mba# i# (LE (I32# (ord# x#)))
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# mba# i# s0 =
let !(# s1, LE (I32# x#) #) = readWord8ArrayAs# mba# i# s0
in (# s1, LE (C# (chr# x#)) #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# ba# i# =
let LE (I32# x#) = indexWord8ArrayAs# ba# i#
in LE (C# (chr# x#))
#else
USE_HOST_IMPL(LE)
#endif
instance Unaligned (BE Char) where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize (BE Char)
unalignedSize = forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize Int
4
#if defined(WORDS_BIGENDIAN)
USE_HOST_IMPL(BE)
#else
{-# INLINE writeWord8ArrayAs# #-}
writeWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> BE Char -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (BE (C# Char#
x#)) =
forall a s.
Unaligned a =>
MutableByteArray# s -> Int# -> a -> State# s -> State# s
writeWord8ArrayAs# MutableByteArray# s
mba# Int#
i# (forall a. a -> BE a
BE (Int32# -> Int32
I32# (Int# -> Int32#
intToInt32# (Char# -> Int#
ord# Char#
x#))))
{-# INLINE readWord8ArrayAs# #-}
readWord8ArrayAs# :: forall s.
MutableByteArray# s -> Int# -> State# s -> (# State# s, BE Char #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0 =
let !(# State# s
s1, BE (I32# Int32#
x#) #) = forall a s.
Unaligned a =>
MutableByteArray# s -> Int# -> State# s -> (# State# s, a #)
readWord8ArrayAs# MutableByteArray# s
mba# Int#
i# State# s
s0
in (# State# s
s1, forall a. a -> BE a
BE (Char# -> Char
C# (Int# -> Char#
chr# (Int32# -> Int#
int32ToInt# Int32#
x#))) #)
{-# INLINE indexWord8ArrayAs# #-}
indexWord8ArrayAs# :: ByteArray# -> Int# -> BE Char
indexWord8ArrayAs# ByteArray#
ba# Int#
i# =
let !(BE (I32# Int32#
x#)) = forall a. Unaligned a => ByteArray# -> Int# -> a
indexWord8ArrayAs# ByteArray#
ba# Int#
i#
in forall a. a -> BE a
BE (Char# -> Char
C# (Int# -> Char#
chr# (Int32# -> Int#
int32ToInt# Int32#
x#)))
#endif
instance (Unaligned a, Unaligned b) => Unaligned (a, b) where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize (a, b)
unalignedSize =
forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize ( forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @a)
forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @b)
)
{-# INLINE pokeMBA #-}
pokeMBA :: MutableByteArray# RealWorld -> Int -> (a, b) -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
i (a
a, b
b) = do
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
i a
a
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
j b
b
where
j :: Int
j = Int
i forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @a)
{-# INLINE peekMBA #-}
peekMBA :: MutableByteArray# RealWorld -> Int -> IO (a, b)
peekMBA MutableByteArray# RealWorld
mba# Int
i = do
!a
a <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
i
!b
b <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
j
forall (m :: * -> *) a. Monad m => a -> m a
return (a
a, b
b)
where
j :: Int
j = Int
i forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @a)
{-# INLINE indexBA #-}
indexBA :: ByteArray# -> Int -> (a, b)
indexBA ByteArray#
ba# Int
i =
let !a :: a
a = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
i
!b :: b
b = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
j
in (a
a, b
b)
where
j :: Int
j = Int
i forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @a)
instance (Unaligned a, Unaligned b, Unaligned c) => Unaligned (a, b, c) where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize (a, b, c)
unalignedSize =
forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize ( forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @a)
forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @b)
forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @c)
)
{-# INLINE pokeMBA #-}
pokeMBA :: MutableByteArray# RealWorld -> Int -> (a, b, c) -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
i (a
a, b
b, c
c) = do
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
i a
a
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
j b
b
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
k c
c
where
j :: Int
j = Int
i forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @a)
k :: Int
k = Int
j forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @b)
{-# INLINE peekMBA #-}
peekMBA :: MutableByteArray# RealWorld -> Int -> IO (a, b, c)
peekMBA MutableByteArray# RealWorld
mba# Int
i = do
!a
a <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
i
!b
b <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
j
!c
c <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
k
forall (m :: * -> *) a. Monad m => a -> m a
return (a
a, b
b, c
c)
where
j :: Int
j = Int
i forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @a)
k :: Int
k = Int
j forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @b)
{-# INLINE indexBA #-}
indexBA :: ByteArray# -> Int -> (a, b, c)
indexBA ByteArray#
ba# Int
i =
let !a :: a
a = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
i
!b :: b
b = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
j
!c :: c
c = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
k
in (a
a, b
b, c
c)
where
j :: Int
j = Int
i forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @a)
k :: Int
k = Int
j forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @b)
instance (Unaligned a, Unaligned b, Unaligned c, Unaligned d) => Unaligned (a, b, c, d) where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize (a, b, c, d)
unalignedSize =
forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize ( forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @a)
forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @b)
forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @c)
forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @d)
)
{-# INLINE pokeMBA #-}
pokeMBA :: MutableByteArray# RealWorld -> Int -> (a, b, c, d) -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
i (a
a, b
b, c
c, d
d) = do
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
i a
a
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
j b
b
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
k c
c
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
l d
d
where
j :: Int
j = Int
i forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @a)
k :: Int
k = Int
j forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @b)
l :: Int
l = Int
k forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @c)
{-# INLINE peekMBA #-}
peekMBA :: MutableByteArray# RealWorld -> Int -> IO (a, b, c, d)
peekMBA MutableByteArray# RealWorld
mba# Int
i = do
!a
a <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
i
!b
b <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
j
!c
c <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
k
!d
d <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
l
forall (m :: * -> *) a. Monad m => a -> m a
return (a
a, b
b, c
c, d
d)
where
j :: Int
j = Int
i forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @a)
k :: Int
k = Int
j forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @b)
l :: Int
l = Int
k forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @c)
{-# INLINE indexBA #-}
indexBA :: ByteArray# -> Int -> (a, b, c, d)
indexBA ByteArray#
ba# Int
i =
let !a :: a
a = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
i
!b :: b
b = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
j
!c :: c
c = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
k
!d :: d
d = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
l
in (a
a, b
b, c
c, d
d)
where
j :: Int
j = Int
i forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @a)
k :: Int
k = Int
j forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @b)
l :: Int
l = Int
k forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @c)
instance (Unaligned a, Unaligned b, Unaligned c, Unaligned d, Unaligned e) => Unaligned (a, b, c, d, e) where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize (a, b, c, d, e)
unalignedSize =
forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize ( forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @a)
forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @b)
forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @c)
forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @d)
forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @e)
)
{-# INLINE pokeMBA #-}
pokeMBA :: MutableByteArray# RealWorld -> Int -> (a, b, c, d, e) -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
i (a
a, b
b, c
c, d
d, e
e) = do
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
i a
a
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
j b
b
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
k c
c
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
l d
d
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
m e
e
where
j :: Int
j = Int
i forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @a)
k :: Int
k = Int
j forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @b)
l :: Int
l = Int
k forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @c)
m :: Int
m = Int
l forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @d)
{-# INLINE peekMBA #-}
peekMBA :: MutableByteArray# RealWorld -> Int -> IO (a, b, c, d, e)
peekMBA MutableByteArray# RealWorld
mba# Int
i = do
!a
a <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
i
!b
b <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
j
!c
c <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
k
!d
d <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
l
!e
e <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
m
forall (m :: * -> *) a. Monad m => a -> m a
return (a
a, b
b, c
c, d
d, e
e)
where
j :: Int
j = Int
i forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @a)
k :: Int
k = Int
j forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @b)
l :: Int
l = Int
k forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @c)
m :: Int
m = Int
l forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @d)
{-# INLINE indexBA #-}
indexBA :: ByteArray# -> Int -> (a, b, c, d, e)
indexBA ByteArray#
ba# Int
i =
let !a :: a
a = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
i
!b :: b
b = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
j
!c :: c
c = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
k
!d :: d
d = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
l
!e :: e
e = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
m
in (a
a, b
b, c
c, d
d, e
e)
where
j :: Int
j = Int
i forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @a)
k :: Int
k = Int
j forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @b)
l :: Int
l = Int
k forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @c)
m :: Int
m = Int
l forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @d)
instance (Unaligned a, Unaligned b, Unaligned c, Unaligned d, Unaligned e, Unaligned f) => Unaligned (a, b, c, d, e, f) where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize (a, b, c, d, e, f)
unalignedSize =
forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize ( forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @a)
forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @b)
forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @c)
forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @d)
forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @e)
forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @f)
)
{-# INLINE pokeMBA #-}
pokeMBA :: MutableByteArray# RealWorld -> Int -> (a, b, c, d, e, f) -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
i (a
a, b
b, c
c, d
d, e
e, f
f) = do
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
i a
a
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
j b
b
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
k c
c
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
l d
d
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
m e
e
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
n f
f
where
j :: Int
j = Int
i forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @a)
k :: Int
k = Int
j forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @b)
l :: Int
l = Int
k forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @c)
m :: Int
m = Int
l forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @d)
n :: Int
n = Int
m forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @e)
{-# INLINE peekMBA #-}
peekMBA :: MutableByteArray# RealWorld -> Int -> IO (a, b, c, d, e, f)
peekMBA MutableByteArray# RealWorld
mba# Int
i = do
!a
a <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
i
!b
b <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
j
!c
c <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
k
!d
d <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
l
!e
e <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
m
!f
f <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
n
forall (m :: * -> *) a. Monad m => a -> m a
return (a
a, b
b, c
c, d
d, e
e, f
f)
where
j :: Int
j = Int
i forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @a)
k :: Int
k = Int
j forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @b)
l :: Int
l = Int
k forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @c)
m :: Int
m = Int
l forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @d)
n :: Int
n = Int
m forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @e)
{-# INLINE indexBA #-}
indexBA :: ByteArray# -> Int -> (a, b, c, d, e, f)
indexBA ByteArray#
ba# Int
i =
let !a :: a
a = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
i
!b :: b
b = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
j
!c :: c
c = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
k
!d :: d
d = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
l
!e :: e
e = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
m
!f :: f
f = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
n
in (a
a, b
b, c
c, d
d, e
e, f
f)
where
j :: Int
j = Int
i forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @a)
k :: Int
k = Int
j forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @b)
l :: Int
l = Int
k forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @c)
m :: Int
m = Int
l forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @d)
n :: Int
n = Int
m forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @e)
instance (Unaligned a, Unaligned b, Unaligned c, Unaligned d, Unaligned e, Unaligned f, Unaligned g) => Unaligned (a, b, c, d, e, f, g) where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize (a, b, c, d, e, f, g)
unalignedSize =
forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize ( forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @a)
forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @b)
forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @c)
forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @d)
forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @e)
forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @f)
forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @g)
)
{-# INLINE pokeMBA #-}
pokeMBA :: MutableByteArray# RealWorld
-> Int -> (a, b, c, d, e, f, g) -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
i (a
a, b
b, c
c, d
d, e
e, f
f, g
g) = do
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
i a
a
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
j b
b
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
k c
c
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
l d
d
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
m e
e
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
n f
f
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
o g
g
where
j :: Int
j = Int
i forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @a)
k :: Int
k = Int
j forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @b)
l :: Int
l = Int
k forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @c)
m :: Int
m = Int
l forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @d)
n :: Int
n = Int
m forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @e)
o :: Int
o = Int
n forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @f)
{-# INLINE peekMBA #-}
peekMBA :: MutableByteArray# RealWorld -> Int -> IO (a, b, c, d, e, f, g)
peekMBA MutableByteArray# RealWorld
mba# Int
i = do
!a
a <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
i
!b
b <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
j
!c
c <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
k
!d
d <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
l
!e
e <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
m
!f
f <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
n
!g
g <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
o
forall (m :: * -> *) a. Monad m => a -> m a
return (a
a, b
b, c
c, d
d, e
e, f
f, g
g)
where
j :: Int
j = Int
i forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @a)
k :: Int
k = Int
j forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @b)
l :: Int
l = Int
k forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @c)
m :: Int
m = Int
l forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @d)
n :: Int
n = Int
m forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @e)
o :: Int
o = Int
n forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @f)
{-# INLINE indexBA #-}
indexBA :: ByteArray# -> Int -> (a, b, c, d, e, f, g)
indexBA ByteArray#
ba# Int
i =
let !a :: a
a = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
i
!b :: b
b = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
j
!c :: c
c = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
k
!d :: d
d = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
l
!e :: e
e = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
m
!f :: f
f = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
n
!g :: g
g = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
o
in (a
a, b
b, c
c, d
d, e
e, f
f, g
g)
where
j :: Int
j = Int
i forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @a)
k :: Int
k = Int
j forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @b)
l :: Int
l = Int
k forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @c)
m :: Int
m = Int
l forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @d)
n :: Int
n = Int
m forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @e)
o :: Int
o = Int
n forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @f)
instance (Unaligned a, Unaligned b, Unaligned c, Unaligned d, Unaligned e, Unaligned f, Unaligned g, Unaligned h) => Unaligned (a, b, c, d, e, f, g, h) where
{-# INLINE unalignedSize #-}
unalignedSize :: UnalignedSize (a, b, c, d, e, f, g, h)
unalignedSize =
forall {k} (a :: k). Int -> UnalignedSize a
UnalignedSize ( forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @a)
forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @b)
forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @c)
forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @d)
forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @e)
forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @f)
forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @g)
forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @h)
)
{-# INLINE pokeMBA #-}
pokeMBA :: MutableByteArray# RealWorld
-> Int -> (a, b, c, d, e, f, g, h) -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
i (a
a, b
b, c
c, d
d, e
e, f
f, g
g, h
h) = do
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
i a
a
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
j b
b
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
k c
c
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
l d
d
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
m e
e
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
n f
f
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
o g
g
forall a.
Unaligned a =>
MutableByteArray# RealWorld -> Int -> a -> IO ()
pokeMBA MutableByteArray# RealWorld
mba# Int
p h
h
where
j :: Int
j = Int
i forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @a)
k :: Int
k = Int
j forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @b)
l :: Int
l = Int
k forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @c)
m :: Int
m = Int
l forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @d)
n :: Int
n = Int
m forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @e)
o :: Int
o = Int
n forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @f)
p :: Int
p = Int
o forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @g)
{-# INLINE peekMBA #-}
peekMBA :: MutableByteArray# RealWorld -> Int -> IO (a, b, c, d, e, f, g, h)
peekMBA MutableByteArray# RealWorld
mba# Int
i = do
!a
a <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
i
!b
b <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
j
!c
c <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
k
!d
d <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
l
!e
e <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
m
!f
f <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
n
!g
g <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
o
!h
h <- forall a. Unaligned a => MutableByteArray# RealWorld -> Int -> IO a
peekMBA MutableByteArray# RealWorld
mba# Int
p
forall (m :: * -> *) a. Monad m => a -> m a
return (a
a, b
b, c
c, d
d, e
e, f
f, g
g, h
h)
where
j :: Int
j = Int
i forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @a)
k :: Int
k = Int
j forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @b)
l :: Int
l = Int
k forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @c)
m :: Int
m = Int
l forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @d)
n :: Int
n = Int
m forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @e)
o :: Int
o = Int
n forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @f)
p :: Int
p = Int
o forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @g)
{-# INLINE indexBA #-}
indexBA :: ByteArray# -> Int -> (a, b, c, d, e, f, g, h)
indexBA ByteArray#
ba# Int
i =
let !a :: a
a = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
i
!b :: b
b = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
j
!c :: c
c = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
k
!d :: d
d = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
l
!e :: e
e = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
m
!f :: f
f = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
n
!g :: g
g = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
o
!h :: h
h = forall a. Unaligned a => ByteArray# -> Int -> a
indexBA ByteArray#
ba# Int
p
in (a
a, b
b, c
c, d
d, e
e, f
f, g
g, h
h)
where
j :: Int
j = Int
i forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @a)
k :: Int
k = Int
j forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @b)
l :: Int
l = Int
k forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @c)
m :: Int
m = Int
l forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @d)
n :: Int
n = Int
m forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @e)
o :: Int
o = Int
n forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @f)
p :: Int
p = Int
o forall a. Num a => a -> a -> a
+ forall {k} (a :: k). UnalignedSize a -> Int
getUnalignedSize (forall a. Unaligned a => UnalignedSize a
unalignedSize @g)
deriving newtype instance Unaligned CChar
deriving newtype instance Unaligned CSChar
deriving newtype instance Unaligned CUChar
deriving newtype instance Unaligned CShort
deriving newtype instance Unaligned CUShort
deriving newtype instance Unaligned CInt
deriving newtype instance Unaligned CUInt
deriving newtype instance Unaligned CLong
deriving newtype instance Unaligned CULong
deriving newtype instance Unaligned CPtrdiff
deriving newtype instance Unaligned CSize
deriving newtype instance Unaligned CWchar
deriving newtype instance Unaligned CSigAtomic
deriving newtype instance Unaligned CLLong
deriving newtype instance Unaligned CULLong
deriving newtype instance Unaligned CBool
deriving newtype instance Unaligned CIntPtr
deriving newtype instance Unaligned CUIntPtr
deriving newtype instance Unaligned CIntMax
deriving newtype instance Unaligned CUIntMax
deriving newtype instance Unaligned CClock
deriving newtype instance Unaligned CTime
deriving newtype instance Unaligned CUSeconds
deriving newtype instance Unaligned CSUSeconds
deriving newtype instance Unaligned CFloat
deriving newtype instance Unaligned CDouble