summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/asio/include/asio/detail/is_buffer_sequence.hpp
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/asio/include/asio/detail/is_buffer_sequence.hpp')
-rw-r--r--3rdparty/asio/include/asio/detail/is_buffer_sequence.hpp123
1 files changed, 90 insertions, 33 deletions
diff --git a/3rdparty/asio/include/asio/detail/is_buffer_sequence.hpp b/3rdparty/asio/include/asio/detail/is_buffer_sequence.hpp
index 95f29c503fd..c64e7b16824 100644
--- a/3rdparty/asio/include/asio/detail/is_buffer_sequence.hpp
+++ b/3rdparty/asio/include/asio/detail/is_buffer_sequence.hpp
@@ -2,7 +2,7 @@
// detail/is_buffer_sequence.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2024 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)
@@ -24,6 +24,8 @@ namespace asio {
class mutable_buffer;
class const_buffer;
+class mutable_registered_buffer;
+class const_registered_buffer;
namespace detail {
@@ -38,6 +40,8 @@ struct buffer_sequence_memfns_base
void prepare();
void commit();
void consume();
+ void grow();
+ void shrink();
};
template <typename T>
@@ -52,22 +56,22 @@ struct buffer_sequence_memfns_check
};
template <typename>
-char (&begin_memfn_helper(...))[2];
+char buffer_sequence_begin_helper(...);
template <typename T>
-char begin_memfn_helper(
- buffer_sequence_memfns_check<
- void (buffer_sequence_memfns_base::*)(),
- &buffer_sequence_memfns_derived<T>::begin>*);
+char (&buffer_sequence_begin_helper(T* t,
+ enable_if_t<!is_same<
+ decltype(asio::buffer_sequence_begin(*t)),
+ void>::value>*))[2];
template <typename>
-char (&end_memfn_helper(...))[2];
+char buffer_sequence_end_helper(...);
template <typename T>
-char end_memfn_helper(
- buffer_sequence_memfns_check<
- void (buffer_sequence_memfns_base::*)(),
- &buffer_sequence_memfns_derived<T>::end>*);
+char (&buffer_sequence_end_helper(T* t,
+ enable_if_t<!is_same<
+ decltype(asio::buffer_sequence_end(*t)),
+ void>::value>*))[2];
template <typename>
char (&size_memfn_helper(...))[2];
@@ -112,7 +116,7 @@ template <typename T>
char prepare_memfn_helper(
buffer_sequence_memfns_check<
void (buffer_sequence_memfns_base::*)(),
- &buffer_sequence_memfns_derived<T>::data>*);
+ &buffer_sequence_memfns_derived<T>::prepare>*);
template <typename>
char (&commit_memfn_helper(...))[2];
@@ -132,26 +136,32 @@ char consume_memfn_helper(
void (buffer_sequence_memfns_base::*)(),
&buffer_sequence_memfns_derived<T>::consume>*);
-template <typename, typename>
-char (&buffer_element_type_helper(...))[2];
+template <typename>
+char (&grow_memfn_helper(...))[2];
-#if defined(ASIO_HAS_DECL_TYPE)
+template <typename T>
+char grow_memfn_helper(
+ buffer_sequence_memfns_check<
+ void (buffer_sequence_memfns_base::*)(),
+ &buffer_sequence_memfns_derived<T>::grow>*);
-template <typename T, typename Buffer>
-char buffer_element_type_helper(T* t,
- typename enable_if<is_convertible<
- decltype(*buffer_sequence_begin(*t)),
- Buffer>::value>::type*);
+template <typename>
+char (&shrink_memfn_helper(...))[2];
+
+template <typename T>
+char shrink_memfn_helper(
+ buffer_sequence_memfns_check<
+ void (buffer_sequence_memfns_base::*)(),
+ &buffer_sequence_memfns_derived<T>::shrink>*);
-#else // defined(ASIO_HAS_DECL_TYPE)
+template <typename, typename>
+char (&buffer_sequence_element_type_helper(...))[2];
template <typename T, typename Buffer>
-char buffer_element_type_helper(
- typename T::const_iterator*,
- typename enable_if<is_convertible<
- typename T::value_type, Buffer>::value>::type*);
-
-#endif // defined(ASIO_HAS_DECL_TYPE)
+char buffer_sequence_element_type_helper(T* t,
+ enable_if_t<is_convertible<
+ decltype(*asio::buffer_sequence_begin(*t)),
+ Buffer>::value>*);
template <typename>
char (&const_buffers_type_typedef_helper(...))[2];
@@ -170,9 +180,9 @@ char mutable_buffers_type_typedef_helper(
template <typename T, typename Buffer>
struct is_buffer_sequence_class
: integral_constant<bool,
- sizeof(begin_memfn_helper<T>(0)) != 1 &&
- sizeof(end_memfn_helper<T>(0)) != 1 &&
- sizeof(buffer_element_type_helper<T, Buffer>(0, 0)) == 1>
+ sizeof(buffer_sequence_begin_helper<T>(0, 0)) != 1 &&
+ sizeof(buffer_sequence_end_helper<T>(0, 0)) != 1 &&
+ sizeof(buffer_sequence_element_type_helper<T, Buffer>(0, 0)) == 1>
{
};
@@ -208,8 +218,32 @@ struct is_buffer_sequence<const_buffer, mutable_buffer>
{
};
+template <>
+struct is_buffer_sequence<mutable_registered_buffer, mutable_buffer>
+ : true_type
+{
+};
+
+template <>
+struct is_buffer_sequence<mutable_registered_buffer, const_buffer>
+ : true_type
+{
+};
+
+template <>
+struct is_buffer_sequence<const_registered_buffer, const_buffer>
+ : true_type
+{
+};
+
+template <>
+struct is_buffer_sequence<const_registered_buffer, mutable_buffer>
+ : false_type
+{
+};
+
template <typename T>
-struct is_dynamic_buffer_class
+struct is_dynamic_buffer_class_v1
: integral_constant<bool,
sizeof(size_memfn_helper<T>(0)) != 1 &&
sizeof(max_size_memfn_helper<T>(0)) != 1 &&
@@ -224,9 +258,32 @@ struct is_dynamic_buffer_class
};
template <typename T>
-struct is_dynamic_buffer
+struct is_dynamic_buffer_v1
+ : conditional<is_class<T>::value,
+ is_dynamic_buffer_class_v1<T>,
+ false_type>::type
+{
+};
+
+template <typename T>
+struct is_dynamic_buffer_class_v2
+ : integral_constant<bool,
+ sizeof(size_memfn_helper<T>(0)) != 1 &&
+ sizeof(max_size_memfn_helper<T>(0)) != 1 &&
+ sizeof(capacity_memfn_helper<T>(0)) != 1 &&
+ sizeof(data_memfn_helper<T>(0)) != 1 &&
+ sizeof(consume_memfn_helper<T>(0)) != 1 &&
+ sizeof(grow_memfn_helper<T>(0)) != 1 &&
+ sizeof(shrink_memfn_helper<T>(0)) != 1 &&
+ sizeof(const_buffers_type_typedef_helper<T>(0)) == 1 &&
+ sizeof(mutable_buffers_type_typedef_helper<T>(0)) == 1>
+{
+};
+
+template <typename T>
+struct is_dynamic_buffer_v2
: conditional<is_class<T>::value,
- is_dynamic_buffer_class<T>,
+ is_dynamic_buffer_class_v2<T>,
false_type>::type
{
};