xref: /aosp_15_r20/external/cronet/net/spdy/spdy_read_queue.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2013 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #ifndef NET_SPDY_SPDY_READ_QUEUE_H_
6*6777b538SAndroid Build Coastguard Worker #define NET_SPDY_SPDY_READ_QUEUE_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include <cstddef>
9*6777b538SAndroid Build Coastguard Worker #include <memory>
10*6777b538SAndroid Build Coastguard Worker 
11*6777b538SAndroid Build Coastguard Worker #include "base/containers/circular_deque.h"
12*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h"
13*6777b538SAndroid Build Coastguard Worker 
14*6777b538SAndroid Build Coastguard Worker namespace net {
15*6777b538SAndroid Build Coastguard Worker 
16*6777b538SAndroid Build Coastguard Worker class SpdyBuffer;
17*6777b538SAndroid Build Coastguard Worker 
18*6777b538SAndroid Build Coastguard Worker // A FIFO queue of incoming data from a SPDY connection. Useful for
19*6777b538SAndroid Build Coastguard Worker // SpdyStream delegates.
20*6777b538SAndroid Build Coastguard Worker class NET_EXPORT_PRIVATE SpdyReadQueue {
21*6777b538SAndroid Build Coastguard Worker  public:
22*6777b538SAndroid Build Coastguard Worker   SpdyReadQueue();
23*6777b538SAndroid Build Coastguard Worker 
24*6777b538SAndroid Build Coastguard Worker   SpdyReadQueue(const SpdyReadQueue&) = delete;
25*6777b538SAndroid Build Coastguard Worker   SpdyReadQueue& operator=(const SpdyReadQueue&) = delete;
26*6777b538SAndroid Build Coastguard Worker 
27*6777b538SAndroid Build Coastguard Worker   ~SpdyReadQueue();
28*6777b538SAndroid Build Coastguard Worker 
29*6777b538SAndroid Build Coastguard Worker   // Returns whether there's anything in the queue.
30*6777b538SAndroid Build Coastguard Worker   bool IsEmpty() const;
31*6777b538SAndroid Build Coastguard Worker 
32*6777b538SAndroid Build Coastguard Worker   // Returns the total number of bytes in the queue.
33*6777b538SAndroid Build Coastguard Worker   size_t GetTotalSize() const;
34*6777b538SAndroid Build Coastguard Worker 
35*6777b538SAndroid Build Coastguard Worker   // Enqueues the bytes in |buffer|.
36*6777b538SAndroid Build Coastguard Worker   void Enqueue(std::unique_ptr<SpdyBuffer> buffer);
37*6777b538SAndroid Build Coastguard Worker 
38*6777b538SAndroid Build Coastguard Worker   // Dequeues up to |len| (which must be positive) bytes into
39*6777b538SAndroid Build Coastguard Worker   // |out|. Returns the number of bytes dequeued.
40*6777b538SAndroid Build Coastguard Worker   size_t Dequeue(char* out, size_t len);
41*6777b538SAndroid Build Coastguard Worker 
42*6777b538SAndroid Build Coastguard Worker   // Removes all bytes from the queue.
43*6777b538SAndroid Build Coastguard Worker   void Clear();
44*6777b538SAndroid Build Coastguard Worker 
45*6777b538SAndroid Build Coastguard Worker  private:
46*6777b538SAndroid Build Coastguard Worker   // Class invariant:
47*6777b538SAndroid Build Coastguard Worker   // |total_size_| is the sum of GetRemainingSize() of |queue_|'s elements.
48*6777b538SAndroid Build Coastguard Worker   base::circular_deque<std::unique_ptr<SpdyBuffer>> queue_;
49*6777b538SAndroid Build Coastguard Worker   size_t total_size_ = 0;
50*6777b538SAndroid Build Coastguard Worker };
51*6777b538SAndroid Build Coastguard Worker 
52*6777b538SAndroid Build Coastguard Worker }  // namespace net
53*6777b538SAndroid Build Coastguard Worker 
54*6777b538SAndroid Build Coastguard Worker #endif  // NET_SPDY_SPDY_READ_QUEUE_H_
55