module Text.Show.ByteString.Int where
import GHC.Base
import GHC.Int
import GHC.Word
import Data.Binary
import Text.Show.ByteString.Util
putI :: Int# -> Put
putI i#
| i# <# 0# = let I# minInt# = minInt
in if i# ==# minInt#
then putWord8 45 >> putW (int2Word# (negateInt# (i# `quotInt#` 10#)))
>> putW (int2Word# (negateInt# (i# `remInt#` 10#)))
else putWord8 45 >> putW (int2Word# (negateInt# i#))
| otherwise = putW (int2Word# i#)
putW :: Word# -> Put
putW w#
| w# `ltWord#` int2Word# 10# = unsafePutDigit# w#
| otherwise = putW (w# `quotWord#` int2Word# 10#)
>> unsafePutDigit# (w# `remWord#` int2Word# 10#)
showpInt :: Int -> Put
showpInt (I# i#) = putI i#
showpInt8 :: Int8 -> Put
showpInt8 (I8# i#) = putI i#
showpInt16 :: Int16 -> Put
showpInt16 (I16# i#) = putI i#
showpInt32 :: Int32 -> Put
showpInt32 (I32# i#) = putI i#
showpWord :: Word -> Put
showpWord (W# w#) = putW w#
showpWord8 :: Word8 -> Put
showpWord8 (W8# w#) = putW w#
showpWord16 :: Word16 -> Put
showpWord16 (W16# w#) = putW w#
showpWord32 :: Word32 -> Put
showpWord32 (W32# w#) = putW w#