summaryrefslogtreecommitdiff
path: root/boost/beast/core/detail/temporary_buffer.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/beast/core/detail/temporary_buffer.hpp')
-rw-r--r--boost/beast/core/detail/temporary_buffer.hpp83
1 files changed, 83 insertions, 0 deletions
diff --git a/boost/beast/core/detail/temporary_buffer.hpp b/boost/beast/core/detail/temporary_buffer.hpp
new file mode 100644
index 0000000000..8285b8f7eb
--- /dev/null
+++ b/boost/beast/core/detail/temporary_buffer.hpp
@@ -0,0 +1,83 @@
+//
+// Copyright (c) 2019 Damian Jarek(damian.jarek93@gmail.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_DETAIL_TEMPORARY_BUFFER_HPP
+#define BOOST_BEAST_DETAIL_TEMPORARY_BUFFER_HPP
+
+#include <boost/beast/core/detail/config.hpp>
+#include <boost/beast/core/string.hpp>
+
+#include <memory>
+
+namespace boost {
+namespace beast {
+namespace detail {
+
+struct temporary_buffer
+{
+ temporary_buffer() = default;
+ temporary_buffer(temporary_buffer const&) = delete;
+ temporary_buffer& operator=(temporary_buffer const&) = delete;
+
+ ~temporary_buffer() noexcept
+ {
+ deallocate(data_);
+ }
+
+ BOOST_BEAST_DECL
+ void
+ append(string_view s);
+
+ BOOST_BEAST_DECL
+ void
+ append(string_view s1, string_view s2);
+
+ string_view
+ view() const noexcept
+ {
+ return {data_, size_};
+ }
+
+ bool
+ empty() const noexcept
+ {
+ return size_ == 0;
+ }
+
+private:
+ BOOST_BEAST_DECL
+ void
+ unchecked_append(string_view s);
+
+ BOOST_BEAST_DECL
+ void
+ grow(std::size_t n);
+
+ void
+ deallocate(char* data) noexcept
+ {
+ if (data != buffer_)
+ delete[] data;
+ }
+
+ char buffer_[4096];
+ char* data_ = buffer_;
+ std::size_t capacity_ = sizeof(buffer_);
+ std::size_t size_ = 0;
+};
+
+} // detail
+} // beast
+} // boost
+
+#ifdef BOOST_BEAST_HEADER_ONLY
+#include <boost/beast/core/detail/impl/temporary_buffer.ipp>
+#endif
+
+#endif