summaryrefslogtreecommitdiff
path: root/boost/beast/core/detail/char_buffer.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/beast/core/detail/char_buffer.hpp')
-rw-r--r--boost/beast/core/detail/char_buffer.hpp78
1 files changed, 78 insertions, 0 deletions
diff --git a/boost/beast/core/detail/char_buffer.hpp b/boost/beast/core/detail/char_buffer.hpp
new file mode 100644
index 0000000000..b1970ebc0a
--- /dev/null
+++ b/boost/beast/core/detail/char_buffer.hpp
@@ -0,0 +1,78 @@
+//
+// 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_CORE_DETAIL_CHAR_BUFFER_HPP
+#define BOOST_BEAST_CORE_DETAIL_CHAR_BUFFER_HPP
+
+#include <boost/config.hpp>
+#include <cstddef>
+#include <cstring>
+#include <cstdint>
+
+namespace boost {
+namespace beast {
+namespace detail {
+
+template <std::size_t N>
+class char_buffer
+{
+public:
+ bool try_push_back(char c)
+ {
+ if (size_ == N)
+ return false;
+ buf_[size_++] = c;
+ return true;
+ }
+
+ bool try_append(char const* first, char const* last)
+ {
+ std::size_t const n = last - first;
+ if (n > N - size_)
+ return false;
+ std::memmove(&buf_[size_], first, n);
+ size_ += n;
+ return true;
+ }
+
+ void clear() noexcept
+ {
+ size_ = 0;
+ }
+
+ char* data() noexcept
+ {
+ return buf_;
+ }
+
+ char const* data() const noexcept
+ {
+ return buf_;
+ }
+
+ std::size_t size() const noexcept
+ {
+ return size_;
+ }
+
+ bool empty() const noexcept
+ {
+ return size_ == 0;
+ }
+
+private:
+ std::size_t size_= 0;
+ char buf_[N];
+};
+
+} // detail
+} // beast
+} // boost
+
+#endif