MySQL 8.3.0
Source Code Documentation
net::impl Namespace Reference

Namespaces

namespace  epoll
 
namespace  file
 
namespace  poll
 
namespace  resolver
 
namespace  socket
 

Classes

class  Callstack
 callstack of a thread. More...
 
class  Dispatcher
 function object for net::dispatch(), net::post(), net::defer(). More...
 
class  dynamic_buffer_base
 
struct  is_buffer_sequence
 
struct  is_buffer_sequence< T, BufferType, std::void_t< buffer_sequence_requirements< T, BufferType > > >
 
struct  is_const_buffer_sequence
 
struct  is_dynamic_buffer
 
struct  is_dynamic_buffer< T, decltype(dynamic_buffer_requirements< T >())>
 
struct  is_executor
 
struct  is_executor< T, decltype(executor_requirements< T >())>
 
struct  is_mutable_buffer_sequence
 
struct  uses_executor
 
struct  uses_executor< T, Executor, std::void_t< typename T::executor_type > >
 

Typedefs

template<class T , class BufferType , class Begin = decltype(net::buffer_sequence_begin( std::declval<typename std::add_lvalue_reference<T>::type>())), class End = decltype(net::buffer_sequence_end( std::declval<typename std::add_lvalue_reference<T>::type>()))>
using buffer_sequence_requirements = std::bool_constant< std::conjunction_v< std::is_same< Begin, End >, std::is_convertible< typename std::iterator_traits< Begin >::value_type, BufferType > > >
 

Functions

template<class T , class U = std::remove_const_t<T>>
auto dynamic_buffer_requirements (U *__x=nullptr, const U *__const_x=nullptr, size_t __n=0) -> std::enable_if_t< std::conjunction< std::is_copy_constructible< U >, is_const_buffer_sequence< typename T::const_buffers_type >, is_mutable_buffer_sequence< typename T::mutable_buffers_type >, std::is_same< decltype(__const_x->size()), size_t >, std::is_same< decltype(__const_x->max_size()), size_t >, std::is_same< decltype(__const_x->capacity()), size_t >, std::is_same< decltype(__const_x->data(__n, __n)), typename T::const_buffers_type >, std::is_same< decltype(__x->data(__n, __n)), typename T::mutable_buffers_type >, std::is_void< decltype(__x->grow(__n))>, std::is_void< decltype(__x->shrink(__n))>, std::is_void< decltype(__x->consume(__n))> >::value >
 
template<typename T >
mutable_buffer to_mutable_buffer (T *data, size_t n)
 
template<typename T >
const_buffer to_const_buffer (const T *data, size_t n)
 
template<class T , typename U = std::remove_const_t<T>>
auto executor_requirements (U *__x=nullptr, const U *__const_x=nullptr, void(*f)()=nullptr, const std::allocator< int > &a={}) -> std::enable_if_t< std::conjunction< std::is_copy_constructible< T >, std::is_same< decltype(*__const_x== *__const_x), bool >, std::is_same< decltype(*__const_x != *__const_x), bool >, std::is_void< decltype(__x->on_work_started())>, std::is_void< decltype(__x->on_work_finished())>, std::is_void< decltype(__x->dispatch(std::move(f), a))>, std::is_void< decltype(__x->post(std::move(f), a))>, std::is_void< decltype(__x->defer(std::move(f), a))> >::value, std::void_t< decltype(__x->context()), void()> >
 
template<class CompletionHandler >
Dispatcher< CompletionHandler > make_dispatcher (CompletionHandler &handler)
 

Typedef Documentation

◆ buffer_sequence_requirements

template<class T , class BufferType , class Begin = decltype(net::buffer_sequence_begin( std::declval<typename std::add_lvalue_reference<T>::type>())), class End = decltype(net::buffer_sequence_end( std::declval<typename std::add_lvalue_reference<T>::type>()))>
using net::impl::buffer_sequence_requirements = typedef std::bool_constant<std::conjunction_v< std::is_same<Begin, End>, std::is_convertible<typename std::iterator_traits<Begin>::value_type, BufferType> >>

Function Documentation

◆ dynamic_buffer_requirements()

template<class T , class U = std::remove_const_t<T>>
auto net::impl::dynamic_buffer_requirements ( U __x = nullptr,
const U __const_x = nullptr,
size_t  __n = 0 
) -> std::enable_if_t< std::conjunction< std::is_copy_constructible< U >, is_const_buffer_sequence< typename T::const_buffers_type >, is_mutable_buffer_sequence< typename T::mutable_buffers_type >, std::is_same< decltype(__const_x->size()), size_t >, std::is_same< decltype(__const_x->max_size()), size_t >, std::is_same< decltype(__const_x->capacity()), size_t >, std::is_same< decltype(__const_x->data(__n, __n)), typename T::const_buffers_type >, std::is_same< decltype(__x->data(__n, __n)), typename T::mutable_buffers_type >, std::is_void< decltype(__x->grow(__n))>, std::is_void< decltype(__x->shrink(__n))>, std::is_void< decltype(__x->consume(__n))> >::value >

◆ executor_requirements()

template<class T , typename U = std::remove_const_t<T>>
auto net::impl::executor_requirements ( U __x = nullptr,
const U __const_x = nullptr,
void(*)()  f = nullptr,
const std::allocator< int > &  a = {} 
) -> std::enable_if_t< std::conjunction< std::is_copy_constructible< T >, std::is_same< decltype(*__const_x== *__const_x), bool >, std::is_same< decltype(*__const_x != *__const_x), bool >, std::is_void< decltype(__x->on_work_started())>, std::is_void< decltype(__x->on_work_finished())>, std::is_void< decltype(__x->dispatch(std::move(f), a))>, std::is_void< decltype(__x->post(std::move(f), a))>, std::is_void< decltype(__x->defer(std::move(f), a))> >::value, std::void_t< decltype(__x->context()), void()> >

◆ make_dispatcher()

template<class CompletionHandler >
Dispatcher< CompletionHandler > net::impl::make_dispatcher ( CompletionHandler &  handler)

◆ to_const_buffer()

template<typename T >
const_buffer net::impl::to_const_buffer ( const T *  data,
size_t  n 
)
inline

◆ to_mutable_buffer()

template<typename T >
mutable_buffer net::impl::to_mutable_buffer ( T *  data,
size_t  n 
)
inline