Adds product operator for TimeDelta and Frequency
Also adding kHz factory function for Frequency class.
Bug: webrtc:9883
Change-Id: Ide44910d50eb9616de2bb0c66b8c62493d2be92e
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/167725
Commit-Queue: Sebastian Jansson <srte@webrtc.org>
Reviewed-by: Ali Tofigh <alito@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#30416}
diff --git a/api/units/frequency.h b/api/units/frequency.h
index 45561f4..53bd7c9 100644
--- a/api/units/frequency.h
+++ b/api/units/frequency.h
@@ -32,6 +32,11 @@
return FromFraction(1000, hertz);
}
template <typename T>
+ static constexpr Frequency kHz(T hertz) {
+ static_assert(std::is_arithmetic<T>::value, "");
+ return FromFraction(1000000, hertz);
+ }
+ template <typename T>
static constexpr Frequency hertz(T hertz) {
static_assert(std::is_arithmetic<T>::value, "");
return FromFraction(1000, hertz);
@@ -74,6 +79,13 @@
return TimeDelta::us(nominator * kMegaPerMilli / frequency.millihertz());
}
+inline constexpr double operator*(Frequency frequency, TimeDelta time_delta) {
+ return frequency.hertz<double>() * time_delta.seconds<double>();
+}
+inline constexpr double operator*(TimeDelta time_delta, Frequency frequency) {
+ return frequency * time_delta;
+}
+
std::string ToString(Frequency value);
inline std::string ToLogString(Frequency value) {
return ToString(value);
diff --git a/api/units/frequency_unittest.cc b/api/units/frequency_unittest.cc
index cabfdfa..16a7e1b 100644
--- a/api/units/frequency_unittest.cc
+++ b/api/units/frequency_unittest.cc
@@ -154,6 +154,7 @@
TEST(UnitConversionTest, TimeDeltaAndFrequency) {
EXPECT_EQ(1 / Frequency::hertz(50), TimeDelta::ms(20));
EXPECT_EQ(1 / TimeDelta::ms(20), Frequency::hertz(50));
+ EXPECT_EQ(Frequency::kHz(200) * TimeDelta::ms(2), 400.0);
}
} // namespace test
} // namespace webrtc