From e0a524b5e02f293a0c13fd687334f7e6eedb971d Mon Sep 17 00:00:00 2001 From: Danil Chapovalov Date: Tue, 26 Nov 2024 16:51:18 +0100 Subject: [PATCH] Add default constructor to relative units types 0 is natural default value for types that can be accumulated Having default constructor simplify usage of these types in templated code. Bug: None Change-Id: If005c69018a2a11011bc789502fdbc600cad3278 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/369440 Reviewed-by: Per Kjellander Commit-Queue: Danil Chapovalov Commit-Queue: Per Kjellander Reviewed-by: Mirko Bonadei Cr-Commit-Position: refs/heads/main@{#43460} --- api/units/data_rate.h | 2 +- api/units/data_rate_unittest.cc | 1 + api/units/data_size.h | 2 +- api/units/data_size_unittest.cc | 1 + api/units/frequency.h | 2 +- api/units/frequency_unittest.cc | 1 + api/units/time_delta.h | 2 +- api/units/time_delta_unittest.cc | 1 + modules/rtp_rtcp/include/rtp_rtcp_defines.h | 10 +--------- rtc_base/units/unit_base.h | 1 + 10 files changed, 10 insertions(+), 13 deletions(-) diff --git a/api/units/data_rate.h b/api/units/data_rate.h index 8592416b0d..a9400c0442 100644 --- a/api/units/data_rate.h +++ b/api/units/data_rate.h @@ -46,7 +46,7 @@ class DataRate final : public rtc_units_impl::RelativeUnit { } static constexpr DataRate Infinity() { return PlusInfinity(); } - DataRate() = delete; + constexpr DataRate() = default; template friend void AbslStringify(Sink& sink, DataRate value); diff --git a/api/units/data_rate_unittest.cc b/api/units/data_rate_unittest.cc index 1fd13da9aa..1021921b62 100644 --- a/api/units/data_rate_unittest.cc +++ b/api/units/data_rate_unittest.cc @@ -34,6 +34,7 @@ TEST(DataRateTest, ConstExpr) { constexpr int64_t kValue = 12345; constexpr DataRate kDataRateZero = DataRate::Zero(); constexpr DataRate kDataRateInf = DataRate::Infinity(); + static_assert(DataRate() == kDataRateZero); static_assert(kDataRateZero.IsZero(), ""); static_assert(kDataRateInf.IsInfinite(), ""); static_assert(kDataRateInf.bps_or(-1) == -1, ""); diff --git a/api/units/data_size.h b/api/units/data_size.h index bbe8569b91..78d41b12f8 100644 --- a/api/units/data_size.h +++ b/api/units/data_size.h @@ -29,7 +29,7 @@ class DataSize final : public rtc_units_impl::RelativeUnit { } static constexpr DataSize Infinity() { return PlusInfinity(); } - DataSize() = delete; + constexpr DataSize() = default; template friend void AbslStringify(Sink& sink, DataSize value); diff --git a/api/units/data_size_unittest.cc b/api/units/data_size_unittest.cc index 72dfbce5e2..b198060ec6 100644 --- a/api/units/data_size_unittest.cc +++ b/api/units/data_size_unittest.cc @@ -22,6 +22,7 @@ TEST(DataSizeTest, ConstExpr) { constexpr int64_t kValue = 12345; constexpr DataSize kDataSizeZero = DataSize::Zero(); constexpr DataSize kDataSizeInf = DataSize::Infinity(); + static_assert(DataSize() == kDataSizeZero); static_assert(kDataSizeZero.IsZero(), ""); static_assert(kDataSizeInf.IsInfinite(), ""); static_assert(kDataSizeInf.bytes_or(-1) == -1, ""); diff --git a/api/units/frequency.h b/api/units/frequency.h index 989015d26e..51c53f9ba8 100644 --- a/api/units/frequency.h +++ b/api/units/frequency.h @@ -41,7 +41,7 @@ class Frequency final : public rtc_units_impl::RelativeUnit { return FromFraction(1'000'000, value); } - Frequency() = delete; + constexpr Frequency() = default; template friend void AbslStringify(Sink& sink, Frequency value); diff --git a/api/units/frequency_unittest.cc b/api/units/frequency_unittest.cc index d29849a232..e426e75f01 100644 --- a/api/units/frequency_unittest.cc +++ b/api/units/frequency_unittest.cc @@ -20,6 +20,7 @@ TEST(FrequencyTest, ConstExpr) { constexpr Frequency kFrequencyZero = Frequency::Zero(); constexpr Frequency kFrequencyPlusInf = Frequency::PlusInfinity(); constexpr Frequency kFrequencyMinusInf = Frequency::MinusInfinity(); + static_assert(Frequency() == kFrequencyZero); static_assert(kFrequencyZero.IsZero(), ""); static_assert(kFrequencyPlusInf.IsPlusInfinity(), ""); static_assert(kFrequencyMinusInf.IsMinusInfinity(), ""); diff --git a/api/units/time_delta.h b/api/units/time_delta.h index fdc598070f..29e86c76d4 100644 --- a/api/units/time_delta.h +++ b/api/units/time_delta.h @@ -51,7 +51,7 @@ class TimeDelta final : public rtc_units_impl::RelativeUnit { return FromValue(value); } - TimeDelta() = delete; + constexpr TimeDelta() = default; template friend void AbslStringify(Sink& sink, TimeDelta value); diff --git a/api/units/time_delta_unittest.cc b/api/units/time_delta_unittest.cc index fe8ad65840..8e1aee0c62 100644 --- a/api/units/time_delta_unittest.cc +++ b/api/units/time_delta_unittest.cc @@ -23,6 +23,7 @@ TEST(TimeDeltaTest, ConstExpr) { constexpr TimeDelta kTimeDeltaZero = TimeDelta::Zero(); constexpr TimeDelta kTimeDeltaPlusInf = TimeDelta::PlusInfinity(); constexpr TimeDelta kTimeDeltaMinusInf = TimeDelta::MinusInfinity(); + static_assert(TimeDelta() == kTimeDeltaZero); static_assert(kTimeDeltaZero.IsZero(), ""); static_assert(kTimeDeltaPlusInf.IsPlusInfinity(), ""); static_assert(kTimeDeltaMinusInf.IsMinusInfinity(), ""); diff --git a/modules/rtp_rtcp/include/rtp_rtcp_defines.h b/modules/rtp_rtcp/include/rtp_rtcp_defines.h index c9d1f17bc5..ca6e725cb5 100644 --- a/modules/rtp_rtcp/include/rtp_rtcp_defines.h +++ b/modules/rtp_rtcp/include/rtp_rtcp_defines.h @@ -356,16 +356,8 @@ struct StreamDataCounters { }; class RtpSendRates { - template - constexpr std::array make_zero_array( - std::index_sequence) { - return {{(static_cast(Is), DataRate::Zero())...}}; - } - public: - RtpSendRates() - : send_rates_( - make_zero_array(std::make_index_sequence())) {} + constexpr RtpSendRates() = default; RtpSendRates(const RtpSendRates& rhs) = default; RtpSendRates& operator=(const RtpSendRates&) = default; diff --git a/rtc_base/units/unit_base.h b/rtc_base/units/unit_base.h index fff69594c9..3b7c1b2946 100644 --- a/rtc_base/units/unit_base.h +++ b/rtc_base/units/unit_base.h @@ -275,6 +275,7 @@ class RelativeUnit : public UnitBase { protected: using UnitBase::UnitBase; + constexpr RelativeUnit() : UnitBase(0) {} }; template