LCOV - code coverage report
Current view: top level - src/gwrl - time.c (source / functions) Hit Total Coverage
Test: all.info Lines: 80 89 89.9 %
Date: 2012-09-24 Functions: 13 13 100.0 %
Branches: 17 22 77.3 %

           Branch data     Line data    Source code
       1                 :            : 
       2                 :            : #include "gwrl/time.h"
       3                 :            : 
       4                 :            : #ifdef __cplusplus
       5                 :            : extern "C" {
       6                 :            : #endif
       7                 :            : 
       8                 :        384 : void gwtm_gettimeofday_timespec(struct timespec * ts) {
       9                 :        384 :         struct timeval tv;
      10                 :        384 :         gettimeofday(&tv,NULL);
      11                 :        384 :         gwtm_timeval_to_timespec(&tv,ts);
      12                 :        384 : }
      13                 :            : 
      14                 :          1 : void gwtm_ms_to_timeval(int64_t ms, struct timeval * tv) {
      15                 :          1 :         tv->tv_sec = (long)(ms/1000);
      16                 :          1 :         tv->tv_usec = 1000*(ms%1000);
      17                 :          1 :         if(tv->tv_usec >= _MICROSECONDS_WC) {
      18                 :          0 :                 tv->tv_sec += 1;
      19                 :          0 :                 tv->tv_usec -= _MICROSECONDS_WC;
      20                 :          0 :         }
      21                 :          1 : }
      22                 :            : 
      23                 :          2 : void gwtm_ms_to_timespec(int64_t ms, struct timespec * ts) {
      24                 :          2 :         ts->tv_sec = (long)(ms/1000);
      25                 :          2 :         ts->tv_nsec = 1000000 * (ms%1000);
      26                 :          2 :         if(ts->tv_nsec >= _NANOSECONDS_WC) {
      27                 :          0 :                 ts->tv_sec += 1;
      28                 :          0 :                 ts->tv_nsec -= _NANOSECONDS_WC;
      29                 :          0 :         }
      30                 :          2 : }
      31                 :            : 
      32                 :          3 : void gwtm_timeval_to_ms(struct timeval * tv, int64_t * ms) {
      33         [ +  - ]:          1 :         if(tv->tv_sec == 0 && tv->tv_usec == 0) {
      34                 :          1 :                 *ms = 0;
      35                 :          1 :                 return;
      36                 :            :         }
      37                 :          2 :         *ms = ((int64_t)tv->tv_sec)*1000;
      38                 :          2 :         *ms += tv->tv_usec/1000;
      39                 :          3 : }
      40                 :            : 
      41                 :          2 : void gwtm_timespec_to_ms(struct timespec * ts, int64_t * ms) {
      42         [ +  - ]:          1 :         if(ts->tv_sec == 0 && ts->tv_nsec == 0) {
      43                 :          1 :                 *ms = 0;
      44                 :          1 :                 return;
      45                 :            :         }
      46                 :          1 :         *ms = ((int64_t)ts->tv_sec)*1000;
      47                 :          1 :         *ms += ts->tv_nsec/1000000;
      48                 :          2 : }
      49                 :            : 
      50                 :          3 : void gwtm_add_ms_to_timeval(int64_t ms, struct timeval * tv) {
      51                 :          1 :         if(ms == 0) return;
      52                 :          2 :         tv->tv_sec += (long)(ms/1000);
      53                 :          2 :         tv->tv_usec += 1000*(ms%1000);
      54         [ -  + ]:          2 :         while(tv->tv_usec >= _MICROSECONDS_WC) {
      55                 :          0 :                 tv->tv_sec += 1;
      56                 :          0 :                 tv->tv_usec -= _MICROSECONDS_WC;
      57                 :          0 :         }
      58                 :          3 : }
      59                 :            : 
      60                 :        148 : void gwtm_add_ms_to_timespec(int64_t ms, struct timespec * ts) {
      61                 :        102 :         if(ms == 0) return;
      62                 :         46 :         ts->tv_sec += (long)(ms/1000);
      63                 :         46 :         ts->tv_nsec += 1000000*(ms%1000);
      64         [ +  + ]:         48 :         while(ts->tv_nsec >= _NANOSECONDS_WC) {
      65                 :          2 :                 ts->tv_sec += 1;
      66                 :          2 :                 ts->tv_nsec -= _NANOSECONDS_WC;
      67                 :          2 :         }
      68                 :        148 : }
      69                 :            : 
      70                 :        158 : struct timespec * gwtm_timespec_cmp(struct timespec * ts1, struct timespec * ts2) {
      71                 :        124 :         if(ts1->tv_sec < ts2->tv_sec) return ts1;
      72         [ +  + ]:         34 :         if(ts1->tv_sec == ts2->tv_sec) {
      73         [ +  + ]:         13 :                 if(ts1->tv_nsec < ts2->tv_nsec) return ts1;
      74         [ -  + ]:          5 :                 else if(ts1->tv_nsec == ts2->tv_nsec) return NULL;
      75                 :          5 :         }
      76                 :         26 :         return ts2;
      77                 :        158 : }
      78                 :            : 
      79                 :        157 : bool gwtm_timespec_copy_if_smaller(struct timespec * source, struct timespec * update) {
      80                 :        157 :         struct timespec * smaller = gwtm_timespec_cmp(source,update);
      81                 :        157 :         if(smaller == source) {
      82         [ -  + ]:        131 :                 memcpy(update,smaller,sizeof(struct timespec));
      83                 :        131 :                 return true;
      84                 :            :         }
      85                 :         26 :         return false;
      86                 :        157 : }
      87                 :            : 
      88                 :        465 : void gwtm_timespec_sub_into(struct timespec * ts1, struct timespec * ts2, struct timespec * into) {
      89                 :        465 :         into->tv_sec = ts1->tv_sec - ts2->tv_sec;
      90                 :        465 :         into->tv_nsec = ts1->tv_nsec - ts2->tv_nsec;
      91         [ +  + ]:        859 :         while(into->tv_nsec < 0) {
      92                 :        394 :                 into->tv_sec -= 1;
      93                 :        394 :                 into->tv_nsec += _NANOSECONDS_WC;
      94                 :        394 :         }
      95                 :        465 : }
      96                 :            : 
      97                 :        347 : bool gwtm_timespec_is_expired(struct timespec * ts1) {
      98                 :        143 :         if(ts1->tv_sec < 0) return true;
      99 [ +  + ][ +  + ]:        204 :         if(ts1->tv_sec <= 0 && ts1->tv_nsec <= 0) return true;
     100                 :        203 :         return false;
     101                 :        347 : }
     102                 :            : 
     103                 :        385 : void gwtm_timeval_to_timespec(struct timeval * tv, struct timespec * ts) {
     104                 :        385 :         ts->tv_sec = tv->tv_sec;
     105                 :        385 :         ts->tv_nsec = ((int64_t)tv->tv_usec)*1000;
     106                 :        385 : }
     107                 :            : 
     108                 :          1 : void gwtm_timespec_to_timeval(struct timespec * ts, struct timeval * tv) {
     109                 :          1 :         tv->tv_sec = ts->tv_sec;
     110                 :          1 :         tv->tv_usec = ((long)ts->tv_nsec)/1000;
     111                 :          1 : }
     112                 :            : 
     113                 :            : #ifdef __cplusplus
     114                 :            : }
     115                 :            : #endif

Generated by: LCOV version 1.9