Apollo 10.0
自动驾驶开放平台
duration.cc
浏览该文件的文档.
1/******************************************************************************
2 * Copyright 2018 The Apollo Authors. All Rights Reserved.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *****************************************************************************/
16
17#include "cyber/time/duration.h"
18
19#include <chrono>
20#include <iomanip>
21#include <iostream>
22#include <thread>
23
24namespace apollo {
25namespace cyber {
26
27Duration::Duration(int64_t nanoseconds) { nanoseconds_ = nanoseconds; }
28
29Duration::Duration(int nanoseconds) {
30 nanoseconds_ = static_cast<int64_t>(nanoseconds);
31}
32
33Duration::Duration(double seconds) {
34 nanoseconds_ = static_cast<int64_t>(seconds * 1000000000UL);
35}
36
37Duration::Duration(uint32_t seconds, uint32_t nanoseconds) {
38 nanoseconds_ = static_cast<uint64_t>(seconds) * 1000000000UL + nanoseconds;
39}
40
41Duration::Duration(const Duration &other) { nanoseconds_ = other.nanoseconds_; }
42
44 this->nanoseconds_ = other.nanoseconds_;
45 return *this;
46}
47
48double Duration::ToSecond() const {
49 return static_cast<double>(nanoseconds_) / 1000000000UL;
50}
51
52int64_t Duration::ToNanosecond() const { return nanoseconds_; }
53
54bool Duration::IsZero() const { return nanoseconds_ == 0; }
55
56void Duration::Sleep() const {
57 auto sleep_time = std::chrono::nanoseconds(nanoseconds_);
58 std::this_thread::sleep_for(sleep_time);
59}
60
62 return Duration(nanoseconds_ + rhs.nanoseconds_);
63}
64
66 return Duration(nanoseconds_ - rhs.nanoseconds_);
67}
68
69Duration Duration::operator-() const { return Duration(-nanoseconds_); }
70
71Duration Duration::operator*(double scale) const {
72 return Duration(int64_t(static_cast<double>(nanoseconds_) * scale));
73}
74
76 *this = *this + rhs;
77 return *this;
78}
79
81 *this = *this - rhs;
82 return *this;
83}
84
86 *this = Duration(int64_t(static_cast<double>(nanoseconds_) * scale));
87 return *this;
88}
89
90bool Duration::operator==(const Duration &rhs) const {
91 return nanoseconds_ == rhs.nanoseconds_;
92}
93
94bool Duration::operator!=(const Duration &rhs) const {
95 return nanoseconds_ != rhs.nanoseconds_;
96}
97
98bool Duration::operator>(const Duration &rhs) const {
99 return nanoseconds_ > rhs.nanoseconds_;
100}
101
102bool Duration::operator<(const Duration &rhs) const {
103 return nanoseconds_ < rhs.nanoseconds_;
104}
105
106bool Duration::operator>=(const Duration &rhs) const {
107 return nanoseconds_ >= rhs.nanoseconds_;
108}
109
110bool Duration::operator<=(const Duration &rhs) const {
111 return nanoseconds_ <= rhs.nanoseconds_;
112}
113
114std::ostream &operator<<(std::ostream &os, const Duration &rhs) {
115 std::ios::fmtflags before(os.flags());
116 os << std::fixed << std::setprecision(9) << rhs.ToSecond() << "s";
117 os.flags(before);
118 return os;
119}
120
121} // namespace cyber
122} // namespace apollo
bool operator!=(const Duration &rhs) const
Definition duration.cc:94
Duration & operator=(const Duration &other)
Definition duration.cc:43
Duration operator-() const
Definition duration.cc:69
bool operator>=(const Duration &rhs) const
Definition duration.cc:106
Duration & operator-=(const Duration &rhs)
Definition duration.cc:80
bool operator>(const Duration &rhs) const
Definition duration.cc:98
Duration operator+(const Duration &rhs) const
Definition duration.cc:61
Duration operator*(double scale) const
Definition duration.cc:71
bool IsZero() const
Definition duration.cc:54
double ToSecond() const
Definition duration.cc:48
Duration & operator*=(double scale)
Definition duration.cc:85
int64_t ToNanosecond() const
Definition duration.cc:52
bool operator==(const Duration &rhs) const
Definition duration.cc:90
bool operator<=(const Duration &rhs) const
Definition duration.cc:110
bool operator<(const Duration &rhs) const
Definition duration.cc:102
Duration & operator+=(const Duration &rhs)
Definition duration.cc:75
std::ostream & operator<<(std::ostream &os, const Duration &rhs)
Definition duration.cc:114
class register implement
Definition arena_queue.h:37