Index: net/tools/balsa/simple_buffer.cc |
diff --git a/net/tools/balsa/simple_buffer.cc b/net/tools/balsa/simple_buffer.cc |
deleted file mode 100644 |
index 5e02a7b8d68df34da71dee928d9c8061e7480399..0000000000000000000000000000000000000000 |
--- a/net/tools/balsa/simple_buffer.cc |
+++ /dev/null |
@@ -1,208 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "net/tools/balsa/simple_buffer.h" |
-#include "base/logging.h" |
- |
-// Some of the following member functions are marked inlined, even though they |
-// are virtual. This may seem counter-intuitive, since virtual functions are |
-// generally not eligible for inlining. Profiling results indicate that these |
-// large amount of runtime is spent on virtual function dispatch on these |
-// simple functions. They are virtual because of the interface this class |
-// inherits from. However, it is very unlikely that anyone will sub-class |
-// SimpleBuffer and change their implementation. To get rid of this baggage, |
-// internal implementation (e.g., Write) explicitly use SimpleBuffer:: to |
-// qualify the method calls, thus disabling the virtual dispatch and enable |
-// inlining. |
- |
-namespace net { |
- |
-static const int kInitialSimpleBufferSize = 10; |
- |
-SimpleBuffer::SimpleBuffer() |
- : storage_(new char[kInitialSimpleBufferSize]), |
- write_idx_(0), |
- read_idx_(0), |
- storage_size_(kInitialSimpleBufferSize) { |
-} |
- |
-SimpleBuffer::SimpleBuffer(int size) |
- : write_idx_(0), |
- read_idx_(0), |
- storage_size_(size) { |
- // Callers may try to allocate overly large blocks, but negative sizes are |
- // obviously wrong. |
- CHECK_GE(size, 0); |
- storage_ = new char[size]; |
-} |
- |
-SimpleBuffer::~SimpleBuffer() { |
- delete[] storage_; |
-} |
- |
- |
-//////////////////////////////////////////////////////////////////////////////// |
- |
-int SimpleBuffer::ReadableBytes() const { |
- return write_idx_ - read_idx_; |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
- |
-std::string SimpleBuffer::str() const { |
- std::string s; |
- char * readable_ptr; |
- int readable_size; |
- GetReadablePtr(&readable_ptr, &readable_size); |
- s.append(readable_ptr, readable_ptr + readable_size); |
- return s; |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
- |
-int SimpleBuffer::BufferSize() const { |
- return storage_size_; |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
- |
-inline int SimpleBuffer::BytesFree() const { |
- return (storage_size_ - write_idx_); |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
- |
-bool SimpleBuffer::Empty() const { |
- return (read_idx_ == write_idx_); |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
- |
-bool SimpleBuffer::Full() const { |
- return ((write_idx_ == storage_size_) && (read_idx_ != write_idx_)); |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
- |
-// returns the number of characters written. |
-// appends up-to-'size' bytes to the simplebuffer. |
-int SimpleBuffer::Write(const char* bytes, int size) { |
- bool has_room = ((storage_size_ - write_idx_) >= size); |
- if (!has_room) { |
- (void)Reserve(size); |
- } |
- memcpy(storage_ + write_idx_, bytes, size); |
- SimpleBuffer::AdvanceWritablePtr(size); |
- return size; |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
- |
-// stores a pointer into the simple buffer in *ptr, |
-// and stores the number of characters which are allowed |
-// to be written in *size. |
-inline void SimpleBuffer::GetWritablePtr(char **ptr, int* size) const { |
- *ptr = storage_ + write_idx_; |
- *size = SimpleBuffer::BytesFree(); |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
- |
-// stores a pointer into the simple buffer in *ptr, |
-// and stores the number of characters which are allowed |
-// to be read in *size. |
-void SimpleBuffer::GetReadablePtr(char **ptr, int* size) const { |
- *ptr = storage_ + read_idx_; |
- *size = write_idx_ - read_idx_; |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
- |
-// returns the number of bytes read into 'bytes' |
-int SimpleBuffer::Read(char* bytes, int size) { |
- char * read_ptr = NULL; |
- int read_size = 0; |
- GetReadablePtr(&read_ptr, &read_size); |
- if (read_size > size) { |
- read_size = size; |
- } |
- memcpy(bytes, read_ptr, read_size); |
- AdvanceReadablePtr(read_size); |
- return read_size; |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
- |
-// removes all data from the simple buffer |
-void SimpleBuffer::Clear() { |
- read_idx_ = write_idx_ = 0; |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
- |
-// Attempts to reserve a contiguous block of buffer space by either reclaiming |
-// old data that is already read, and reallocate large storage as needed. |
-bool SimpleBuffer::Reserve(int size) { |
- if (size > 0 && BytesFree() < size) { |
- char * read_ptr = NULL; |
- int read_size = 0; |
- GetReadablePtr(&read_ptr, &read_size); |
- |
- if (read_size + size <= BufferSize()) { |
- // Can reclaim space from already read bytes by shifting |
- memmove(storage_, read_ptr, read_size); |
- read_idx_ = 0; |
- write_idx_ = read_size; |
- CHECK_GE(BytesFree(), size); |
- } else { |
- // what we need is to have at least size bytes available for writing. |
- // This implies that the buffer needs to be at least size bytes + |
- // read_size bytes long. Since we want linear time extensions in the case |
- // that we're extending this thing repeatedly, we should extend to twice |
- // the current size (if that is big enough), or the size + read_size |
- // bytes, whichever is larger. |
- int new_storage_size = 2 * storage_size_; |
- if (new_storage_size < size + read_size) { |
- new_storage_size = size + read_size; |
- } |
- |
- // have to extend the thing |
- char* new_storage = new char[new_storage_size]; |
- |
- // copy still useful info to the new buffer. |
- memcpy(new_storage, read_ptr, read_size); |
- // reset pointers. |
- read_idx_ = 0; |
- write_idx_ = read_size; |
- delete[] storage_; |
- storage_ = new_storage; |
- storage_size_ = new_storage_size; |
- } |
- } |
- return true; |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
- |
-// removes the oldest 'amount_to_consume' characters. |
-void SimpleBuffer::AdvanceReadablePtr(int amount_to_advance) { |
- read_idx_ += amount_to_advance; |
- if (read_idx_ > storage_size_) { |
- read_idx_ = storage_size_; |
- } |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
- |
-// Moves the internal pointers around such that the |
-// amount of data specified here is expected to |
-// already be resident (as if it was Written) |
-inline void SimpleBuffer::AdvanceWritablePtr(int amount_to_advance) { |
- write_idx_ += amount_to_advance; |
- if (write_idx_ > storage_size_) { |
- write_idx_ = storage_size_; |
- } |
-} |
- |
-} // namespace net |