diff options
Diffstat (limited to 'src/Utils.hs')
-rw-r--r-- | src/Utils.hs | 18 |
1 files changed, 18 insertions, 0 deletions
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" |