// // 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_CORE_DETAIL_BUFFER_HPP #define BOOST_BEAST_CORE_DETAIL_BUFFER_HPP #include #include #include #include namespace boost { namespace beast { namespace detail { template< class DynamicBuffer, class ErrorValue> auto dynamic_buffer_prepare_noexcept( DynamicBuffer& buffer, std::size_t size, error_code& ec, ErrorValue ev) -> boost::optional { if(buffer.max_size() - buffer.size() < size) { // length error BOOST_BEAST_ASSIGN_EC(ec, ev); return boost::none; } boost::optional result; result.emplace(buffer.prepare(size)); ec = {}; return result; } template< class DynamicBuffer, class ErrorValue> auto dynamic_buffer_prepare( DynamicBuffer& buffer, std::size_t size, error_code& ec, ErrorValue ev) -> boost::optional { #ifndef BOOST_NO_EXCEPTIONS try { boost::optional result; result.emplace(buffer.prepare(size)); ec = {}; return result; } catch(std::length_error const&) { BOOST_BEAST_ASSIGN_EC(ec, ev); } return boost::none; #else return dynamic_buffer_prepare_noexcept( buffer, size, ec, ev); #endif } } // detail } // beast } // boost #endif