static broker_ptr from(F fun) { // transform to STD function here, because GCC is unable // to select proper overload otherwise ... typedef decltype(fun((broker*) nullptr)) fres; std::function<fres(broker*)> stdfun{std::move(fun)}; return from_impl(std::move(stdfun)); }
static void increment( hashed_index_node*& x,impl_pointer bbegin,impl_pointer bend) { impl_pointer xi=x->impl(); trampoline::increment(xi,bbegin,bend); x=from_impl(xi); }
static void increment( hashed_index_node*& x, hashed_index_node_impl* bbegin,hashed_index_node_impl* bend) { hashed_index_node_impl* xi=x->impl(); impl_type::increment(xi,bbegin,bend); x=from_impl(xi); }
static broker_ptr from(F fun, input_stream_ptr in, output_stream_ptr out, Ts&&... args) { auto hdl = connection_handle::from_int(in->read_handle()); return from_impl(std::bind(std::move(fun), std::placeholders::_1, hdl, detail::fwd<Ts>(args)...), std::move(in), std::move(out)); }
static void decrement(sequenced_index_node*& x) { impl_pointer xi=x->impl(); trampoline::decrement(xi); x=from_impl(xi); }
static void advance(random_access_index_node*& x,std::ptrdiff_t n) { impl_pointer xi=x->impl(); trampoline::advance(xi,n); x=from_impl(xi); }
static void decrement(random_access_index_node*& x) { impl_pointer xi=x->impl(); trampoline::decrement(xi); x=from_impl(xi); }
static hashed_index_node* end(hashed_index_node* header) { return from_impl(impl_type::end(header->impl())); }