Add buffer() overloads for basic_string_view.
This commit is contained in:
parent
69a03d7b6b
commit
0d7abb65fe
@ -217,6 +217,7 @@ nobase_include_HEADERS = \
|
|||||||
asio/detail/std_thread.hpp \
|
asio/detail/std_thread.hpp \
|
||||||
asio/detail/strand_executor_service.hpp \
|
asio/detail/strand_executor_service.hpp \
|
||||||
asio/detail/strand_service.hpp \
|
asio/detail/strand_service.hpp \
|
||||||
|
asio/detail/string_view.hpp \
|
||||||
asio/detail/thread_context.hpp \
|
asio/detail/thread_context.hpp \
|
||||||
asio/detail/thread_group.hpp \
|
asio/detail/thread_group.hpp \
|
||||||
asio/detail/thread.hpp \
|
asio/detail/thread.hpp \
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
#include "asio/detail/array_fwd.hpp"
|
#include "asio/detail/array_fwd.hpp"
|
||||||
#include "asio/detail/is_buffer_sequence.hpp"
|
#include "asio/detail/is_buffer_sequence.hpp"
|
||||||
|
#include "asio/detail/string_view.hpp"
|
||||||
#include "asio/detail/throw_exception.hpp"
|
#include "asio/detail/throw_exception.hpp"
|
||||||
#include "asio/detail/type_traits.hpp"
|
#include "asio/detail/type_traits.hpp"
|
||||||
|
|
||||||
@ -1474,6 +1475,54 @@ inline ASIO_CONST_BUFFER buffer(
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(ASIO_HAS_STD_STRING_VIEW) \
|
||||||
|
|| defined(GENERATING_DOCUMENTATION)
|
||||||
|
|
||||||
|
/// Create a new modifiable buffer that represents the given string_view.
|
||||||
|
/**
|
||||||
|
* @returns <tt>mutable_buffer(data.size() ? &data[0] : 0,
|
||||||
|
* data.size() * sizeof(Elem))</tt>.
|
||||||
|
*/
|
||||||
|
template <typename Elem, typename Traits>
|
||||||
|
inline ASIO_CONST_BUFFER buffer(
|
||||||
|
basic_string_view<Elem, Traits> data) ASIO_NOEXCEPT
|
||||||
|
{
|
||||||
|
return ASIO_CONST_BUFFER(data.size() ? &data[0] : 0,
|
||||||
|
data.size() * sizeof(Elem)
|
||||||
|
#if defined(ASIO_ENABLE_BUFFER_DEBUGGING)
|
||||||
|
, detail::buffer_debug_check<
|
||||||
|
typename basic_string_view<Elem, Traits>::iterator
|
||||||
|
>(data.begin())
|
||||||
|
#endif // ASIO_ENABLE_BUFFER_DEBUGGING
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create a new non-modifiable buffer that represents the given string.
|
||||||
|
/**
|
||||||
|
* @returns A mutable_buffer value equivalent to:
|
||||||
|
* @code mutable_buffer(
|
||||||
|
* data.size() ? &data[0] : 0,
|
||||||
|
* min(data.size() * sizeof(Elem), max_size_in_bytes)); @endcode
|
||||||
|
*/
|
||||||
|
template <typename Elem, typename Traits>
|
||||||
|
inline ASIO_CONST_BUFFER buffer(
|
||||||
|
basic_string_view<Elem, Traits> data,
|
||||||
|
std::size_t max_size_in_bytes) ASIO_NOEXCEPT
|
||||||
|
{
|
||||||
|
return ASIO_CONST_BUFFER(data.size() ? &data[0] : 0,
|
||||||
|
data.size() * sizeof(Elem) < max_size_in_bytes
|
||||||
|
? data.size() * sizeof(Elem) : max_size_in_bytes
|
||||||
|
#if defined(ASIO_ENABLE_BUFFER_DEBUGGING)
|
||||||
|
, detail::buffer_debug_check<
|
||||||
|
typename basic_string_view<Elem, Traits>::iterator
|
||||||
|
>(data.begin())
|
||||||
|
#endif // ASIO_ENABLE_BUFFER_DEBUGGING
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // defined(ASIO_HAS_STD_STRING_VIEW)
|
||||||
|
// || defined(GENERATING_DOCUMENTATION)
|
||||||
|
|
||||||
/*@}*/
|
/*@}*/
|
||||||
|
|
||||||
/// Adapt a basic_string to the DynamicBuffer requirements.
|
/// Adapt a basic_string to the DynamicBuffer requirements.
|
||||||
|
@ -703,6 +703,28 @@
|
|||||||
# endif // !defined(ASIO_DISABLE_STD_FUTURE)
|
# endif // !defined(ASIO_DISABLE_STD_FUTURE)
|
||||||
#endif // !defined(ASIO_HAS_STD_FUTURE)
|
#endif // !defined(ASIO_HAS_STD_FUTURE)
|
||||||
|
|
||||||
|
// Standard library support for experimental::string_view.
|
||||||
|
#if !defined(ASIO_HAS_STD_STRING_VIEW)
|
||||||
|
# if !defined(ASIO_DISABLE_STD_STRING_VIEW)
|
||||||
|
# if defined(__clang__)
|
||||||
|
# if (__cplusplus >= 201103)
|
||||||
|
# if __has_include(<experimental/string_view>)
|
||||||
|
# define ASIO_HAS_STD_STRING_VIEW 1
|
||||||
|
# define ASIO_HAS_STD_EXPERIMENTAL_STRING_VIEW 1
|
||||||
|
# endif // __has_include(<experimental/string_view>)
|
||||||
|
# endif // (__cplusplus >= 201103)
|
||||||
|
# endif // defined(__clang__)
|
||||||
|
# if defined(__GNUC__)
|
||||||
|
# if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 9)) || (__GNUC__ > 4)
|
||||||
|
# if (__cplusplus >= 201300)
|
||||||
|
# define ASIO_HAS_STD_STRING_VIEW 1
|
||||||
|
# define ASIO_HAS_STD_EXPERIMENTAL_STRING_VIEW 1
|
||||||
|
# endif // (__cplusplus >= 201300)
|
||||||
|
# endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4)
|
||||||
|
# endif // defined(__GNUC__)
|
||||||
|
# endif // !defined(ASIO_DISABLE_STD_STRING_VIEW)
|
||||||
|
#endif // !defined(ASIO_HAS_STD_STRING_VIEW)
|
||||||
|
|
||||||
// Windows App target. Windows but with a limited API.
|
// Windows App target. Windows but with a limited API.
|
||||||
#if !defined(ASIO_WINDOWS_APP)
|
#if !defined(ASIO_WINDOWS_APP)
|
||||||
# if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0603)
|
# if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0603)
|
||||||
|
42
asio/include/asio/detail/string_view.hpp
Normal file
42
asio/include/asio/detail/string_view.hpp
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
//
|
||||||
|
// detail/string_view.hpp
|
||||||
|
// ~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
//
|
||||||
|
// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff 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)
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef ASIO_DETAIL_STRING_VIEW_HPP
|
||||||
|
#define ASIO_DETAIL_STRING_VIEW_HPP
|
||||||
|
|
||||||
|
#if defined(_MSC_VER) && (_MSC_VER >= 1200)
|
||||||
|
# pragma once
|
||||||
|
#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
|
||||||
|
|
||||||
|
#if defined(ASIO_HAS_STD_STRING_VIEW)
|
||||||
|
|
||||||
|
#include "asio/detail/config.hpp"
|
||||||
|
|
||||||
|
#if defined(ASIO_HAS_STD_EXPERIMENTAL_STRING_VIEW)
|
||||||
|
# include <experimental/string_view>
|
||||||
|
#else // defined(ASIO_HAS_EXPERIMENTAL_STRING_VIEW)
|
||||||
|
# include <string_view>
|
||||||
|
#endif // defined(ASIO_HAS_EXPERIMENTAL_STRING_VIEW)
|
||||||
|
|
||||||
|
namespace asio {
|
||||||
|
|
||||||
|
#if defined(ASIO_HAS_STD_EXPERIMENTAL_STRING_VIEW)
|
||||||
|
using std::experimental::basic_string_view;
|
||||||
|
using std::experimental::string_view;
|
||||||
|
#else // defined(ASIO_HAS_STD_EXPERIMENTAL_STRING_VIEW)
|
||||||
|
using std::basic_string_view;
|
||||||
|
using std::string_view;
|
||||||
|
#endif // defined(ASIO_HAS_STD_EXPERIMENTAL_STRING_VIEW)
|
||||||
|
|
||||||
|
} // namespace asio
|
||||||
|
|
||||||
|
#endif // defined(ASIO_HAS_STD_STRING_VIEW)
|
||||||
|
|
||||||
|
#endif // ASIO_DETAIL_STRING_VIEW_HPP
|
@ -61,6 +61,13 @@ void test()
|
|||||||
const std::string const_string_data(1024, ' ');
|
const std::string const_string_data(1024, ' ');
|
||||||
std::vector<mutable_buffer> mutable_buffer_sequence;
|
std::vector<mutable_buffer> mutable_buffer_sequence;
|
||||||
std::vector<const_buffer> const_buffer_sequence;
|
std::vector<const_buffer> const_buffer_sequence;
|
||||||
|
#if defined(ASIO_HAS_STD_STRING_VIEW)
|
||||||
|
# if defined(ASIO_HAS_STD_EXPERIMENTAL_STRING_VIEW)
|
||||||
|
std::experimental::string_view string_view_data(string_data);
|
||||||
|
# else // defined(ASIO_HAS_STD_EXPERIMENTAL_STRING_VIEW)
|
||||||
|
std::string_view string_view_data(string_data);
|
||||||
|
# endif // defined(ASIO_HAS_STD_EXPERIMENTAL_STRING_VIEW)
|
||||||
|
#endif // defined(ASIO_HAS_STD_STRING_VIEW)
|
||||||
|
|
||||||
// mutable_buffer constructors.
|
// mutable_buffer constructors.
|
||||||
|
|
||||||
@ -197,6 +204,10 @@ void test()
|
|||||||
mb1 = buffer(string_data, 1024);
|
mb1 = buffer(string_data, 1024);
|
||||||
cb1 = buffer(const_string_data);
|
cb1 = buffer(const_string_data);
|
||||||
cb1 = buffer(const_string_data, 1024);
|
cb1 = buffer(const_string_data, 1024);
|
||||||
|
#if defined(ASIO_HAS_STD_STRING_VIEW)
|
||||||
|
cb1 = buffer(string_view_data);
|
||||||
|
cb1 = buffer(string_view_data, 1024);
|
||||||
|
#endif // defined(ASIO_HAS_STD_STRING_VIEW)
|
||||||
|
|
||||||
// buffer_copy function overloads.
|
// buffer_copy function overloads.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user