From 1cf15bfe55a3b9c007e9810d13ec210628b64e86 Mon Sep 17 00:00:00 2001 From: Sebastian Jansson Date: Wed, 29 Jan 2020 10:56:25 +0100 Subject: [PATCH] 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 Reviewed-by: Ali Tofigh Cr-Commit-Position: refs/heads/master@{#30416} --- api/units/frequency.h | 12 ++++++++++++ api/units/frequency_unittest.cc | 1 + 2 files changed, 13 insertions(+) diff --git a/api/units/frequency.h b/api/units/frequency.h index 45561f4aee..53bd7c902f 100644 --- a/api/units/frequency.h +++ b/api/units/frequency.h @@ -32,6 +32,11 @@ class Frequency final : public rtc_units_impl::RelativeUnit { return FromFraction(1000, hertz); } template + static constexpr Frequency kHz(T hertz) { + static_assert(std::is_arithmetic::value, ""); + return FromFraction(1000000, hertz); + } + template static constexpr Frequency hertz(T hertz) { static_assert(std::is_arithmetic::value, ""); return FromFraction(1000, hertz); @@ -74,6 +79,13 @@ inline constexpr TimeDelta operator/(int64_t nominator, return TimeDelta::us(nominator * kMegaPerMilli / frequency.millihertz()); } +inline constexpr double operator*(Frequency frequency, TimeDelta time_delta) { + return frequency.hertz() * time_delta.seconds(); +} +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 cabfdfaf4b..16a7e1bb85 100644 --- a/api/units/frequency_unittest.cc +++ b/api/units/frequency_unittest.cc @@ -154,6 +154,7 @@ TEST(FrequencyTest, InfinityOperations) { 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