// timemath.h---written by Bill Griffin (Billgr)

#if !defined(_TIMEMATH_H_)
#define _TIMEMATH_H_

const __int64 hnsPerMillisecond  = 10000i64;
const __int64 hnsPerSecond       = 10000000i64;
const __int64 hnsPerMinute       = 600000000i64;
const __int64 hnsPerHour         = 36000000000i64;
const __int64 hnsPerDay          = 864000000000i64;

inline __int64 MsFromHns(__int64 hns)
    { return hns / hnsPerMillisecond; }
inline __int64 SecFromHns(__int64 hns)
    { return hns / hnsPerSecond; }
inline __int64 MinFromHns(__int64 hns)
    { return hns / hnsPerMinute; }
inline __int64 HrFromHns(__int64 hns)
    { return hns / hnsPerHour; }
inline __int64 DayFromHns(__int64 hns)
    { return hns / hnsPerDay; }

inline  __int64 HnsFromMs(__int64 ms)
    { return ms * hnsPerMillisecond; }
inline  __int64 HnsFromSec(__int64 sec)
    { return  sec * hnsPerSecond; }
inline  __int64 HnsFromMin(__int64 min)
    { return  min * hnsPerMinute; }
inline  __int64 HnsFromHr(__int64 hr)
    { return  hr * hnsPerHour; }
inline  __int64 HnsFromDay(__int64 day)
    { return day * hnsPerDay; }

inline __int64 HnsFromFt(FILETIME ft)
    { return *((__int64*)&ft); }
inline __int64 HnsFromFtSpan(FILETIME ftStart, FILETIME ftEnd)
    { return HnsFromFt(ftEnd) - HnsFromFt(ftStart); }
inline __int64 SecFromFtSpan(FILETIME ftStart, FILETIME ftEnd)
    { return SecFromHns(HnsFromFtSpan(ftStart, ftEnd)); }
inline __int64 MinFromFtSpan(FILETIME ftStart, FILETIME ftEnd)
    { return MinFromHns(HnsFromFtSpan(ftStart, ftEnd)); }
inline __int64 HrFromFtSpan(FILETIME ftStart, FILETIME ftEnd)
    { return HrFromHns(HnsFromFtSpan(ftStart, ftEnd)); }
inline __int64 DayFromFtSpan(FILETIME ftStart, FILETIME ftEnd)
    { return DayFromHns(HnsFromFtSpan(ftStart, ftEnd)); }

#endif // !defined(_TIMEMATH_H_)