f0cb315452faea6fee8144489629e63e9bd7b303Christian Maeder{-# LANGUAGE CPP #-}
f0cb315452faea6fee8144489629e63e9bd7b303Christian MaederDescription : utility module for measuring execution time
f0cb315452faea6fee8144489629e63e9bd7b303Christian MaederCopyright : (c) C. Maeder DFKI GmbH
98890889ffb2e8f6f722b00e265a211f13b5a861Corneliu-Claudiu ProdescuLicense : GPLv2 or higher, see LICENSE.txt
f0cb315452faea6fee8144489629e63e9bd7b303Christian MaederMaintainer : Christian.Maeder@dfki.de
f0cb315452faea6fee8144489629e63e9bd7b303Christian MaederStability : provisional
f0cb315452faea6fee8144489629e63e9bd7b303Christian MaederPortability : portable
f0cb315452faea6fee8144489629e63e9bd7b303Christian MaederUtility functions that can't be found in the libraries
f0cb315452faea6fee8144489629e63e9bd7b303Christian Maeder but should be shared across Hets.
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen Kuksaimport Numeric
4a6032790570e790438ad99706beff11509184eaChristian Maedernewtype HetsTime = HetsTime
f0cb315452faea6fee8144489629e63e9bd7b303Christian MaedergetHetsTime :: IO HetsTime
f0cb315452faea6fee8144489629e63e9bd7b303Christian MaedergetHetsTime = liftM HetsTime
f0cb315452faea6fee8144489629e63e9bd7b303Christian Maeder getCurrentTime
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen KuksameasureWallTime :: IO a -> IO (a, TimeOfDay)
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen KuksameasureWallTime f = do
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen Kuksa startTime <- getHetsTime
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen Kuksa endTime <- getHetsTime
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen Kuksa let wallTimeUsed = diffHetsTime endTime startTime
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen Kuksa return (result, wallTimeUsed)
f0cb315452faea6fee8144489629e63e9bd7b303Christian MaederdiffHetsTime :: HetsTime -> HetsTime -> TimeOfDay
f0cb315452faea6fee8144489629e63e9bd7b303Christian MaederdiffHetsTime (HetsTime t1) (HetsTime t2) =
f0cb315452faea6fee8144489629e63e9bd7b303Christian Maeder timeToTimeOfDay $ secondsToDiffTime $ round
f0cb315452faea6fee8144489629e63e9bd7b303Christian Maeder (realToFrac (
f0cb315452faea6fee8144489629e63e9bd7b303Christian Maeder t1 t2) :: Double)
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen KuksatimeOfDayToSeconds :: TimeOfDay -> Int
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen KuksatimeOfDayToSeconds TimeOfDay { todHour = hours
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen Kuksa , todMin = minutes
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen Kuksa , todSec = seconds
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen Kuksa (floor . toDouble) seconds + 60 * (minutes + 60 * hours)
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen Kuksa toDouble :: Pico -> Double
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen Kuksa toDouble s = case readSigned readFloat $ show s of
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen Kuksa [(x, "")] -> x
abdc8c3bcf5b761e9bebf51e6ba2bce659d29512Eugen Kuksa _ -> error $ "timeOfDayToSeconds: Failed reading the number " ++ show s