| Index: remoting/base/multiple_array_input_stream.h
|
| diff --git a/remoting/base/multiple_array_input_stream.h b/remoting/base/multiple_array_input_stream.h
|
| index 7747da58089ee59919a95fa755bb20cb3a554ab9..a8482481aca67246f011a9ddf98f8f484e5efb59 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_;
|
|
|
|
|