| Index: net/quic/quic_protocol.h
|
| diff --git a/net/quic/quic_protocol.h b/net/quic/quic_protocol.h
|
| index b6aaee3d5661ebf8a1ff4bffa4b44ec91caf8dd2..83a7c63223f53af3e29c8f3d2090dd8e36c181f4 100644
|
| --- a/net/quic/quic_protocol.h
|
| +++ b/net/quic/quic_protocol.h
|
| @@ -722,6 +722,61 @@ struct NET_EXPORT_PRIVATE QuicStopWaitingFrame {
|
| QuicPacketNumber least_unacked;
|
| };
|
|
|
| +// A sequence of packet numbers where each number is unique. Intended to be used
|
| +// in a sliding window fashion, where smaller old packet numbers are removed and
|
| +// larger new packet numbers are added, with the occasional random access.
|
| +class NET_EXPORT_PRIVATE PacketNumberQueue {
|
| + public:
|
| + PacketNumberQueue();
|
| + ~PacketNumberQueue();
|
| +
|
| + using iterator = PacketNumberSet::iterator;
|
| + using const_iterator = PacketNumberSet::const_iterator;
|
| +
|
| + // Adds |packet_number| to the set of packets in the queue.
|
| + void Add(QuicPacketNumber packet_number);
|
| +
|
| + // Adds packets between [lower, higher) to the set of packets in the queue.
|
| + void Add(QuicPacketNumber lower, QuicPacketNumber higher);
|
| +
|
| + // Removes |packet_number| from the set of packets in the queue.
|
| + void Remove(QuicPacketNumber packet_number);
|
| +
|
| + // Removes packets with values less than |higher| from the set of packets in
|
| + // the queue. Returns true if packets were removed.
|
| + bool RemoveUpTo(QuicPacketNumber higher);
|
| +
|
| + // Returns true if the queue contains |packet_number|.
|
| + bool Contains(QuicPacketNumber packet_number) const;
|
| +
|
| + // Returns true if the queue is empty.
|
| + bool Empty() const;
|
| +
|
| + // Returns the minimum packet number stored in the queue. It is undefined
|
| + // behavior to call this if the queue is empty.
|
| + QuicPacketNumber Min() const;
|
| +
|
| + // Returns the maximum packet number stored in the queue. It is undefined
|
| + // behavior to call this if the queue is empty.
|
| + QuicPacketNumber Max() const;
|
| +
|
| + // Returns the number of unique packets stored in the queue.
|
| + size_t NumPackets() const;
|
| +
|
| + const_iterator begin() const;
|
| + const_iterator end() const;
|
| + const_iterator lower_bound(QuicPacketNumber packet_number) const;
|
| + const_iterator upper_bound(QuicPacketNumber packet_number) const;
|
| +
|
| + NET_EXPORT_PRIVATE friend std::ostream& operator<<(
|
| + std::ostream& os,
|
| + const PacketNumberQueue& q);
|
| +
|
| + private:
|
| + // TODO(jdorfman): Can be optimized using an interval set like data structure.
|
| + PacketNumberSet packet_numbers_;
|
| +};
|
| +
|
| struct NET_EXPORT_PRIVATE QuicAckFrame {
|
| QuicAckFrame();
|
| ~QuicAckFrame();
|
| @@ -747,10 +802,8 @@ struct NET_EXPORT_PRIVATE QuicAckFrame {
|
| // sent.
|
| QuicTime::Delta delta_time_largest_observed;
|
|
|
| - // TODO(satyamshekhar): Can be optimized using an interval set like data
|
| - // structure.
|
| // The set of packets which we're expecting and have not received.
|
| - PacketNumberSet missing_packets;
|
| + PacketNumberQueue missing_packets;
|
|
|
| // Whether the ack had to be truncated when sent.
|
| bool is_truncated;
|
| @@ -769,11 +822,6 @@ struct NET_EXPORT_PRIVATE QuicAckFrame {
|
| bool NET_EXPORT_PRIVATE IsAwaitingPacket(const QuicAckFrame& ack_frame,
|
| QuicPacketNumber packet_number);
|
|
|
| -// Inserts missing packets between [lower, higher).
|
| -void NET_EXPORT_PRIVATE InsertMissingPacketsBetween(QuicAckFrame* ack_frame,
|
| - QuicPacketNumber lower,
|
| - QuicPacketNumber higher);
|
| -
|
| // Defines for all types of congestion control algorithms that can be used in
|
| // QUIC. Note that this is separate from the congestion feedback type -
|
| // some congestion control algorithms may use the same feedback type
|
|
|