From 7356a5666de8054bad419f326b346b571c19de14 Mon Sep 17 00:00:00 2001 From: Danil Chapovalov Date: Mon, 20 Jan 2020 13:02:44 +0100 Subject: [PATCH] Remove unit_base functions FromStaticX instead make functions FromX constexpr and use them. Bug: None Change-Id: I826c8ad5ac8b3bd97f298a99c40b31b8c63b5f85 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/159220 Commit-Queue: Danil Chapovalov Reviewed-by: Sebastian Jansson Cr-Commit-Position: refs/heads/master@{#30321} --- api/units/data_rate.h | 8 +++---- api/units/data_size.h | 2 +- api/units/frequency.h | 4 ++-- api/units/time_delta.h | 10 ++++---- api/units/timestamp.h | 10 ++++---- rtc_base/units/unit_base.h | 36 +++++++--------------------- rtc_base/units/unit_base_unittest.cc | 13 ++++------ 7 files changed, 30 insertions(+), 53 deletions(-) diff --git a/api/units/data_rate.h b/api/units/data_rate.h index b04ee38bbf..0d3d6530a7 100644 --- a/api/units/data_rate.h +++ b/api/units/data_rate.h @@ -35,11 +35,11 @@ class DataRate final : public rtc_units_impl::RelativeUnit { static constexpr DataRate Infinity() { return PlusInfinity(); } template static constexpr DataRate BitsPerSec() { - return FromStaticValue(); + return FromValue(bps); } template static constexpr DataRate KilobitsPerSec() { - return FromStaticFraction(); + return FromFraction(1000, kbps); } template static constexpr DataRate bps(T bits_per_second) { @@ -49,12 +49,12 @@ class DataRate final : public rtc_units_impl::RelativeUnit { template static constexpr DataRate bytes_per_sec(T bytes_per_second) { static_assert(std::is_arithmetic::value, ""); - return FromFraction<8>(bytes_per_second); + return FromFraction(8, bytes_per_second); } template static constexpr DataRate kbps(T kilobits_per_sec) { static_assert(std::is_arithmetic::value, ""); - return FromFraction<1000>(kilobits_per_sec); + return FromFraction(1000, kilobits_per_sec); } template constexpr T bps() const { diff --git a/api/units/data_size.h b/api/units/data_size.h index 24a1351104..ca4c1da212 100644 --- a/api/units/data_size.h +++ b/api/units/data_size.h @@ -28,7 +28,7 @@ class DataSize final : public rtc_units_impl::RelativeUnit { static constexpr DataSize Infinity() { return PlusInfinity(); } template static constexpr DataSize Bytes() { - return FromStaticValue(); + return FromValue(bytes); } template diff --git a/api/units/frequency.h b/api/units/frequency.h index e9aa64a6e8..aa54cb5db8 100644 --- a/api/units/frequency.h +++ b/api/units/frequency.h @@ -29,12 +29,12 @@ class Frequency final : public rtc_units_impl::RelativeUnit { Frequency() = delete; template static constexpr Frequency Hertz() { - return FromStaticFraction(); + return FromFraction(1000, hertz); } template static Frequency hertz(T hertz) { static_assert(std::is_arithmetic::value, ""); - return FromFraction<1000>(hertz); + return FromFraction(1000, hertz); } template static Frequency millihertz(T hertz) { diff --git a/api/units/time_delta.h b/api/units/time_delta.h index 4ab83ec1c1..0c3fd9d0a8 100644 --- a/api/units/time_delta.h +++ b/api/units/time_delta.h @@ -35,25 +35,25 @@ class TimeDelta final : public rtc_units_impl::RelativeUnit { TimeDelta() = delete; template static constexpr TimeDelta Seconds() { - return FromStaticFraction(); + return FromFraction(1'000'000, seconds); } template static constexpr TimeDelta Millis() { - return FromStaticFraction(); + return FromFraction(1000, ms); } template static constexpr TimeDelta Micros() { - return FromStaticValue(); + return FromValue(us); } template static TimeDelta seconds(T seconds) { static_assert(std::is_arithmetic::value, ""); - return FromFraction<1000000>(seconds); + return FromFraction(1'000'000, seconds); } template static TimeDelta ms(T milliseconds) { static_assert(std::is_arithmetic::value, ""); - return FromFraction<1000>(milliseconds); + return FromFraction(1000, milliseconds); } template static TimeDelta us(T microseconds) { diff --git a/api/units/timestamp.h b/api/units/timestamp.h index ed757af668..e12e99d982 100644 --- a/api/units/timestamp.h +++ b/api/units/timestamp.h @@ -32,26 +32,26 @@ class Timestamp final : public rtc_units_impl::UnitBase { template static constexpr Timestamp Seconds() { - return FromStaticFraction(); + return FromFraction(1'000'000, seconds); } template static constexpr Timestamp Millis() { - return FromStaticFraction(); + return FromFraction(1000, ms); } template static constexpr Timestamp Micros() { - return FromStaticValue(); + return FromValue(us); } template static Timestamp seconds(T seconds) { static_assert(std::is_arithmetic::value, ""); - return FromFraction<1000000>(seconds); + return FromFraction(1'000'000, seconds); } template static Timestamp ms(T milliseconds) { static_assert(std::is_arithmetic::value, ""); - return FromFraction<1000>(milliseconds); + return FromFraction(1000, milliseconds); } template static Timestamp us(T microseconds) { diff --git a/rtc_base/units/unit_base.h b/rtc_base/units/unit_base.h index 533d35583d..b988f2801f 100644 --- a/rtc_base/units/unit_base.h +++ b/rtc_base/units/unit_base.h @@ -90,26 +90,10 @@ class UnitBase { } protected: - template - static constexpr Unit_T FromStaticValue() { - static_assert(value >= 0 || !Unit_T::one_sided, ""); - static_assert(value > MinusInfinityVal(), ""); - static_assert(value < PlusInfinityVal(), ""); - return Unit_T(value); - } - - template - static constexpr Unit_T FromStaticFraction() { - static_assert(fraction_value >= 0 || !Unit_T::one_sided, ""); - static_assert(fraction_value > MinusInfinityVal() / Denominator, ""); - static_assert(fraction_value < PlusInfinityVal() / Denominator, ""); - return Unit_T(fraction_value * Denominator); - } - template < typename T, typename std::enable_if::value>::type* = nullptr> - static Unit_T FromValue(T value) { + static constexpr Unit_T FromValue(T value) { if (Unit_T::one_sided) RTC_DCHECK_GE(value, 0); RTC_DCHECK_GT(value, MinusInfinityVal()); @@ -119,7 +103,7 @@ class UnitBase { template ::value>::type* = nullptr> - static Unit_T FromValue(T value) { + static constexpr Unit_T FromValue(T value) { if (value == std::numeric_limits::infinity()) { return PlusInfinity(); } else if (value == -std::numeric_limits::infinity()) { @@ -131,22 +115,20 @@ class UnitBase { } template < - int64_t Denominator, typename T, typename std::enable_if::value>::type* = nullptr> - static Unit_T FromFraction(T value) { + static constexpr Unit_T FromFraction(int64_t denominator, T value) { if (Unit_T::one_sided) RTC_DCHECK_GE(value, 0); - RTC_DCHECK_GT(value, MinusInfinityVal() / Denominator); - RTC_DCHECK_LT(value, PlusInfinityVal() / Denominator); - return Unit_T(rtc::dchecked_cast(value * Denominator)); + RTC_DCHECK_GT(value, MinusInfinityVal() / denominator); + RTC_DCHECK_LT(value, PlusInfinityVal() / denominator); + return Unit_T(rtc::dchecked_cast(value * denominator)); } - template ::value>::type* = nullptr> - static Unit_T FromFraction(T value) { - return FromValue(value * Denominator); + static constexpr Unit_T FromFraction(int64_t denominator, T value) { + return FromValue(value * denominator); } template diff --git a/rtc_base/units/unit_base_unittest.cc b/rtc_base/units/unit_base_unittest.cc index f8c8503dec..ccb5ce05b3 100644 --- a/rtc_base/units/unit_base_unittest.cc +++ b/rtc_base/units/unit_base_unittest.cc @@ -18,18 +18,13 @@ class TestUnit final : public rtc_units_impl::RelativeUnit { public: TestUnit() = delete; - using UnitBase::FromStaticValue; using UnitBase::FromValue; using UnitBase::ToValue; using UnitBase::ToValueOr; - template - static constexpr TestUnit FromStaticKilo() { - return FromStaticFraction(); - } template - static TestUnit FromKilo(T kilo) { - return FromFraction<1000>(kilo); + static constexpr TestUnit FromKilo(T kilo) { + return FromFraction(1000, kilo); } template T ToKilo() const { @@ -62,8 +57,8 @@ TEST(UnitBaseTest, ConstExpr) { static_assert(kTestUnitPlusInf > kTestUnitZero, ""); - constexpr TestUnit kTestUnitKilo = TestUnit::FromStaticKilo(); - constexpr TestUnit kTestUnitValue = TestUnit::FromStaticValue(); + constexpr TestUnit kTestUnitKilo = TestUnit::FromKilo(kValue); + constexpr TestUnit kTestUnitValue = TestUnit::FromValue(kValue); static_assert(kTestUnitKilo.ToKiloOr(0) == kValue, ""); static_assert(kTestUnitValue.ToValueOr(0) == kValue, "");