summaryrefslogtreecommitdiff
path: root/boost/beast/core/detail/buffers_ref.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/beast/core/detail/buffers_ref.hpp')
-rw-r--r--boost/beast/core/detail/buffers_ref.hpp67
1 files changed, 67 insertions, 0 deletions
diff --git a/boost/beast/core/detail/buffers_ref.hpp b/boost/beast/core/detail/buffers_ref.hpp
new file mode 100644
index 0000000000..e56a9764fd
--- /dev/null
+++ b/boost/beast/core/detail/buffers_ref.hpp
@@ -0,0 +1,67 @@
+//
+// Copyright (c) 2016-2017 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_DETAIL_BUFFERS_REF_HPP
+#define BOOST_BEAST_DETAIL_BUFFERS_REF_HPP
+
+#include <boost/beast/core/type_traits.hpp>
+#include <iterator>
+
+namespace boost {
+namespace beast {
+namespace detail {
+
+// A very lightweight reference to a buffer sequence
+template<class BufferSequence>
+class buffers_ref
+{
+ BufferSequence const* buffers_;
+
+public:
+ using const_iterator = typename
+ buffer_sequence_iterator<BufferSequence>::type;
+
+ using value_type = typename std::iterator_traits<
+ const_iterator>::value_type;
+
+ buffers_ref(buffers_ref const&) = default;
+ buffers_ref& operator=(buffers_ref const&) = default;
+
+ explicit
+ buffers_ref(BufferSequence const& buffers)
+ : buffers_(std::addressof(buffers))
+ {
+ }
+
+ const_iterator
+ begin() const
+ {
+ return boost::asio::buffer_sequence_begin(*buffers_);
+ }
+
+ const_iterator
+ end() const
+ {
+ return boost::asio::buffer_sequence_end(*buffers_);
+ }
+};
+
+// Return a reference to a buffer sequence
+template<class BufferSequence>
+buffers_ref<BufferSequence>
+make_buffers_ref(BufferSequence const& buffers)
+{
+ return buffers_ref<BufferSequence>(buffers);
+}
+
+} // detail
+} // beast
+} // boost
+
+#endif