diff options
author | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-07-15 23:00:47 +0000 |
---|---|---|
committer | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-07-15 23:00:47 +0000 |
commit | ff15e0fa53156b9994da3f726bfe91232de6195a (patch) | |
tree | 896015cada90b49858e1bf6503d9583704a56179 /include | |
parent | c05cf07847cb384ba66aa29d5eda580eda413ffb (diff) |
add a library of timeval manipulation functions, and change a large number of usses to use the new functions (bug #4504)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@6146 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'include')
-rwxr-xr-x | include/asterisk/sched.h | 2 | ||||
-rwxr-xr-x | include/asterisk/time.h | 100 |
2 files changed, 99 insertions, 3 deletions
diff --git a/include/asterisk/sched.h b/include/asterisk/sched.h index 52d29e4e0..c64e308b4 100755 --- a/include/asterisk/sched.h +++ b/include/asterisk/sched.h @@ -100,7 +100,7 @@ extern int ast_sched_runq(struct sched_context *con); * \param con Context to dump * Debugging: Dump the contents of the scheduler to stderr */ -extern void ast_sched_dump(struct sched_context *con); +extern void ast_sched_dump(const struct sched_context *con); /*!Returns the number of seconds before an event takes place */ /*! diff --git a/include/asterisk/time.h b/include/asterisk/time.h index ec7a51d8d..82b781125 100755 --- a/include/asterisk/time.h +++ b/include/asterisk/time.h @@ -23,9 +23,105 @@ * \return the difference in milliseconds */ AST_INLINE_API( -int ast_tvdiff_ms(const struct timeval *end, const struct timeval *start), +int ast_tvdiff_ms(struct timeval end, struct timeval start), { - return ((end->tv_sec - start->tv_sec) * 1000) + ((end->tv_usec - start->tv_usec) / 1000); + return ((end.tv_sec - start.tv_sec) * 1000) + ((end.tv_usec - start.tv_usec) / 1000); +} +) + +/*! + * \brief Returns true if the argument is 0,0 + */ +AST_INLINE_API( +int ast_tvzero(const struct timeval t), +{ + return (t.tv_sec == 0 && t.tv_usec == 0); +} +) + +/*! + * \brief Compres two \c struct \c timeval instances returning + * -1, 0, 1 if the first arg is smaller, equal or greater to the second. + */ +AST_INLINE_API( +int ast_tvcmp(struct timeval _a, struct timeval _b), +{ + if (_a.tv_sec < _b.tv_sec) + return -1; + if (_a.tv_sec > _b.tv_sec) + return 1; + /* now seconds are equal */ + if (_a.tv_usec < _b.tv_usec) + return -1; + if (_a.tv_usec > _b.tv_usec) + return 1; + return 0; +} +) + +/*! + * \brief Returns true if the two \c struct \c timeval arguments are equal. + */ +AST_INLINE_API( +int ast_tveq(struct timeval _a, struct timeval _b), +{ + return (_a.tv_sec == _b.tv_sec && _a.tv_usec == _b.tv_usec); +} +) + +/*! + * \brief Returns current timeval. Meant to replace calls to gettimeofday(). + */ +AST_INLINE_API( +struct timeval ast_tvnow(void), +{ + struct timeval t; + gettimeofday(&t, NULL); + return t; +} +) + +/*! + * \brief Returns the sum of two timevals a + b + */ +struct timeval ast_tvadd(struct timeval a, struct timeval b); + +/*! + * \brief Returns the difference of two timevals a - b + */ +struct timeval ast_tvsub(struct timeval a, struct timeval b); + +/*! + * \brief Returns a timeval from sec, usec + */ +#if 0 +AST_INLINE_API( +struct timeval ast_tv(int sec, int usec), +{ + struct timeval t = { sec, usec}; + return t; +} +) +#endif +AST_INLINE_API( +struct timeval ast_tv(int sec, int usec), +{ + struct timeval t; + t.tv_sec = sec; + t.tv_usec = usec; + return t; +} +) + +/*! + * \brief Returns a timeval corresponding to the duration of n samples at rate r. + * Useful to convert samples to timevals, or even milliseconds to timevals + * in the form ast_samp2tv(milliseconds, 1000) + */ +AST_INLINE_API( +struct timeval ast_samp2tv(long _nsamp, long _rate), +{ + return ast_tv(_nsamp / _rate, (_nsamp % _rate) * (1000000 / _rate)); } ) |