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 <perkj@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Commit-Queue: Per Kjellander <perkj@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#43460}
This commit is contained in:
Danil Chapovalov 2024-11-26 16:51:18 +01:00 committed by WebRTC LUCI CQ
parent 72b5769bb8
commit e0a524b5e0
10 changed files with 10 additions and 13 deletions

View File

@ -46,7 +46,7 @@ class DataRate final : public rtc_units_impl::RelativeUnit<DataRate> {
} }
static constexpr DataRate Infinity() { return PlusInfinity(); } static constexpr DataRate Infinity() { return PlusInfinity(); }
DataRate() = delete; constexpr DataRate() = default;
template <typename Sink> template <typename Sink>
friend void AbslStringify(Sink& sink, DataRate value); friend void AbslStringify(Sink& sink, DataRate value);

View File

@ -34,6 +34,7 @@ TEST(DataRateTest, ConstExpr) {
constexpr int64_t kValue = 12345; constexpr int64_t kValue = 12345;
constexpr DataRate kDataRateZero = DataRate::Zero(); constexpr DataRate kDataRateZero = DataRate::Zero();
constexpr DataRate kDataRateInf = DataRate::Infinity(); constexpr DataRate kDataRateInf = DataRate::Infinity();
static_assert(DataRate() == kDataRateZero);
static_assert(kDataRateZero.IsZero(), ""); static_assert(kDataRateZero.IsZero(), "");
static_assert(kDataRateInf.IsInfinite(), ""); static_assert(kDataRateInf.IsInfinite(), "");
static_assert(kDataRateInf.bps_or(-1) == -1, ""); static_assert(kDataRateInf.bps_or(-1) == -1, "");

View File

@ -29,7 +29,7 @@ class DataSize final : public rtc_units_impl::RelativeUnit<DataSize> {
} }
static constexpr DataSize Infinity() { return PlusInfinity(); } static constexpr DataSize Infinity() { return PlusInfinity(); }
DataSize() = delete; constexpr DataSize() = default;
template <typename Sink> template <typename Sink>
friend void AbslStringify(Sink& sink, DataSize value); friend void AbslStringify(Sink& sink, DataSize value);

View File

@ -22,6 +22,7 @@ TEST(DataSizeTest, ConstExpr) {
constexpr int64_t kValue = 12345; constexpr int64_t kValue = 12345;
constexpr DataSize kDataSizeZero = DataSize::Zero(); constexpr DataSize kDataSizeZero = DataSize::Zero();
constexpr DataSize kDataSizeInf = DataSize::Infinity(); constexpr DataSize kDataSizeInf = DataSize::Infinity();
static_assert(DataSize() == kDataSizeZero);
static_assert(kDataSizeZero.IsZero(), ""); static_assert(kDataSizeZero.IsZero(), "");
static_assert(kDataSizeInf.IsInfinite(), ""); static_assert(kDataSizeInf.IsInfinite(), "");
static_assert(kDataSizeInf.bytes_or(-1) == -1, ""); static_assert(kDataSizeInf.bytes_or(-1) == -1, "");

View File

@ -41,7 +41,7 @@ class Frequency final : public rtc_units_impl::RelativeUnit<Frequency> {
return FromFraction(1'000'000, value); return FromFraction(1'000'000, value);
} }
Frequency() = delete; constexpr Frequency() = default;
template <typename Sink> template <typename Sink>
friend void AbslStringify(Sink& sink, Frequency value); friend void AbslStringify(Sink& sink, Frequency value);

View File

@ -20,6 +20,7 @@ TEST(FrequencyTest, ConstExpr) {
constexpr Frequency kFrequencyZero = Frequency::Zero(); constexpr Frequency kFrequencyZero = Frequency::Zero();
constexpr Frequency kFrequencyPlusInf = Frequency::PlusInfinity(); constexpr Frequency kFrequencyPlusInf = Frequency::PlusInfinity();
constexpr Frequency kFrequencyMinusInf = Frequency::MinusInfinity(); constexpr Frequency kFrequencyMinusInf = Frequency::MinusInfinity();
static_assert(Frequency() == kFrequencyZero);
static_assert(kFrequencyZero.IsZero(), ""); static_assert(kFrequencyZero.IsZero(), "");
static_assert(kFrequencyPlusInf.IsPlusInfinity(), ""); static_assert(kFrequencyPlusInf.IsPlusInfinity(), "");
static_assert(kFrequencyMinusInf.IsMinusInfinity(), ""); static_assert(kFrequencyMinusInf.IsMinusInfinity(), "");

View File

@ -51,7 +51,7 @@ class TimeDelta final : public rtc_units_impl::RelativeUnit<TimeDelta> {
return FromValue(value); return FromValue(value);
} }
TimeDelta() = delete; constexpr TimeDelta() = default;
template <typename Sink> template <typename Sink>
friend void AbslStringify(Sink& sink, TimeDelta value); friend void AbslStringify(Sink& sink, TimeDelta value);

View File

@ -23,6 +23,7 @@ TEST(TimeDeltaTest, ConstExpr) {
constexpr TimeDelta kTimeDeltaZero = TimeDelta::Zero(); constexpr TimeDelta kTimeDeltaZero = TimeDelta::Zero();
constexpr TimeDelta kTimeDeltaPlusInf = TimeDelta::PlusInfinity(); constexpr TimeDelta kTimeDeltaPlusInf = TimeDelta::PlusInfinity();
constexpr TimeDelta kTimeDeltaMinusInf = TimeDelta::MinusInfinity(); constexpr TimeDelta kTimeDeltaMinusInf = TimeDelta::MinusInfinity();
static_assert(TimeDelta() == kTimeDeltaZero);
static_assert(kTimeDeltaZero.IsZero(), ""); static_assert(kTimeDeltaZero.IsZero(), "");
static_assert(kTimeDeltaPlusInf.IsPlusInfinity(), ""); static_assert(kTimeDeltaPlusInf.IsPlusInfinity(), "");
static_assert(kTimeDeltaMinusInf.IsMinusInfinity(), ""); static_assert(kTimeDeltaMinusInf.IsMinusInfinity(), "");

View File

@ -356,16 +356,8 @@ struct StreamDataCounters {
}; };
class RtpSendRates { class RtpSendRates {
template <std::size_t... Is>
constexpr std::array<DataRate, sizeof...(Is)> make_zero_array(
std::index_sequence<Is...>) {
return {{(static_cast<void>(Is), DataRate::Zero())...}};
}
public: public:
RtpSendRates() constexpr RtpSendRates() = default;
: send_rates_(
make_zero_array(std::make_index_sequence<kNumMediaTypes>())) {}
RtpSendRates(const RtpSendRates& rhs) = default; RtpSendRates(const RtpSendRates& rhs) = default;
RtpSendRates& operator=(const RtpSendRates&) = default; RtpSendRates& operator=(const RtpSendRates&) = default;

View File

@ -275,6 +275,7 @@ class RelativeUnit : public UnitBase<Unit_T> {
protected: protected:
using UnitBase<Unit_T>::UnitBase; using UnitBase<Unit_T>::UnitBase;
constexpr RelativeUnit() : UnitBase<Unit_T>(0) {}
}; };
template <class Unit_T> template <class Unit_T>