diff --git a/quic/priority/HTTPPriorityQueue.cpp b/quic/priority/HTTPPriorityQueue.cpp index 3cfa5fa7d..dd1e790e1 100644 --- a/quic/priority/HTTPPriorityQueue.cpp +++ b/quic/priority/HTTPPriorityQueue.cpp @@ -13,6 +13,23 @@ constexpr size_t kDestroyIndexThreshold = 50; } // namespace namespace quic { + +/*implicit*/ HTTPPriorityQueue::Priority::Priority( + const PriorityQueue::Priority& basePriority) + : PriorityQueue::Priority(basePriority) { + if (!isInitialized()) { + getFields() = kDefaultPriority; + } +} + +HTTPPriorityQueue::Priority::Priority(uint8_t u, bool i, OrderId o) { + auto& fields = getFields(); + fields.urgency = u; + fields.incremental = i; + fields.order = (i ? 0 : o); + fields.paused = false; +} + PriorityQueue::PriorityLogFields HTTPPriorityQueue::toLogFields( const PriorityQueue::Priority& pri) const { // This is defined by the QLOG schema diff --git a/quic/priority/HTTPPriorityQueue.h b/quic/priority/HTTPPriorityQueue.h index 0de146701..208418516 100644 --- a/quic/priority/HTTPPriorityQueue.h +++ b/quic/priority/HTTPPriorityQueue.h @@ -41,20 +41,9 @@ class HTTPPriorityQueue : public quic::PriorityQueue { // TODO: change default priority to (3, false, false, 0) to match spec static constexpr HTTPPriority kDefaultPriority{3, false, true, 0}; - /*implicit*/ Priority(const PriorityQueue::Priority& basePriority) - : PriorityQueue::Priority(basePriority) { - if (!isInitialized()) { - getFields() = kDefaultPriority; - } - } + /*implicit*/ Priority(const PriorityQueue::Priority& basePriority); - Priority(uint8_t u, bool i, OrderId o = 0) { - auto& fields = getFields(); - fields.urgency = u; - fields.incremental = i; - fields.order = (i ? 0 : o); - fields.paused = false; - } + Priority(uint8_t u, bool i, OrderId o = 0); enum Paused { PAUSED }; @@ -66,7 +55,7 @@ class HTTPPriorityQueue : public quic::PriorityQueue { Priority& operator=(const Priority&) = default; Priority(Priority&&) = default; Priority& operator=(Priority&&) = default; - ~Priority() override = default; + ~Priority() = default; const HTTPPriority* operator->() const { return &getFields(); @@ -94,7 +83,7 @@ class HTTPPriorityQueue : public quic::PriorityQueue { } [[nodiscard]] uint64_t toUint64() const { - auto& fields = getFields(); + const auto& fields = getFields(); return ( (uint64_t(fields.urgency) << 61) | (uint64_t(fields.paused) << 60) | (uint64_t(fields.incremental) << 59) | fields.order); diff --git a/quic/priority/PriorityQueue.h b/quic/priority/PriorityQueue.h index 6ea457030..388dae437 100644 --- a/quic/priority/PriorityQueue.h +++ b/quic/priority/PriorityQueue.h @@ -122,7 +122,7 @@ class PriorityQueue { public: Priority() : storage_{kUninitialized} {} - virtual ~Priority() = default; + ~Priority() = default; [[nodiscard]] bool isInitialized() const { return storage_ != kUninitialized; @@ -133,16 +133,14 @@ class PriorityQueue { template T& getPriority() { - static_assert( - std::is_trivially_copyable::value, "T must be trivially copyable"); + static_assert(std::is_pod::value, "T must be trivially copyable"); static_assert(sizeof(T) <= sizeof(StorageType), "T must fit in storage_"); return *reinterpret_cast(storage_.data()); } template const T& getPriority() const { - static_assert( - std::is_trivially_copyable::value, "T must be trivially copyable"); + static_assert(std::is_pod::value, "T must be trivially copyable"); static_assert(sizeof(T) <= sizeof(StorageType), "T must fit in storage_"); return *reinterpret_cast(storage_.data()); }