module Data.PE.Utils where
import Data.Word
import Data.ByteString.Internal
import Data.Bits
byte64String :: Word64 -> String
byte64String :: Word64 -> String
byte64String Word64
word = (Word8 -> Char) -> [Word8] -> String
forall a b. (a -> b) -> [a] -> [b]
Prelude.map Word8 -> Char
w2c (Word64 -> [Word8]
breakWord64 Word64
word)
breakWord64 :: Word64 -> [Word8]
breakWord64 :: Word64 -> [Word8]
breakWord64 Word64
word = let x0 :: Word8
x0 = (Int -> Word64 -> Word8
byte64 Int
0 Word64
word) in
let x1 :: Word8
x1 = (Int -> Word64 -> Word8
byte64 Int
1 Word64
word) in
let x2 :: Word8
x2 = (Int -> Word64 -> Word8
byte64 Int
2 Word64
word) in
let x3 :: Word8
x3 = (Int -> Word64 -> Word8
byte64 Int
3 Word64
word) in
let x4 :: Word8
x4 = (Int -> Word64 -> Word8
byte64 Int
4 Word64
word) in
let x5 :: Word8
x5 = (Int -> Word64 -> Word8
byte64 Int
5 Word64
word) in
let x6 :: Word8
x6 = (Int -> Word64 -> Word8
byte64 Int
6 Word64
word) in
let x7 :: Word8
x7 = (Int -> Word64 -> Word8
byte64 Int
7 Word64
word) in
([Word8] -> [Word8]
cleanWord (Word8
x0Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
x1Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
x2Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
x3Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
x4Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
x5Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
x6Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
x7Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:[]))
cleanWord :: [Word8] -> [Word8]
cleanWord :: [Word8] -> [Word8]
cleanWord [] = []
cleanWord (Word8
x:[Word8]
ws) = if Word8
x Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
== Word8
0 then [] else [Word8
x] [Word8] -> [Word8] -> [Word8]
forall a. [a] -> [a] -> [a]
++ ([Word8] -> [Word8]
cleanWord [Word8]
ws)
byte64 :: Int -> Word64 -> Word8
byte64 :: Int -> Word64 -> Word8
byte64 Int
i Word64
w = Word64 -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Word64
w Word64 -> Int -> Word64
forall a. Bits a => a -> Int -> a
`shiftR` (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
8))