11 #ifndef ASIO_DETAIL_IS_BUFFER_SEQUENCE_HPP 12 #define ASIO_DETAIL_IS_BUFFER_SEQUENCE_HPP 14 #if defined(_MSC_VER) && (_MSC_VER >= 1200) 16 #endif // defined(_MSC_VER) && (_MSC_VER >= 1200) 18 #include "asio/detail/config.hpp" 19 #include "asio/detail/type_traits.hpp" 21 #include "asio/detail/push_options.hpp" 51 template <
typename T, T>
56 #if defined(ASIO_HAS_DECLTYPE) 59 char buffer_sequence_begin_helper(...);
62 char (&buffer_sequence_begin_helper(T* t,
65 void>::value>::type*))[2];
67 #else // defined(ASIO_HAS_DECLTYPE) 70 char (&buffer_sequence_begin_helper(...))[2];
73 char buffer_sequence_begin_helper(T* t,
78 #endif // defined(ASIO_HAS_DECLTYPE) 80 #if defined(ASIO_HAS_DECLTYPE) 83 char buffer_sequence_end_helper(...);
86 char (&buffer_sequence_end_helper(T* t,
89 void>::value>::type*))[2];
91 #else // defined(ASIO_HAS_DECLTYPE) 94 char (&buffer_sequence_end_helper(...))[2];
97 char buffer_sequence_end_helper(T* t,
102 #endif // defined(ASIO_HAS_DECLTYPE) 105 char (&size_memfn_helper(...))[2];
107 template <
typename T>
108 char size_memfn_helper(
114 char (&max_size_memfn_helper(...))[2];
116 template <
typename T>
117 char max_size_memfn_helper(
123 char (&capacity_memfn_helper(...))[2];
125 template <
typename T>
126 char capacity_memfn_helper(
132 char (&data_memfn_helper(...))[2];
134 template <
typename T>
135 char data_memfn_helper(
141 char (&prepare_memfn_helper(...))[2];
143 template <
typename T>
144 char prepare_memfn_helper(
150 char (&commit_memfn_helper(...))[2];
152 template <
typename T>
153 char commit_memfn_helper(
159 char (&consume_memfn_helper(...))[2];
161 template <
typename T>
162 char consume_memfn_helper(
168 char (&grow_memfn_helper(...))[2];
170 template <
typename T>
171 char grow_memfn_helper(
177 char (&shrink_memfn_helper(...))[2];
179 template <
typename T>
180 char shrink_memfn_helper(
185 template <
typename,
typename>
186 char (&buffer_sequence_element_type_helper(...))[2];
188 #if defined(ASIO_HAS_DECLTYPE) 190 template <
typename T,
typename Buffer>
191 char buffer_sequence_element_type_helper(T* t,
194 Buffer>::value>::type*);
196 #else // defined(ASIO_HAS_DECLTYPE) 198 template <
typename T,
typename Buffer>
199 char buffer_sequence_element_type_helper(
200 typename T::const_iterator*,
202 typename T::value_type, Buffer>::value>::type*);
204 #endif // defined(ASIO_HAS_DECLTYPE) 207 char (&const_buffers_type_typedef_helper(...))[2];
209 template <
typename T>
210 char const_buffers_type_typedef_helper(
211 typename T::const_buffers_type*);
214 char (&mutable_buffers_type_typedef_helper(...))[2];
216 template <
typename T>
217 char mutable_buffers_type_typedef_helper(
218 typename T::mutable_buffers_type*);
220 template <
typename T,
typename Buffer>
222 : integral_constant<bool,
223 sizeof(buffer_sequence_begin_helper<T>(0, 0)) != 1 &&
224 sizeof(buffer_sequence_end_helper<T>(0, 0)) != 1 &&
225 sizeof(buffer_sequence_element_type_helper<T, Buffer>(0, 0)) == 1>
229 template <
typename T,
typename Buffer>
231 : conditional<is_class<T>::value,
232 is_buffer_sequence_class<T, Buffer>,
261 template <
typename T>
263 : integral_constant<bool,
264 sizeof(size_memfn_helper<T>(0)) != 1 &&
265 sizeof(max_size_memfn_helper<T>(0)) != 1 &&
266 sizeof(capacity_memfn_helper<T>(0)) != 1 &&
267 sizeof(data_memfn_helper<T>(0)) != 1 &&
268 sizeof(consume_memfn_helper<T>(0)) != 1 &&
269 sizeof(prepare_memfn_helper<T>(0)) != 1 &&
270 sizeof(commit_memfn_helper<T>(0)) != 1 &&
271 sizeof(const_buffers_type_typedef_helper<T>(0)) == 1 &&
272 sizeof(mutable_buffers_type_typedef_helper<T>(0)) == 1>
276 template <
typename T>
278 : conditional<is_class<T>::value,
279 is_dynamic_buffer_class_v1<T>,
284 template <
typename T>
286 : integral_constant<bool,
287 sizeof(size_memfn_helper<T>(0)) != 1 &&
288 sizeof(max_size_memfn_helper<T>(0)) != 1 &&
289 sizeof(capacity_memfn_helper<T>(0)) != 1 &&
290 sizeof(data_memfn_helper<T>(0)) != 1 &&
291 sizeof(consume_memfn_helper<T>(0)) != 1 &&
292 sizeof(grow_memfn_helper<T>(0)) != 1 &&
293 sizeof(shrink_memfn_helper<T>(0)) != 1 &&
294 sizeof(const_buffers_type_typedef_helper<T>(0)) == 1 &&
295 sizeof(mutable_buffers_type_typedef_helper<T>(0)) == 1>
299 template <
typename T>
301 : conditional<is_class<T>::value,
302 is_dynamic_buffer_class_v2<T>,
310 #include "asio/detail/pop_options.hpp" 312 #endif // ASIO_DETAIL_IS_BUFFER_SEQUENCE_HPP Definition: is_buffer_sequence.hpp:262
Holds a buffer that cannot be modified.
Definition: buffer.hpp:226
Definition: is_buffer_sequence.hpp:285
Definition: is_buffer_sequence.hpp:30
Definition: is_buffer_sequence.hpp:221
Definition: is_buffer_sequence.hpp:52
Definition: is_buffer_sequence.hpp:300
Definition: type_traits.hpp:97
Holds a buffer that can be modified.
Definition: buffer.hpp:92
Definition: is_buffer_sequence.hpp:277
Definition: is_buffer_sequence.hpp:230
const mutable_buffer * buffer_sequence_begin(const MutableBuffer &b, typename enable_if< is_convertible< const MutableBuffer *, const mutable_buffer *>::value >::type *=0) ASIO_NOEXCEPT
Get an iterator to the first element in a buffer sequence.
Definition: buffer.hpp:388
Definition: is_buffer_sequence.hpp:46
const mutable_buffer * buffer_sequence_end(const MutableBuffer &b, typename enable_if< is_convertible< const MutableBuffer *, const mutable_buffer *>::value >::type *=0) ASIO_NOEXCEPT
Get an iterator to one past the end element in a buffer sequence.
Definition: buffer.hpp:465
Definition: any_io_executor.hpp:28