module Data.VHD.Utils
	( divRoundUp
	, roundUpToModulo
	, hAlign
	) where

import Control.Monad (unless)
import System.IO
import qualified Data.ByteString as B

divRoundUp a b = let (d,m) = a `divMod` b in d + if m > 0 then 1 else 0

roundUpToModulo n m
	| n `mod` m == 0 = n
	| otherwise      = n + m - (n `mod` m)

-- | align an handle to the next modulo
hAlign :: Handle -> Int -> IO ()
hAlign h n = hTell h >>= \i -> unless ((i `mod` fromIntegral n) == 0) (realign i)
	where realign i = B.hPut h $ B.replicate (n - fromIntegral (i `mod` fromIntegral n)) 0