{-# LANGUAGE TemplateHaskell, QuasiQuotes, DeriveDataTypeable, ScopedTypeVariables, MultiParamTypeClasses,
FlexibleInstances, TypeSynonymInstances, UndecidableInstances #-}
{-# OPTIONS_HADDOCK prune #-}
module Language.Pads.Library.Native where
import Language.Pads.Padsc
import Language.Pads.Library.BinaryUtilities
import qualified Data.Int
import qualified Data.Word
import Data.ByteString as B
type Int8 = Data.Int.Int8
[pads| obtain Int8 from Bytes 1 using <|(bToi8,i8Tob)|> |]
bToi8 :: Span -> (Bytes, Base_md) -> (Data.Int.Int8, Base_md)
bToi8 p (bytes,md) = (fromIntegral (bytes `B.index` 0), md)
i8Tob :: (Int8,Int8_md) -> (Bytes,Bytes_md)
i8Tob (i,md) = (B.singleton (fromIntegral i), md)
type Int16 = Data.Int.Int16
[pads| obtain Int16 from Bytes 2 using <| (bToi16,i16Tob) |> |]
bToi16 :: Span -> (Bytes,Bytes_md) -> (Int16,Int16_md)
bToi16 p (bs,md) = (bytesToInt16 Native bs, md)
i16Tob :: (Int16,Int16_md) -> (Bytes,Bytes_md)
i16Tob (i,md) = (int16ToBytes Native i, md)
type Int32 = Data.Int.Int32
[pads| obtain Int32 from Bytes 4 using <|(bToi32,i32Tob)|> |]
bToi32 :: Span -> (Bytes,Bytes_md) -> (Int32,Int32_md)
bToi32 p (bytes,md) = (bytesToInt32 Native bytes, md)
i32Tob :: (Int32,Int32_md) -> (Bytes,Bytes_md)
i32Tob (i,md) = (int32ToBytes Native i, md)
type Word8 = Data.Word.Word8
[pads| obtain Word8 from Bytes 1 using <|(bTow8,w8Tob)|> |]
bTow8 :: Span -> (Bytes,Bytes_md) -> (Word8,Word8_md)
bTow8 p (bytes,md) = (bytes `B.index` 0, md)
w8Tob :: (Word8,Word8_md) -> (Bytes,Bytes_md)
w8Tob (i,md) = (B.singleton i, md)
type Word16 = Data.Word.Word16
[pads| obtain Word16 from Bytes 2 using <|(bTow16,w16Tob)|> |]
bTow16 :: Span -> (Bytes,Bytes_md) -> (Word16,Word16_md)
bTow16 p (bytes,md) = (bytesToWord16 Native bytes, md)
w16Tob :: (Word16,Word16_md) -> (Bytes,Bytes_md)
w16Tob (i,md) = (word16ToBytes Native i, md)
type Word32 = Data.Word.Word32
[pads| obtain Word32 from Bytes 4 using <|(bTow32,w32Tob)|> |]
bTow32 :: Span -> (Bytes,Bytes_md) -> (Data.Word.Word32,Word32_md)
bTow32 p (bytes,md) = (bytesToWord32 Native bytes, md)
w32Tob :: (Data.Word.Word32,Word32_md) -> (Bytes,Bytes_md)
w32Tob (i,md) = (word32ToBytes Native i, md)