Class template dynamic_vector_buffer is an adaptor used to automatically grow or shrink a vector object, to reflect the data successfully transferred in an I/O operation.
namespace std { namespace experimental { namespace net { inline namespace v1 { template<class T, class Allocator> class dynamic_vector_buffer { public: // types: using const_buffers_type = const_buffer; using mutable_buffers_type = mutable_buffer; // constructors: explicit dynamic_vector_buffer(vector<T, Allocator>& vec) noexcept; dynamic_vector_buffer(vector<T, Allocator>& vec, size_t maximum_size) noexcept; dynamic_vector_buffer(dynamic_vector_buffer&&) = default; // members: size_t size() const noexcept; size_t max_size() const noexcept; size_t capacity() const noexcept; const_buffers_type data() const noexcept; mutable_buffers_type prepare(size_t n); void commit(size_t n); void consume(size_t n); private: vector<T, Allocator>& vec_; // exposition only size_t size_; // exposition only const size_t max_size_; // exposition only }; } // inline namespace v1 } // namespace net } // namespace experimental } // namespace std
The dynamic_vector_buffer class template meets the requirements of DynamicBuffer ([buffer.reqmts.dynamicbuffer]).
The dynamic_vector_buffer class template requires that T is a trivially copyable or standard-layout type (C++ 2014 [basic.types]) and that sizeof(T) == 1.
explicit dynamic_vector_buffer(vector<T, Allocator>& vec) noexcept;
Effects: Initializes vec_ with vec, size_ with vec.size(), and max_size_ with vec.max_size().
dynamic_vector_buffer(vector<T, Allocator>& vec,
size_t maximum_size) noexcept;
Requires: vec.size() <= maximum_size.
Effects: Initializes vec_ with vec, size_ with vec.size(), and max_size_ with maximum_size.
Returns: size_.
size_t max_size() const noexcept;
Returns: max_size_.
size_t capacity() const noexcept;
Returns: vec_.capacity().
const_buffers_type data() const noexcept;
Returns: buffer(vec_, size_).
mutable_buffers_type prepare(size_t n);
Effects: Performs vec_.resize(size_ + n).
Returns: buffer(buffer(vec_) + size_, n).
Remarks: length_error if size() + n exceeds max_size().
Effects: Performs:
size_ += min(n, vec_.size() - size_); vec_.resize(size_);
Effects: Performs:
size_t m = min(n, size_); vec_.erase(vec_.begin(), vec_.begin() + m); size_ -= m;