diff options
author | vandebo@chromium.org <vandebo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-14 17:35:37 +0000 |
---|---|---|
committer | vandebo@chromium.org <vandebo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-14 17:35:37 +0000 |
commit | c19c715aaa359f0d99fa788051989ce2e1d4f89a (patch) | |
tree | 30d7fca8bac962eb0c4b7405a19deb7fd8293bf2 /net/base/io_buffer.cc | |
parent | 434171fd3e3d28404c66416a4c98d492ea975b3f (diff) | |
download | chromium_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.cc | 25 |
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 |