From: Russell Bryant Date: Wed, 19 Dec 2007 19:29:14 +0000 (+0000) Subject: Add a couple of new time API calls - ast_tvdiff_sec and ast_tvdiff_usec X-Git-Tag: 1.6.0-beta1~3^2~353 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=aea80ca3a4c100a4a84d2744e1f8a6580dd4e2c8;p=thirdparty%2Fasterisk.git Add a couple of new time API calls - ast_tvdiff_sec and ast_tvdiff_usec (closes issue #11270) Reported by: dimas Patches: tvdiff_us-4.patch uploaded by dimas (license 88) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@94029 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/include/asterisk/time.h b/include/asterisk/time.h index 3b94cd6467..4b7ca00ff9 100644 --- a/include/asterisk/time.h +++ b/include/asterisk/time.h @@ -36,6 +36,39 @@ extern struct timeval tv; typedef typeof(tv.tv_sec) ast_time_t; typedef typeof(tv.tv_usec) ast_suseconds_t; +/*! + * \brief Computes the difference (in seconds) between two \c struct \c timeval instances. + * \param end the end of the time period + * \param start the beginning of the time period + * \return the difference in seconds + */ +AST_INLINE_API( +int ast_tvdiff_sec(struct timeval end, struct timeval start), +{ + int result = end.tv_sec - start.tv_sec; + if (result > 0 && end.tv_usec < start.tv_usec) + result--; + else if (result < 0 && end.tv_usec > start.tv_usec) + result++; + + return result; +} +) + +/*! + * \brief Computes the difference (in microseconds) between two \c struct \c timeval instances. + * \param end the end of the time period + * \param start the beginning of the time period + * \return the difference in microseconds + */ +AST_INLINE_API( +int64_t ast_tvdiff_us(struct timeval end, struct timeval start), +{ + return (end.tv_sec - start.tv_sec) * (int64_t) 1000000 + + end.tv_usec - start.tv_usec; +} +) + /*! * \brief Computes the difference (in milliseconds) between two \c struct \c timeval instances. * \param end end of the time period