Fix buffers_prefix iterator decrement

This commit is contained in:
Vinnie Falco
2018-06-09 10:11:42 -07:00
parent bd3079f5b4
commit 2c5ed4595a
3 changed files with 8 additions and 1 deletions

View File

@@ -3,6 +3,7 @@ Version 173:
* Remove Autobahn testsuite doc note * Remove Autobahn testsuite doc note
* Fix buffers_adapter iterator value type * Fix buffers_adapter iterator value type
* Fix buffers_adapter max_size * Fix buffers_adapter max_size
* Fix buffers_prefix iterator decrement
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------

View File

@@ -39,6 +39,7 @@ class buffers_prefix_view
BufferSequence bs_; BufferSequence bs_;
std::size_t size_; std::size_t size_;
std::size_t remain_;
iter_type end_; iter_type end_;
template<class Deduced> template<class Deduced>
@@ -46,6 +47,7 @@ class buffers_prefix_view
Deduced&& other, std::size_t dist) Deduced&& other, std::size_t dist)
: bs_(std::forward<Deduced>(other).bs_) : bs_(std::forward<Deduced>(other).bs_)
, size_(other.size_) , size_(other.size_)
, remain_(other.remain_)
, end_(std::next(bs_.begin(), dist)) , end_(std::next(bs_.begin(), dist))
{ {
} }

View File

@@ -125,7 +125,7 @@ private:
const_iterator(buffers_prefix_view const& b, const_iterator(buffers_prefix_view const& b,
std::true_type) std::true_type)
: b_(&b) : b_(&b)
, remain_(0) , remain_(b.remain_)
, it_(b_->end_) , it_(b_->end_)
{ {
} }
@@ -145,6 +145,7 @@ buffers_prefix_view<BufferSequence>::
setup(std::size_t size) setup(std::size_t size)
{ {
size_ = 0; size_ = 0;
remain_ = 0;
end_ = boost::asio::buffer_sequence_begin(bs_); end_ = boost::asio::buffer_sequence_begin(bs_);
auto const last = bs_.end(); auto const last = bs_.end();
while(end_ != last) while(end_ != last)
@@ -154,6 +155,7 @@ setup(std::size_t size)
if(len >= size) if(len >= size)
{ {
size_ += size; size_ += size;
remain_ = size - len;
break; break;
} }
size -= len; size -= len;
@@ -192,6 +194,7 @@ operator=(buffers_prefix_view&& other) ->
other.end_); other.end_);
bs_ = std::move(other.bs_); bs_ = std::move(other.bs_);
size_ = other.size_; size_ = other.size_;
remain_ = other.remain_;
end_ = std::next( end_ = std::next(
boost::asio::buffer_sequence_begin(bs_), boost::asio::buffer_sequence_begin(bs_),
dist); dist);
@@ -209,6 +212,7 @@ operator=(buffers_prefix_view const& other) ->
other.end_); other.end_);
bs_ = other.bs_; bs_ = other.bs_;
size_ = other.size_; size_ = other.size_;
remain_ = other.remain_;
end_ = std::next( end_ = std::next(
boost::asio::buffer_sequence_begin(bs_), boost::asio::buffer_sequence_begin(bs_),
dist); dist);