From 0ecc75b1134d221f544653025150948f0ac2a743 Mon Sep 17 00:00:00 2001 From: Aleksey Veresov Date: Fri, 2 Apr 2021 13:36:08 +0300 Subject: Puf. --- src/Utils.hs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/Utils.hs') diff --git a/src/Utils.hs b/src/Utils.hs index 03d6db3..82b31ca 100644 --- a/src/Utils.hs +++ b/src/Utils.hs @@ -2,6 +2,7 @@ module Utils where import Data.Bits +import Data.Word (Word8, Word16, Word32) ------------------------------------------------------------------------------- @@ -19,3 +20,20 @@ fromBits = foldl (\a b -> 2 * a + b) 0 . reverse extractBits :: Bits a => a -> [Int] -> Int extractBits x r = fromBits $ toBits x r + + +------------------------------------------------------------------------------- +-- Size Convertion + +convertLong :: Word32 -> Int -> Word32 +convertLong x 1 = x .&. 0x000000FF +convertLong x 2 = x .&. 0x0000FFFF +convertLong x 3 = x +convertLong _ s = error $ "Wrong size (" ++ show s ++ ") of convertLong" + +combineLong :: Word32 -> Word32 -> Int -> Word32 +combineLong update base 1 = base .&. 0xFFFFFF00 .|. (convertLong update 1) +combineLong update base 2 = base .&. 0xFFFF0000 .|. (convertLong update 2) +combineLong update _ 3 = update +combineLong _ _ s = error $ + "Wrong size (" ++ show s ++ ") of combineLong" -- cgit v1.2.3