2017-05-03 15:29:23 -07:00
|
|
|
//
|
2019-02-21 07:00:31 -08:00
|
|
|
// Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
|
2017-05-03 15:29:23 -07:00
|
|
|
//
|
|
|
|
// 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)
|
|
|
|
//
|
2017-07-20 13:40:34 -07:00
|
|
|
// Official repository: https://github.com/boostorg/beast
|
|
|
|
//
|
2017-05-03 15:29:23 -07:00
|
|
|
|
2017-07-20 13:40:34 -07:00
|
|
|
#ifndef BOOST_BEAST_WRITE_OSTREAM_HPP
|
|
|
|
#define BOOST_BEAST_WRITE_OSTREAM_HPP
|
2017-05-03 15:29:23 -07:00
|
|
|
|
2017-10-10 07:49:03 -07:00
|
|
|
#include <boost/beast/core/detail/config.hpp>
|
2017-07-20 13:40:34 -07:00
|
|
|
#include <boost/beast/core/detail/ostream.hpp>
|
2017-05-03 15:29:23 -07:00
|
|
|
#include <type_traits>
|
|
|
|
#include <streambuf>
|
|
|
|
#include <utility>
|
|
|
|
|
2018-12-16 14:36:17 -08:00
|
|
|
#ifdef BOOST_BEAST_ALLOW_DEPRECATED
|
|
|
|
#include <boost/beast/core/make_printable.hpp>
|
|
|
|
#endif
|
|
|
|
|
2017-07-20 13:40:34 -07:00
|
|
|
namespace boost {
|
2017-05-03 15:29:23 -07:00
|
|
|
namespace beast {
|
|
|
|
|
2019-03-05 12:05:00 -08:00
|
|
|
/** Return an output stream that formats values into a <em>DynamicBuffer</em>.
|
2017-05-03 15:29:23 -07:00
|
|
|
|
2019-03-05 12:05:00 -08:00
|
|
|
This function wraps the caller provided <em>DynamicBuffer</em> into
|
2017-05-03 15:29:23 -07:00
|
|
|
a `std::ostream` derived class, to allow `operator<<` stream style
|
|
|
|
formatting operations.
|
|
|
|
|
|
|
|
@par Example
|
|
|
|
@code
|
|
|
|
ostream(buffer) << "Hello, world!" << std::endl;
|
|
|
|
@endcode
|
|
|
|
|
|
|
|
@note Calling members of the underlying buffer before the output
|
|
|
|
stream is destroyed results in undefined behavior.
|
|
|
|
|
2019-03-05 12:05:00 -08:00
|
|
|
@param buffer An object meeting the requirements of <em>DynamicBuffer</em>
|
2017-05-03 15:29:23 -07:00
|
|
|
into which the formatted output will be placed.
|
|
|
|
|
2017-05-10 12:03:00 -07:00
|
|
|
@return An object derived from `std::ostream` which redirects output
|
|
|
|
The wrapped dynamic buffer is not modified, a copy is made instead.
|
|
|
|
Ownership of the underlying memory is not transferred, the application
|
|
|
|
is still responsible for managing its lifetime. The caller is
|
|
|
|
responsible for ensuring the dynamic buffer is not destroyed for the
|
|
|
|
lifetime of the output stream.
|
2017-05-03 15:29:23 -07:00
|
|
|
*/
|
|
|
|
template<class DynamicBuffer>
|
2017-07-20 13:40:34 -07:00
|
|
|
#if BOOST_BEAST_DOXYGEN
|
2018-11-11 21:53:13 -08:00
|
|
|
__implementation_defined__
|
2017-05-03 15:29:23 -07:00
|
|
|
#else
|
|
|
|
detail::ostream_helper<
|
|
|
|
DynamicBuffer, char, std::char_traits<char>,
|
2017-05-08 19:02:58 -07:00
|
|
|
detail::basic_streambuf_movable::value>
|
2017-05-03 15:29:23 -07:00
|
|
|
#endif
|
|
|
|
ostream(DynamicBuffer& buffer)
|
|
|
|
{
|
2017-09-07 07:39:52 -07:00
|
|
|
static_assert(
|
2018-11-30 14:58:38 -08:00
|
|
|
net::is_dynamic_buffer<DynamicBuffer>::value,
|
2019-02-20 19:19:59 -08:00
|
|
|
"DynamicBuffer type requirements not met");
|
2017-05-03 15:29:23 -07:00
|
|
|
return detail::ostream_helper<
|
|
|
|
DynamicBuffer, char, std::char_traits<char>,
|
2017-05-08 19:02:58 -07:00
|
|
|
detail::basic_streambuf_movable::value>{buffer};
|
2017-05-03 15:29:23 -07:00
|
|
|
}
|
|
|
|
|
2018-12-16 14:36:17 -08:00
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
#ifdef BOOST_BEAST_ALLOW_DEPRECATED
|
|
|
|
template<class T>
|
|
|
|
detail::make_printable_adaptor<T>
|
|
|
|
buffers(T const& t)
|
|
|
|
{
|
|
|
|
return make_printable(t);
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
template<class T>
|
|
|
|
void buffers(T const&)
|
|
|
|
{
|
|
|
|
static_assert(sizeof(T) == 0,
|
|
|
|
"The function buffers() is deprecated, use make_printable() instead, "
|
|
|
|
"or define BOOST_BEAST_ALLOW_DEPRECATED to silence this error.");
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2017-05-03 15:29:23 -07:00
|
|
|
} // beast
|
2017-07-20 13:40:34 -07:00
|
|
|
} // boost
|
2017-05-03 15:29:23 -07:00
|
|
|
|
|
|
|
#endif
|