async_mqtt 9.0.1
Loading...
Searching...
No Matches
string_view_helper.hpp
1// Copyright Takatoshi Kondo 2016
2//
3// Distributed under the Boost Software License, Version 1.0.
4// (See accompanying file LICENSE_1_0.txt or copy at
5// http://www.boost.org/LICENSE_1_0.txt)
6
7#if !defined(ASYNC_MQTT_UTIL_STRING_VIEW_HELPER_HPP)
8#define ASYNC_MQTT_UTIL_STRING_VIEW_HELPER_HPP
9
10#include <iterator>
11#include <string_view>
12#include <type_traits>
13
14namespace async_mqtt {
15
16namespace detail {
17
18template<class T>
19T* to_address(T* p) noexcept
20{
21 return p;
22}
23
24template<class T>
25auto to_address(const T& p) noexcept
26{
27 return detail::to_address(p.operator->());
28}
29
30} // namespace detail
31
32// Make a string_view from a pair of iterators.
33template<typename Begin, typename End>
34std::string_view make_string_view(Begin begin, End end) {
35 static_assert(
36 std::is_same_v<
37 typename std::iterator_traits<Begin>::iterator_category,
38 std::random_access_iterator_tag
39 >
40 );
41 return std::string_view(
42 detail::to_address(begin),
43 static_cast<std::string_view::size_type>(std::distance(begin, end))
44 );
45}
46
47} // namespace async_mqtt
48
49#endif // ASYNC_MQTT_UTIL_STRING_VIEW_HELPER_HPP