packages feed

bytezap-1.0.0: src/Bytezap/Poke/Derived/Endian.hs

module Bytezap.Poke.Derived.Endian where

import Bytezap.Poke

import Data.Word
import Data.Int
import Raehik.Compat.Data.Int.ByteSwap
import GHC.ByteOrder ( ByteOrder(BigEndian, LittleEndian), targetByteOrder )

w16le, w16be :: Word16 -> Poke s
w16le = case targetByteOrder of LittleEndian -> prim
                                BigEndian    -> prim . byteSwap16
w16be = case targetByteOrder of LittleEndian -> prim . byteSwap16
                                BigEndian    -> prim

w32le, w32be :: Word32 -> Poke s
w32le = case targetByteOrder of LittleEndian -> prim
                                BigEndian    -> prim . byteSwap32
w32be = case targetByteOrder of LittleEndian -> prim . byteSwap32
                                BigEndian    -> prim

w64le, w64be :: Word64 -> Poke s
w64le = case targetByteOrder of LittleEndian -> prim
                                BigEndian    -> prim . byteSwap64
w64be = case targetByteOrder of LittleEndian -> prim . byteSwap64
                                BigEndian    -> prim

i16le, i16be ::  Int16 -> Poke s
i16le = case targetByteOrder of LittleEndian -> prim
                                BigEndian    -> prim . byteSwapI16
i16be = case targetByteOrder of LittleEndian -> prim . byteSwapI16
                                BigEndian    -> prim

i32le, i32be ::  Int32 -> Poke s
i32le = case targetByteOrder of LittleEndian -> prim
                                BigEndian    -> prim . byteSwapI32
i32be = case targetByteOrder of LittleEndian -> prim . byteSwapI32
                                BigEndian    -> prim

i64le, i64be ::  Int64 -> Poke s
i64le = case targetByteOrder of LittleEndian -> prim
                                BigEndian    -> prim . byteSwapI64
i64be = case targetByteOrder of LittleEndian -> prim . byteSwapI64
                                BigEndian    -> prim