summaryrefslogtreecommitdiff
path: root/boost/beast/http/parser.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/beast/http/parser.hpp')
-rw-r--r--boost/beast/http/parser.hpp59
1 files changed, 44 insertions, 15 deletions
diff --git a/boost/beast/http/parser.hpp b/boost/beast/http/parser.hpp
index 47e1003533..69d93cf03c 100644
--- a/boost/beast/http/parser.hpp
+++ b/boost/beast/http/parser.hpp
@@ -63,7 +63,7 @@ class parser
parser<isRequest, Body, Allocator>>;
message<isRequest, Body, basic_fields<Allocator>> m_;
- typename Body::reader wr_;
+ typename Body::reader rd_;
bool rd_inited_ = false;
std::function<void(
@@ -84,21 +84,17 @@ public:
/// Destructor
~parser() = default;
- /// Constructor
- parser();
-
- /// Constructor
+ /// Constructor (disallowed)
parser(parser const&) = delete;
- /// Assignment
+ /// Assignment (disallowed)
parser& operator=(parser const&) = delete;
- /** Constructor
+ /// Constructor (disallowed)
+ parser(parser&& other) = delete;
- After the move, the only valid operation
- on the moved-from object is destruction.
- */
- parser(parser&& other) = default;
+ /// Constructor
+ parser();
/** Constructor
@@ -303,6 +299,39 @@ public:
private:
friend class basic_parser<isRequest, parser>;
+ parser(std::true_type);
+ parser(std::false_type);
+
+ template<class OtherBody, class... Args,
+ class = typename std::enable_if<
+ ! std::is_same<Body, OtherBody>::value>::type>
+ parser(
+ std::true_type,
+ parser<isRequest, OtherBody, Allocator>&& parser,
+ Args&&... args);
+
+ template<class OtherBody, class... Args,
+ class = typename std::enable_if<
+ ! std::is_same<Body, OtherBody>::value>::type>
+ parser(
+ std::false_type,
+ parser<isRequest, OtherBody, Allocator>&& parser,
+ Args&&... args);
+
+ template<class Arg1, class... ArgN,
+ class = typename std::enable_if<
+ ! detail::is_parser<typename
+ std::decay<Arg1>::type>::value>::type>
+ explicit
+ parser(Arg1&& arg1, std::true_type, ArgN&&... argn);
+
+ template<class Arg1, class... ArgN,
+ class = typename std::enable_if<
+ ! detail::is_parser<typename
+ std::decay<Arg1>::type>::value>::type>
+ explicit
+ parser(Arg1&& arg1, std::false_type, ArgN&&... argn);
+
void
on_request_impl(
verb method,
@@ -376,7 +405,7 @@ private:
boost::optional<std::uint64_t> const& content_length,
error_code& ec)
{
- wr_.init(content_length, ec);
+ rd_.init(content_length, ec);
rd_inited_ = true;
}
@@ -385,7 +414,7 @@ private:
string_view body,
error_code& ec)
{
- return wr_.put(boost::asio::buffer(
+ return rd_.put(boost::asio::buffer(
body.data(), body.size()), ec);
}
@@ -408,14 +437,14 @@ private:
{
if(cb_b_)
return cb_b_(remain, body, ec);
- return wr_.put(boost::asio::buffer(
+ return rd_.put(boost::asio::buffer(
body.data(), body.size()), ec);
}
void
on_finish_impl(error_code& ec)
{
- wr_.finish(ec);
+ rd_.finish(ec);
}
};