[asio] buffer_size overloads for *BufferSequence's

For getting things like the Content-Length in the http protocol when using scatter/gather IO, I've found the following buffer_size overloads to be useful. Might be worth adding them to the lib (after perhaps specializing for all bidriectional sequence containers). Cheers, Chris namespace boost { namespace asio { namespace detail { struct buffer_size_helper { std::size_t operator()(std::size_t s, boost::asio::const_buffer const& b) const { return s + boost::asio::buffer_size(b); } std::size_t operator()(std::size_t s, boost::asio::mutable_buffer const& b) const { return s + boost::asio::buffer_size(b); } }; } std::size_t buffer_size(std::vector<boost::asio::const_buffer> const& v) { return std::accumulate(v.begin(), v.end(), std::size_t(0), detail::buffer_size_helper()); } template <int N> std::size_t buffer_size(boost::array<boost::asio::const_buffer, N> const& v) { return std::accumulate(v.begin(), v.end(), std::size_t(0), detail::buffer_size_helper()); } std::size_t buffer_size(std::vector<boost::asio::mutable_buffer> const& v) { return std::accumulate(v.begin(), v.end(), std::size_t(0), detail::buffer_size_helper()); } template <int N> std::size_t buffer_size(boost::array<boost::asio::mutable_buffer, N> const& v) { return std::accumulate(v.begin(), v.end(), std::size_t(0), detail::buffer_size_helper()); } } }
participants (1)
-
Chris Fairles