source: src/libcfa/clock@ bbe1a87

ADT aaron-thesis arm-eh ast-experimental cleanup-dtors deferred_resn demangler enum forall-pointer-decay jacob/cs343-translation jenkins-sandbox new-ast new-ast-unique-expr no_list persistent-indexer pthread-emulation qualifiedEnum
Last change on this file since bbe1a87 was bbe1a87, checked in by Peter A. Buhr <pabuhr@…>, 7 years ago

use distribution for SC qualifiers, and inline routines

  • Property mode set to 100644
File size: 2.8 KB
Line 
1//
2// Cforall Version 1.0.0 Copyright (C) 2018 University of Waterloo
3//
4// The contents of this file are covered under the licence agreement in the
5// file "LICENCE" distributed with Cforall.
6//
7// clock --
8//
9// Author : Peter A. Buhr
10// Created On : Thu Apr 12 14:36:06 2018
11// Last Modified By : Peter A. Buhr
12// Last Modified On : Mon Jul 2 21:40:01 2018
13// Update Count : 7
14//
15
16#include <time>
17
18
19//######################### C time #########################
20
21static inline char * ctime( time_t tp ) { char * buf = ctime( &tp ); buf[24] = '\0'; return buf; }
22static inline char * ctime_r( time_t tp, char * buf ) { ctime_r( &tp, buf ); buf[24] = '\0'; return buf; }
23static inline tm * gmtime( time_t tp ) { return gmtime( &tp ); }
24static inline tm * gmtime_r( time_t tp, tm * result ) { return gmtime_r( &tp, result ); }
25static inline tm * localtime( time_t tp ) { return localtime( &tp ); }
26static inline tm * localtime_r( time_t tp, tm * result ) { return localtime_r( &tp, result ); }
27
28
29//######################### Clock #########################
30
31struct Clock { // private
32 Duration offset; // for virtual clock: contains offset from real-time
33 int clocktype; // implementation only -1 (virtual), CLOCK_REALTIME
34};
35
36static inline {
37 void resetClock( Clock & clk ) with( clk ) {
38 clocktype = CLOCK_REALTIME_COARSE;
39 } // Clock::resetClock
40
41 void resetClock( Clock & clk, Duration adj ) with( clk ) {
42 clocktype = -1;
43 offset = adj + __timezone`s; // timezone (global) is (UTC - local time) in seconds
44 } // resetClock
45
46 void ?{}( Clock & clk ) { resetClock( clk ); }
47 void ?{}( Clock & clk, Duration adj ) { resetClock( clk, adj ); }
48
49 Duration getResNsec() {
50 struct timespec res;
51 clock_getres( CLOCK_REALTIME, &res );
52 return ((int64_t)res.tv_sec * TIMEGRAN + res.tv_nsec)`ns;
53 } // getRes
54
55 Duration getRes() {
56 struct timespec res;
57 clock_getres( CLOCK_REALTIME_COARSE, &res );
58 return ((int64_t)res.tv_sec * TIMEGRAN + res.tv_nsec)`ns;
59 } // getRes
60
61 Time getTimeNsec() { // with nanoseconds
62 timespec curr;
63 clock_gettime( CLOCK_REALTIME, &curr );
64 return (Time){ curr };
65 } // getTime
66
67 Time getTime() { // without nanoseconds
68 timespec curr;
69 clock_gettime( CLOCK_REALTIME_COARSE, &curr );
70 curr.tv_nsec = 0;
71 return (Time){ curr };
72 } // getTime
73
74 Time getTime( Clock & clk ) with( clk ) {
75 return getTime() + offset;
76 } // getTime
77
78 Time ?()( Clock & clk ) with( clk ) { // alternative syntax
79 return getTime() + offset;
80 } // getTime
81
82 timeval getTime( Clock & clk ) {
83 return (timeval){ clk() };
84 } // getTime
85
86 tm getTime( Clock & clk ) with( clk ) {
87 tm ret;
88 localtime_r( getTime( clk ).tv_sec, &ret );
89 return ret;
90 } // getTime
91} // distribution
92
93// Local Variables: //
94// mode: c //
95// tab-width: 4 //
96// End: //
Note: See TracBrowser for help on using the repository browser.