]> AND Private Git Repository - Cipher_code.git/blob - IDA_new/jerasure/src/timing.c
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
new ida
[Cipher_code.git] / IDA_new / jerasure / src / timing.c
1 // Timing measurement utilities implementation.
2
3 #include "timing.h"
4 #include <stddef.h>
5
6 void
7 timing_set(
8   struct timing * t)
9 {
10 #ifdef USE_CLOCK
11   t->clock = clock();
12 #else
13   gettimeofday(&t->tv, NULL);
14 #endif
15 }
16
17 double
18 timing_get(
19   struct timing * t)
20 {
21 #ifdef USE_CLOCK
22   // The clock_t type is an "arithmetic type", which could be
23   // integral, double, long double, or others.
24   //
25   // Add 0.0 to make it a double or long double, then divide (in
26   // double or long double), then convert to double for our purposes.
27   return (double) ((t->clock + 0.0) / CLOCKS_PER_SEC);
28 #else
29   return (double) t->tv.tv_sec + ((double) t->tv.tv_usec) / 1000000.0;
30 #endif
31 }
32
33 double
34 timing_now()
35 {
36 #ifdef USE_CLOCK
37   return (double) ((clock() + 0.0) / CLOCKS_PER_SEC);
38 #else
39   struct timeval tv;
40   gettimeofday(&tv, NULL);
41   return (double) tv.tv_sec + ((double) tv.tv_usec) / 1000000.0;
42 #endif
43 }
44
45 double
46 timing_delta(
47   struct timing * t1,
48   struct timing * t2)
49 {
50 #ifdef USE_CLOCK
51   // The clock_t type is an "arithmetic type", which could be
52   // integral, double, long double, or others.
53   //
54   // Subtract first, resulting in another clock_t, then add 0.0 to
55   // make it a double or long double, then divide (in double or long
56   // double), then convert to double for our purposes.
57   return (double) (((t2->clock - t1->clock) + 0.0) / CLOCKS_PER_SEC);
58 #else
59   double const d2 = (double) t2->tv.tv_sec + ((double) t2->tv.tv_usec) / 1000000.0;
60   double const d1 = (double) t1->tv.tv_sec + ((double) t1->tv.tv_usec) / 1000000.0;
61   return d2 - d1;
62 #endif
63 }