summaryrefslogtreecommitdiffstats
path: root/remoting/base/multiple_array_input_stream.h
diff options
context:
space:
mode:
Diffstat (limited to 'remoting/base/multiple_array_input_stream.h')
-rw-r--r--remoting/base/multiple_array_input_stream.h28
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_;