VirtualBox

source: vbox/trunk/src/VBox/NetworkServices/Dhcpd/TimeStamp.h@ 78425

Last change on this file since 78425 was 76576, checked in by vboxsync, 6 years ago

NetworkServices: scm header guard alignment.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.7 KB
Line 
1/* $Id: TimeStamp.h 76576 2019-01-01 06:05:25Z vboxsync $ */
2/** @file
3 * DHCP server - timestamps
4 */
5
6/*
7 * Copyright (C) 2017-2019 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18#ifndef VBOX_INCLUDED_SRC_Dhcpd_TimeStamp_h
19#define VBOX_INCLUDED_SRC_Dhcpd_TimeStamp_h
20#ifndef RT_WITHOUT_PRAGMA_ONCE
21# pragma once
22#endif
23
24#include <iprt/string.h>
25#include <iprt/time.h>
26
27
28/*
29 * Timestamp API uses unsigned time, but we need to be able to refer
30 * to events in the past. Hide the ugly convertions.
31 */
32class TimeStamp
33{
34 int64_t m_ns;
35
36public:
37 TimeStamp()
38 : m_ns(0) {}
39
40 TimeStamp(uint64_t ns)
41 : m_ns(static_cast<int64_t>(ns)) {}
42
43 static TimeStamp now()
44 {
45 return TimeStamp(RTTimeNanoTS());
46 }
47
48 static TimeStamp absSeconds(int64_t sec)
49 {
50 RTTIMESPEC delta;
51 RTTimeNow(&delta);
52 RTTimeSpecSubSeconds(&delta, sec);
53
54 uint64_t stampNow = RTTimeNanoTS();
55 return TimeStamp(stampNow - RTTimeSpecGetNano(&delta));
56 }
57
58 TimeStamp &addSeconds(int64_t sec)
59 {
60 m_ns += sec * RT_NS_1SEC;
61 return *this;
62 }
63
64 TimeStamp &subSeconds(int64_t sec)
65 {
66 m_ns -= sec * RT_NS_1SEC;
67 return *this;
68 }
69
70
71 RTTIMESPEC *getAbsTimeSpec(RTTIMESPEC *pTime) const
72 {
73 RTTimeNow(pTime);
74
75 uint64_t stampNow = RTTimeNanoTS();
76 uint64_t delta = stampNow - m_ns;
77 RTTimeSpecSubNano(pTime, delta);
78 return pTime;
79 }
80
81 int64_t getAbsSeconds() const
82 {
83 RTTIMESPEC time;
84 return RTTimeSpecGetSeconds(getAbsTimeSpec(&time));
85 }
86
87 size_t absStrFormat(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput) const;
88
89 friend bool operator<(const TimeStamp &l, const TimeStamp &r);
90 friend bool operator>(const TimeStamp &l, const TimeStamp &r);
91 friend bool operator<=(const TimeStamp &l, const TimeStamp &r);
92 friend bool operator>=(const TimeStamp &l, const TimeStamp &r);
93};
94
95
96inline bool operator<(const TimeStamp &l, const TimeStamp &r) { return l.m_ns < r.m_ns; }
97inline bool operator>(const TimeStamp &l, const TimeStamp &r) { return l.m_ns > r.m_ns; }
98inline bool operator<=(const TimeStamp &l, const TimeStamp &r) { return l.m_ns <= r.m_ns; }
99inline bool operator>=(const TimeStamp &l, const TimeStamp &r) { return l.m_ns >= r.m_ns; }
100
101#endif /* !VBOX_INCLUDED_SRC_Dhcpd_TimeStamp_h */
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette