1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- //
- // Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
- //
- // Distributed under the Boost Software License, Version 1.0. (See accompanying
- // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- //
- // Official repository: https://github.com/boostorg/beast
- //
- #ifndef BOOST_BEAST_IMPL_FLAT_STATIC_BUFFER_IPP
- #define BOOST_BEAST_IMPL_FLAT_STATIC_BUFFER_IPP
- #include <boost/beast/core/flat_static_buffer.hpp>
- #include <boost/throw_exception.hpp>
- #include <algorithm>
- #include <cstring>
- #include <iterator>
- #include <memory>
- #include <stdexcept>
- namespace boost {
- namespace beast {
- /* Layout:
- begin_ in_ out_ last_ end_
- |<------->|<---------->|<---------->|<------->|
- | readable | writable |
- */
- void
- flat_static_buffer_base::
- clear() noexcept
- {
- in_ = begin_;
- out_ = begin_;
- last_ = begin_;
- }
- auto
- flat_static_buffer_base::
- prepare(std::size_t n) ->
- mutable_buffers_type
- {
- if(n <= dist(out_, end_))
- {
- last_ = out_ + n;
- return {out_, n};
- }
- auto const len = size();
- if(n > capacity() - len)
- BOOST_THROW_EXCEPTION(std::length_error{
- "buffer overflow"});
- if(len > 0)
- std::memmove(begin_, in_, len);
- in_ = begin_;
- out_ = in_ + len;
- last_ = out_ + n;
- return {out_, n};
- }
- void
- flat_static_buffer_base::
- consume(std::size_t n) noexcept
- {
- if(n >= size())
- {
- in_ = begin_;
- out_ = in_;
- return;
- }
- in_ += n;
- }
- void
- flat_static_buffer_base::
- reset(void* p, std::size_t n) noexcept
- {
- begin_ = static_cast<char*>(p);
- in_ = begin_;
- out_ = begin_;
- last_ = begin_;
- end_ = begin_ + n;
- }
- } // beast
- } // boost
- #endif
|