]> git.ipfire.org Git - thirdparty/squid.git/blob - src/SquidTime.h
SourceFormat Enforcement
[thirdparty/squid.git] / src / SquidTime.h
1 /*
2 * Copyright (C) 1996-2016 The Squid Software Foundation and contributors
3 *
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
7 */
8
9 /* DEBUG: section 21 Time Functions */
10
11 #ifndef SQUID_TIME_H
12 #define SQUID_TIME_H
13
14 #include "rfc1123.h"
15
16 #include <ctime>
17 /* NP: sys/time.h is provided by libcompat */
18
19 /* Use uint64_t to store milliseconds */
20 typedef uint64_t time_msec_t;
21
22 /* globals for accessing time */
23 extern struct timeval current_time;
24 extern double current_dtime;
25 extern time_t squid_curtime;
26
27 time_t getCurrentTime(void);
28 int tvSubMsec(struct timeval, struct timeval);
29
30 /// timeval substraction operation
31 /// \param[out] res = t2 - t1
32 void tvSub(struct timeval &res, struct timeval const &t1, struct timeval const &t2);
33
34 /// timeval addition operation
35 /// \param[out] res = t1 + t2
36 void tvAdd(struct timeval &res, struct timeval const &t1, struct timeval const &t2);
37
38 /// timeval addition assignment operation
39 /// \param[out] t += add
40 void tvAssignAdd(struct timeval &t, struct timeval const &add);
41
42 /// Convert timeval to milliseconds
43 inline long int tvToMsec(struct timeval &t)
44 {
45 return t.tv_sec * 1000 + t.tv_usec / 1000;
46 }
47
48 /** event class for doing synthetic time etc */
49 class TimeEngine
50 {
51
52 public:
53 virtual ~TimeEngine();
54
55 /** tick the clock - update from the OS or other time source, */
56 virtual void tick();
57 };
58
59 namespace Time
60 {
61
62 /** Display time as a formatted human-readable string.
63 * Time syntax is
64 * "YYYY/MM/DD hh:mm:ss"
65 *
66 * Output is only valid until next call to this function.
67 */
68 const char *FormatStrf(time_t t);
69
70 /** Display time as a formatted human-readable string.
71 * Time string syntax used is that of Apache httpd.
72 * "DD/MMM/YYYY:hh:mm:ss zzzz"
73 *
74 * Output is only valid until next call to this function.
75 */
76 const char *FormatHttpd(time_t t);
77
78 } // namespace Time
79
80 #endif /* SQUID_TIME_H */
81