summaryrefslogtreecommitdiff
path: root/boost/beast/core/impl/string_param.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/beast/core/impl/string_param.hpp')
-rw-r--r--boost/beast/core/impl/string_param.hpp108
1 files changed, 108 insertions, 0 deletions
diff --git a/boost/beast/core/impl/string_param.hpp b/boost/beast/core/impl/string_param.hpp
new file mode 100644
index 0000000000..9d9278382a
--- /dev/null
+++ b/boost/beast/core/impl/string_param.hpp
@@ -0,0 +1,108 @@
+//
+// 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_STRING_PARAM_HPP
+#define BOOST_BEAST_IMPL_STRING_PARAM_HPP
+
+namespace boost {
+namespace beast {
+
+template<class T>
+typename std::enable_if<
+ std::is_integral<T>::value>::type
+string_param::
+print(T const& t)
+{
+ auto const last = buf_ + sizeof(buf_);
+ auto const it = detail::raw_to_string<
+ char, T, std::char_traits<char>>(
+ last, sizeof(buf_), t);
+ sv_ = {it, static_cast<std::size_t>(
+ last - it)};
+}
+
+template<class T>
+typename std::enable_if<
+ ! std::is_integral<T>::value &&
+ ! std::is_convertible<T, string_view>::value
+>::type
+string_param::
+print(T const& t)
+{
+ os_.emplace(buf_, sizeof(buf_));
+ *os_ << t;
+ os_->flush();
+ sv_ = os_->str();
+}
+
+inline
+void
+string_param::
+print(string_view sv)
+{
+ sv_ = sv;
+}
+
+template<class T>
+typename std::enable_if<
+ std::is_integral<T>::value>::type
+string_param::
+print_1(T const& t)
+{
+ char buf[detail::max_digits(sizeof(T))];
+ auto const last = buf + sizeof(buf);
+ auto const it = detail::raw_to_string<
+ char, T, std::char_traits<char>>(
+ last, sizeof(buf), t);
+ *os_ << string_view{it,
+ static_cast<std::size_t>(last - it)};
+}
+
+template<class T>
+typename std::enable_if<
+ ! std::is_integral<T>::value>::type
+string_param::
+print_1(T const& t)
+{
+ *os_ << t;
+}
+
+template<class T0, class... TN>
+void
+string_param::
+print_n(T0 const& t0, TN const&... tn)
+{
+ print_1(t0);
+ print_n(tn...);
+}
+
+template<class T0, class T1, class... TN>
+void
+string_param::
+print(T0 const& t0, T1 const& t1, TN const&... tn)
+{
+ os_.emplace(buf_, sizeof(buf_));
+ print_1(t0);
+ print_1(t1);
+ print_n(tn...);
+ os_->flush();
+ sv_ = os_->str();
+}
+
+template<class... Args>
+string_param::
+string_param(Args const&... args)
+{
+ print(args...);
+}
+
+} // beast
+} // boost
+
+#endif