Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-17 09:00:18

0001 /* Copyright (c) 2018-2025 Marcelo Zimbres Silva (mzimbres@gmail.com)
0002  *
0003  * Distributed under the Boost Software License, Version 1.0. (See
0004  * accompanying file LICENSE.txt)
0005  */
0006 
0007 #include <boost/redis/detail/read_buffer.hpp>
0008 
0009 #include <boost/assert.hpp>
0010 #include <boost/core/make_span.hpp>
0011 
0012 #include <utility>
0013 
0014 namespace boost::redis::detail {
0015 
0016 system::error_code read_buffer::prepare()
0017 {
0018    BOOST_ASSERT(append_buf_begin_ == buffer_.size());
0019 
0020    auto const new_size = append_buf_begin_ + cfg_.read_buffer_append_size;
0021 
0022    if (new_size > cfg_.max_read_size) {
0023       return error::exceeds_maximum_read_buffer_size;
0024    }
0025 
0026    buffer_.resize(new_size);
0027    return {};
0028 }
0029 
0030 void read_buffer::commit(std::size_t read_size)
0031 {
0032    BOOST_ASSERT(buffer_.size() >= (append_buf_begin_ + read_size));
0033    buffer_.resize(append_buf_begin_ + read_size);
0034    append_buf_begin_ = buffer_.size();
0035 }
0036 
0037 auto read_buffer::get_prepared() noexcept -> span_type
0038 {
0039    auto const size = buffer_.size();
0040    return make_span(buffer_.data() + append_buf_begin_, size - append_buf_begin_);
0041 }
0042 
0043 auto read_buffer::get_commited() const noexcept -> std::string_view
0044 {
0045    return {buffer_.data(), append_buf_begin_};
0046 }
0047 
0048 void read_buffer::clear()
0049 {
0050    buffer_.clear();
0051    append_buf_begin_ = 0;
0052 }
0053 
0054 read_buffer::consume_result
0055 read_buffer::consume(std::size_t size)
0056 {
0057    // For convenience, if the requested size is larger than the
0058    // committed buffer we cap it to the maximum.
0059    if (size > append_buf_begin_)
0060       size = append_buf_begin_;
0061 
0062    buffer_.erase(buffer_.begin(), buffer_.begin() + size);
0063    auto const rotated = size == 0u ? 0u : buffer_.size();
0064 
0065    BOOST_ASSERT(append_buf_begin_ >= size);
0066    append_buf_begin_ -= size;
0067 
0068    return {size, rotated};
0069 }
0070 
0071 void read_buffer::reserve(std::size_t n) { buffer_.reserve(n); }
0072 
0073 bool operator==(read_buffer const& lhs, read_buffer const& rhs)
0074 {
0075    return lhs.buffer_ == rhs.buffer_ && lhs.append_buf_begin_ == rhs.append_buf_begin_;
0076 }
0077 
0078 bool operator!=(read_buffer const& lhs, read_buffer const& rhs) { return !(lhs == rhs); }
0079 
0080 }  // namespace boost::redis::detail