summaryrefslogtreecommitdiffstats
path: root/net/base/io_buffer.cc
diff options
context:
space:
mode:
authorvandebo@chromium.org <vandebo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-14 17:35:37 +0000
committervandebo@chromium.org <vandebo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-14 17:35:37 +0000
commitc19c715aaa359f0d99fa788051989ce2e1d4f89a (patch)
tree30d7fca8bac962eb0c4b7405a19deb7fd8293bf2 /net/base/io_buffer.cc
parent434171fd3e3d28404c66416a4c98d492ea975b3f (diff)
downloadchromium_src-c19c715aaa359f0d99fa788051989ce2e1d4f89a.zip
chromium_src-c19c715aaa359f0d99fa788051989ce2e1d4f89a.tar.gz
chromium_src-c19c715aaa359f0d99fa788051989ce2e1d4f89a.tar.bz2
A couple new io buffers that encapsulate more data and are therefore easier to use and easier to reason about. Inspired by RequestHeaders and ResponseHeaders in http_network_transaction.h Separated out of the refactoring of HttpNetworkTransaction to support pipelining. (http://codereview.chromium.org/249031)
BUG=13289 TEST=none Review URL: http://codereview.chromium.org/264025 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@28978 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/base/io_buffer.cc')
-rw-r--r--net/base/io_buffer.cc25
1 files changed, 22 insertions, 3 deletions
diff --git a/net/base/io_buffer.cc b/net/base/io_buffer.cc
index eb7094b..d348f37 100644
--- a/net/base/io_buffer.cc
+++ b/net/base/io_buffer.cc
@@ -12,9 +12,28 @@ IOBuffer::IOBuffer(int buffer_size) {
DCHECK(buffer_size > 0);
data_ = new char[buffer_size];
}
-void ReusedIOBuffer::SetOffset(int offset) {
- DCHECK(offset >= 0 && offset < size_);
- data_ = base_->data() + offset;
+
+void DrainableIOBuffer::SetOffset(int bytes) {
+ DCHECK(bytes >= 0 && bytes <= size_);
+ used_ = bytes;
+ data_ = base_->data() + used_;
+}
+
+void GrowableIOBuffer::set_capacity(int capacity) {
+ DCHECK_GE(capacity, 0);
+ real_data_.reset(static_cast<char*>(realloc(real_data_.release(), capacity)));
+ capacity_ = capacity;
+ CHECK(real_data_.get() != NULL || capacity == 0);
+ if (offset_ > capacity)
+ set_offset(capacity);
+ else
+ set_offset(offset_); // The pointer may have changed.
+}
+
+void GrowableIOBuffer::set_offset(int offset) {
+ DCHECK(offset >= 0 && offset <= capacity_);
+ offset_ = offset;
+ data_ = real_data_.get() + offset;
}
} // namespace net