diff options
Diffstat (limited to '3rdparty/asio/include/asio/detail/is_buffer_sequence.hpp')
-rw-r--r-- | 3rdparty/asio/include/asio/detail/is_buffer_sequence.hpp | 123 |
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 { }; |