time.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _ASTERISK_TIME_H
00024 #define _ASTERISK_TIME_H
00025
00026 #ifdef HAVE_SYS_TIME_H
00027 #include <sys/time.h>
00028 #endif
00029
00030 #include "asterisk/inline_api.h"
00031
00032
00033
00034
00035 extern struct timeval tv;
00036 typedef typeof(tv.tv_sec) ast_time_t;
00037 typedef typeof(tv.tv_usec) ast_suseconds_t;
00038
00039
00040
00041
00042
00043
00044
00045 AST_INLINE_API(
00046 int64_t ast_tvdiff_sec(struct timeval end, struct timeval start),
00047 {
00048 int64_t result = end.tv_sec - start.tv_sec;
00049 if (result > 0 && end.tv_usec < start.tv_usec)
00050 result--;
00051 else if (result < 0 && end.tv_usec > start.tv_usec)
00052 result++;
00053
00054 return result;
00055 }
00056 )
00057
00058
00059
00060
00061
00062
00063
00064 AST_INLINE_API(
00065 int64_t ast_tvdiff_us(struct timeval end, struct timeval start),
00066 {
00067 return (end.tv_sec - start.tv_sec) * (int64_t) 1000000 +
00068 end.tv_usec - start.tv_usec;
00069 }
00070 )
00071
00072
00073
00074
00075
00076
00077
00078 AST_INLINE_API(
00079 int64_t ast_tvdiff_ms(struct timeval end, struct timeval start),
00080 {
00081
00082
00083
00084
00085
00086 int64_t sec_dif = (int64_t)(end.tv_sec - start.tv_sec) * 1000;
00087 int64_t usec_dif = (1000000 + end.tv_usec - start.tv_usec) / 1000 - 1000;
00088 return sec_dif + usec_dif;
00089 }
00090 )
00091
00092
00093
00094
00095 AST_INLINE_API(
00096 int ast_tvzero(const struct timeval t),
00097 {
00098 return (t.tv_sec == 0 && t.tv_usec == 0);
00099 }
00100 )
00101
00102
00103
00104
00105
00106 AST_INLINE_API(
00107 int ast_tvcmp(struct timeval _a, struct timeval _b),
00108 {
00109 if (_a.tv_sec < _b.tv_sec)
00110 return -1;
00111 if (_a.tv_sec > _b.tv_sec)
00112 return 1;
00113
00114 if (_a.tv_usec < _b.tv_usec)
00115 return -1;
00116 if (_a.tv_usec > _b.tv_usec)
00117 return 1;
00118 return 0;
00119 }
00120 )
00121
00122
00123
00124
00125 AST_INLINE_API(
00126 int ast_tveq(struct timeval _a, struct timeval _b),
00127 {
00128 return (_a.tv_sec == _b.tv_sec && _a.tv_usec == _b.tv_usec);
00129 }
00130 )
00131
00132
00133
00134
00135 AST_INLINE_API(
00136 struct timeval ast_tvnow(void),
00137 {
00138 struct timeval t;
00139 gettimeofday(&t, NULL);
00140 return t;
00141 }
00142 )
00143
00144
00145
00146
00147 struct timeval ast_tvadd(struct timeval a, struct timeval b);
00148
00149
00150
00151
00152 struct timeval ast_tvsub(struct timeval a, struct timeval b);
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166 int ast_remaining_ms(struct timeval start, int max_ms);
00167
00168
00169
00170
00171 AST_INLINE_API(
00172 struct timeval ast_tv(ast_time_t sec, ast_suseconds_t usec),
00173 {
00174 struct timeval t;
00175 t.tv_sec = sec;
00176 t.tv_usec = usec;
00177 return t;
00178 }
00179 )
00180
00181
00182
00183
00184
00185
00186 AST_INLINE_API(
00187 struct timeval ast_samp2tv(unsigned int _nsamp, unsigned int _rate),
00188 {
00189 return ast_tv(_nsamp / _rate, ((_nsamp % _rate) * (4000000 / _rate)) / 4);
00190 }
00191 )
00192
00193 #endif