Frequency.cpp
Go to the documentation of this file.
1#include "Frequency.h"
2
3#include <iomanip>
4#include <limits>
5#include <sstream>
6
7#include <SimoxUtility/algorithm/string/string_tools.h>
8
10
11namespace armarx::core::time
12{
13
14 Frequency::Frequency(const Duration& cycleDuration) : _cycleDuration{cycleDuration}
15 {
16 ;
17 }
18
20 Frequency::Hertz(const std::int64_t hertz)
21 {
22 if (hertz == 0)
23 {
24 return Frequency(Duration::MicroSeconds(std::numeric_limits<std::int64_t>::max()));
25 }
26 return Frequency(Duration::Seconds(1) / hertz);
27 }
28
31 {
32 if (hertz == 0)
33 {
34 return Frequency(Duration::MicroSeconds(std::numeric_limits<std::int64_t>::max()));
35 }
36 return Frequency(Duration::Seconds(1) / hertz);
37 }
38
39 std::int64_t
41 {
42 if (_cycleDuration.isZero())
43 {
44 return std::numeric_limits<std::int64_t>::max();
45 }
46 return static_cast<std::int64_t>(toHertzDouble() + 0.5);
47 }
48
49 double
51 {
52 if (_cycleDuration.isZero())
53 {
54 return std::numeric_limits<double>::infinity();
55 }
56 return 1 / _cycleDuration.toSecondsDouble();
57 }
58
61 {
62 return _cycleDuration;
63 }
64
65 std::string
67 {
68 if (_cycleDuration.isZero())
69 {
70 return "infinite";
71 }
72
73 return std::to_string(toHertz()) + "Hz";
74 }
75
78 {
80 }
81
88
91 {
93 }
94
101
103 Frequency::operator*(double rhs) const
104 {
105 return Frequency(_cycleDuration / rhs);
106 }
107
109 Frequency::operator*(int rhs) const
110 {
111 return Frequency(_cycleDuration / rhs);
112 }
113
115 Frequency::operator*(std::int64_t rhs) const
116 {
117 return Frequency(_cycleDuration / rhs);
118 }
119
120 Frequency&
122 {
123 _cycleDuration /= rhs;
124 return *this;
125 }
126
127 Frequency&
129 {
130 _cycleDuration /= rhs;
131 return *this;
132 }
133
134 Frequency&
135 Frequency::operator*=(std::int64_t rhs)
136 {
137 _cycleDuration /= rhs;
138 return *this;
139 }
140
141 double
143 {
144 return toHertzDouble() / rhs.toHertzDouble();
145 }
146
148 Frequency::operator/(double rhs) const
149 {
150 return Frequency(_cycleDuration * rhs);
151 }
152
154 Frequency::operator/(int rhs) const
155 {
156 return Frequency(_cycleDuration * rhs);
157 }
158
160 Frequency::operator/(std::int64_t rhs) const
161 {
162 return Frequency(_cycleDuration * rhs);
163 }
164
165 Frequency&
167 {
168 _cycleDuration *= rhs;
169 return *this;
170 }
171
172 Frequency&
174 {
175 _cycleDuration *= rhs;
176 return *this;
177 }
178
179 Frequency&
180 Frequency::operator/=(std::int64_t rhs)
181 {
182 _cycleDuration *= rhs;
183 return *this;
184 }
185
186 bool
187 Frequency::operator<(const Frequency& rhs) const
188 {
189 return _cycleDuration > rhs._cycleDuration;
190 }
191
192 bool
193 Frequency::operator<=(const Frequency& rhs) const
194 {
195 return _cycleDuration >= rhs._cycleDuration;
196 }
197
198 bool
200 {
201 return _cycleDuration == rhs._cycleDuration;
202 }
203
204 bool
206 {
207 return _cycleDuration != rhs._cycleDuration;
208 }
209
210 bool
212 {
213 return _cycleDuration <= rhs._cycleDuration;
214 }
215
216 bool
218 {
219 return _cycleDuration < rhs._cycleDuration;
220 }
221
223 operator/(const double cyclesPerDuration, const Duration& duration)
224 {
225 const double cyclesPerSecond = cyclesPerDuration / duration.toSecondsDouble();
226 return Frequency(Duration::Seconds(1) / cyclesPerSecond);
227 }
228
230 operator/(const int cyclesPerDuration, const Duration& duration)
231 {
232 return static_cast<double>(cyclesPerDuration) / duration;
233 }
234
236 operator/(const std::int64_t cyclesPerDuration, const Duration& duration)
237 {
238 return static_cast<double>(cyclesPerDuration) / duration;
239 }
240
241 std::ostream&
242 operator<<(std::ostream& out, const Frequency& rhs)
243 {
244 out << rhs.toFrequencyString();
245 return out;
246 }
247
248} // namespace armarx::core::time
Represents a duration.
Definition Duration.h:17
static Duration MicroSeconds(std::int64_t microSeconds)
Constructs a duration in microseconds.
Definition Duration.cpp:24
static Duration Seconds(std::int64_t seconds)
Constructs a duration in seconds.
Definition Duration.cpp:72
double toSecondsDouble() const
Returns the amount of seconds.
Definition Duration.cpp:90
Represents a frequency.
Definition Frequency.h:17
Duration toCycleDuration() const
Definition Frequency.cpp:60
bool operator>(const Frequency &rhs) const
bool operator!=(const Frequency &rhs) const
Frequency & operator-=(const Frequency &rhs)
Definition Frequency.cpp:96
Frequency & operator*=(double rhs)
Duration _cycleDuration
Current cycle duration.
Definition Frequency.h:86
bool operator<(const Frequency &rhs) const
std::string toFrequencyString() const
Definition Frequency.cpp:66
Frequency operator-(const Frequency &rhs) const
Definition Frequency.cpp:90
static Frequency HertzDouble(double hertz)
Definition Frequency.cpp:30
static Frequency Hertz(std::int64_t hertz)
Definition Frequency.cpp:20
bool operator>=(const Frequency &rhs) const
std::int64_t toHertz() const
Definition Frequency.cpp:40
Frequency & operator+=(const Frequency &rhs)
Definition Frequency.cpp:83
bool operator<=(const Frequency &rhs) const
bool operator==(const Frequency &rhs) const
Frequency operator*(double rhs) const
Frequency & operator/=(double rhs)
Frequency operator+(const Frequency &rhs) const
Definition Frequency.cpp:77
Frequency(const Duration &cycleDuration)
Definition Frequency.cpp:14
double operator/(const Frequency &rhs) const
std::ostream & operator<<(std::ostream &out, const DateTime &rhs)
Definition DateTime.cpp:203
Frequency operator/(const double cyclesPerDuration, const Duration &duration)