diff options
Diffstat (limited to 'remoting/base/multiple_array_input_stream.h')
-rw-r--r-- | remoting/base/multiple_array_input_stream.h | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/remoting/base/multiple_array_input_stream.h b/remoting/base/multiple_array_input_stream.h index 7747da5..a848248 100644 --- a/remoting/base/multiple_array_input_stream.h +++ b/remoting/base/multiple_array_input_stream.h @@ -2,29 +2,39 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// MultipleArrayInputStream implements ZeroCopyInputStream to be used by +// protobuf to decode bytes into a protocol buffer message. +// +// This input stream is made of multiple IOBuffers received from the network. +// This object retains the IOBuffers added to it. +// +// Internally, we wrap each added IOBuffer in a DrainableIOBuffer. This allows +// us to track how much data has been consumed from each IOBuffer. + #ifndef REMOTING_BASE_MULTIPLE_ARRAY_INPUT_STREAM_H_ #define REMOTING_BASE_MULTIPLE_ARRAY_INPUT_STREAM_H_ #include <vector> #include "base/basictypes.h" +#include "base/ref_counted.h" #include "google/protobuf/io/zero_copy_stream.h" +namespace net { +class DrainableIOBuffer; +class IOBuffer; +} // namespace net + namespace remoting { -// A MultipleArrayInputStream provides a ZeroCopyInputStream with multiple -// backing arrays. class MultipleArrayInputStream : public google::protobuf::io::ZeroCopyInputStream { public: - // Construct a MultipleArrayInputStream with |count| backing arrays. - // TODO(hclam): Consider adding block size to see if it has a performance - // gain. MultipleArrayInputStream(); virtual ~MultipleArrayInputStream(); - // Add a new buffer to the list. - void AddBuffer(const char* buffer, int size); + // Add a buffer to the list. |buffer| is retained by this object. + void AddBuffer(net::IOBuffer* buffer, int size); // google::protobuf::io::ZeroCopyInputStream interface. virtual bool Next(const void** data, int* size); @@ -33,11 +43,9 @@ class MultipleArrayInputStream : virtual int64 ByteCount() const; private: - std::vector<const char*> buffers_; - std::vector<int> buffer_sizes_; + std::vector<scoped_refptr<net::DrainableIOBuffer> > buffers_; size_t current_buffer_; - int current_buffer_offset_; int position_; int last_returned_size_; |