// WebURLLoaderTestDelegate overrides: void didReceiveData(WebURLLoaderClient* originalClient, WebURLLoader* loader, const char* data, int dataLength, int encodedDataLength) override { EXPECT_EQ(34, dataLength) << "foo.html was not served in a single chunk"; m_loaderClient = originalClient; m_loader = loader; for (int i = 0; i < dataLength; ++i) m_data.push(data[i]); { // Serve the first byte to the real WebURLLoaderCLient, which // should trigger frameDetach() due to committing a provisional // load. TemporaryChange<bool> dispatching(m_dispatchingDidReceiveData, true); dispatchOneByte(); } // Serve the remaining bytes to complete the load. EXPECT_FALSE(m_data.empty()); while (!m_data.empty()) dispatchOneByte(); }
/*! @brief cotangent generic tag Represents the cotangent function in generic contexts. @par Models: Hierarchy **/ template <class T> struct cotangent_ : ext::elementwise_< cotangent_<T> > { /// @brief Parent hierarchy typedef ext::elementwise_< cotangent_<T> > parent; template<class... Args> static BOOST_FORCEINLINE BOOST_AUTO_DECLTYPE dispatch(Args&&... args) BOOST_AUTO_DECLTYPE_HEADER( dispatching( ext::adl_helper(), *(cotangent_*)0, static_cast<Args&&>(args)... ) ) { return dispatching( ext::adl_helper(), cotangent_(), static_cast<Args&&>(args)... ); } }; } /*! cotangent with template selection. @par Semantic: For template selector @c Range in proper selector types choice and for every parameter of floating type T0: @code T0 r = cotangent<Range>(x);
// What the f**k with adl_helper ? Well, as pointed out by Johannes Schaub // it is mandated by the standard so ADL kicks in on resolving calls to // dispatching without having to order them BEFORE the actual dispatch_call // class definitions. Without it, the whole system brittles. //============================================================================== //============================================================================== // Actual dispatching mechanism implementation //============================================================================== namespace boost { namespace dispatch { namespace meta { struct adl_helper {}; //============================================================================ // Default dispatch overload set for catching calls to unsupported functor // overload or unregistered types. //============================================================================ template< class Tag, class Site > BOOST_FORCEINLINE boost::dispatch::meta:: implement<tag::unknown_, Site, Tag()> dispatching ( meta::unknown_<Tag>, meta::unknown_<Site> , adl_helper = adl_helper() ) { boost::dispatch::meta::implement<tag::unknown_, Site , Tag() > that; return that; } template< class Tag, class Site , class A0> BOOST_FORCEINLINE boost::dispatch::meta:: implement<tag::unknown_, Site, Tag(typename meta::hierarchy_of<A0>::type)> dispatching ( meta::unknown_<Tag>, meta::unknown_<Site> , meta::unknown_<A0> , adl_helper = adl_helper() ) { boost::dispatch::meta::implement<tag::unknown_, Site , Tag(typename meta::hierarchy_of<A0>::type) > that; return that; } template< class Tag, class Site , class A0 , class A1> BOOST_FORCEINLINE boost::dispatch::meta:: implement<tag::unknown_, Site, Tag(typename meta::hierarchy_of<A0>::type , typename meta::hierarchy_of<A1>::type)> dispatching ( meta::unknown_<Tag>, meta::unknown_<Site> , meta::unknown_<A0> , meta::unknown_<A1> , adl_helper = adl_helper() ) { boost::dispatch::meta::implement<tag::unknown_, Site , Tag(typename meta::hierarchy_of<A0>::type , typename meta::hierarchy_of<A1>::type) > that; return that; } template< class Tag, class Site , class A0 , class A1 , class A2> BOOST_FORCEINLINE boost::dispatch::meta:: implement<tag::unknown_, Site, Tag(typename meta::hierarchy_of<A0>::type , typename meta::hierarchy_of<A1>::type , typename meta::hierarchy_of<A2>::type)> dispatching ( meta::unknown_<Tag>, meta::unknown_<Site> , meta::unknown_<A0> , meta::unknown_<A1> , meta::unknown_<A2> , adl_helper = adl_helper() ) { boost::dispatch::meta::implement<tag::unknown_, Site , Tag(typename meta::hierarchy_of<A0>::type , typename meta::hierarchy_of<A1>::type , typename meta::hierarchy_of<A2>::type) > that; return that; } template< class Tag, class Site , class A0 , class A1 , class A2 , class A3> BOOST_FORCEINLINE boost::dispatch::meta:: implement<tag::unknown_, Site, Tag(typename meta::hierarchy_of<A0>::type , typename meta::hierarchy_of<A1>::type , typename meta::hierarchy_of<A2>::type , typename meta::hierarchy_of<A3>::type)> dispatching ( meta::unknown_<Tag>, meta::unknown_<Site> , meta::unknown_<A0> , meta::unknown_<A1> , meta::unknown_<A2> , meta::unknown_<A3> , adl_helper = adl_helper() ) { boost::dispatch::meta::implement<tag::unknown_, Site , Tag(typename meta::hierarchy_of<A0>::type , typename meta::hierarchy_of<A1>::type , typename meta::hierarchy_of<A2>::type , typename meta::hierarchy_of<A3>::type) > that; return that; } template< class Tag, class Site , class A0 , class A1 , class A2 , class A3 , class A4> BOOST_FORCEINLINE boost::dispatch::meta:: implement<tag::unknown_, Site, Tag(typename meta::hierarchy_of<A0>::type , typename meta::hierarchy_of<A1>::type , typename meta::hierarchy_of<A2>::type , typename meta::hierarchy_of<A3>::type , typename meta::hierarchy_of<A4>::type)> dispatching ( meta::unknown_<Tag>, meta::unknown_<Site> , meta::unknown_<A0> , meta::unknown_<A1> , meta::unknown_<A2> , meta::unknown_<A3> , meta::unknown_<A4> , adl_helper = adl_helper() ) { boost::dispatch::meta::implement<tag::unknown_, Site , Tag(typename meta::hierarchy_of<A0>::type , typename meta::hierarchy_of<A1>::type , typename meta::hierarchy_of<A2>::type , typename meta::hierarchy_of<A3>::type , typename meta::hierarchy_of<A4>::type) > that; return that; } template< class Tag, class Site , class A0 , class A1 , class A2 , class A3 , class A4 , class A5> BOOST_FORCEINLINE boost::dispatch::meta:: implement<tag::unknown_, Site, Tag(typename meta::hierarchy_of<A0>::type , typename meta::hierarchy_of<A1>::type , typename meta::hierarchy_of<A2>::type , typename meta::hierarchy_of<A3>::type , typename meta::hierarchy_of<A4>::type , typename meta::hierarchy_of<A5>::type)> dispatching ( meta::unknown_<Tag>, meta::unknown_<Site> , meta::unknown_<A0> , meta::unknown_<A1> , meta::unknown_<A2> , meta::unknown_<A3> , meta::unknown_<A4> , meta::unknown_<A5> , adl_helper = adl_helper() ) { boost::dispatch::meta::implement<tag::unknown_, Site , Tag(typename meta::hierarchy_of<A0>::type , typename meta::hierarchy_of<A1>::type , typename meta::hierarchy_of<A2>::type , typename meta::hierarchy_of<A3>::type , typename meta::hierarchy_of<A4>::type , typename meta::hierarchy_of<A5>::type) > that; return that; } } } } //============================================================================== // Local macro to generate the dispatch selector //============================================================================== /**/ namespace boost { namespace dispatch { namespace meta { //============================================================================== // dispatch_call finds the proper call overload for evaluating a given // functor over a set of types on a given site //============================================================================== template<class Sig, class Site> struct dispatch_call; template< class Tag, class Site > struct dispatch_call<Tag(), Site> { typedef BOOST_DISPATCH_TYPEOF ( dispatching ( (typename meta::hierarchy_of<Tag>::type()) , (typename meta::hierarchy_of<Site>::type()) , adl_helper() ) ) type; }; template< class Tag, class Site , class A0 > struct dispatch_call<Tag(A0), Site> { typedef BOOST_DISPATCH_TYPEOF ( dispatching ( (typename meta::hierarchy_of<Tag>::type()) , (typename meta::hierarchy_of<Site>::type()) , (typename meta::hierarchy_of<A0>::type()) , adl_helper() ) ) type; }; template< class Tag, class Site , class A0 , class A1 > struct dispatch_call<Tag(A0 , A1), Site> { typedef BOOST_DISPATCH_TYPEOF ( dispatching ( (typename meta::hierarchy_of<Tag>::type()) , (typename meta::hierarchy_of<Site>::type()) , (typename meta::hierarchy_of<A0>::type()) , (typename meta::hierarchy_of<A1>::type()) , adl_helper() ) ) type; }; template< class Tag, class Site , class A0 , class A1 , class A2 > struct dispatch_call<Tag(A0 , A1 , A2), Site> { typedef BOOST_DISPATCH_TYPEOF ( dispatching ( (typename meta::hierarchy_of<Tag>::type()) , (typename meta::hierarchy_of<Site>::type()) , (typename meta::hierarchy_of<A0>::type()) , (typename meta::hierarchy_of<A1>::type()) , (typename meta::hierarchy_of<A2>::type()) , adl_helper() ) ) type; }; template< class Tag, class Site , class A0 , class A1 , class A2 , class A3 > struct dispatch_call<Tag(A0 , A1 , A2 , A3), Site> { typedef BOOST_DISPATCH_TYPEOF ( dispatching ( (typename meta::hierarchy_of<Tag>::type()) , (typename meta::hierarchy_of<Site>::type()) , (typename meta::hierarchy_of<A0>::type()) , (typename meta::hierarchy_of<A1>::type()) , (typename meta::hierarchy_of<A2>::type()) , (typename meta::hierarchy_of<A3>::type()) , adl_helper() ) ) type; }; template< class Tag, class Site , class A0 , class A1 , class A2 , class A3 , class A4 > struct dispatch_call<Tag(A0 , A1 , A2 , A3 , A4), Site> { typedef BOOST_DISPATCH_TYPEOF ( dispatching ( (typename meta::hierarchy_of<Tag>::type()) , (typename meta::hierarchy_of<Site>::type()) , (typename meta::hierarchy_of<A0>::type()) , (typename meta::hierarchy_of<A1>::type()) , (typename meta::hierarchy_of<A2>::type()) , (typename meta::hierarchy_of<A3>::type()) , (typename meta::hierarchy_of<A4>::type()) , adl_helper() ) ) type; }; template< class Tag, class Site , class A0 , class A1 , class A2 , class A3 , class A4 , class A5 > struct dispatch_call<Tag(A0 , A1 , A2 , A3 , A4 , A5), Site> { typedef BOOST_DISPATCH_TYPEOF ( dispatching ( (typename meta::hierarchy_of<Tag>::type()) , (typename meta::hierarchy_of<Site>::type()) , (typename meta::hierarchy_of<A0>::type()) , (typename meta::hierarchy_of<A1>::type()) , (typename meta::hierarchy_of<A2>::type()) , (typename meta::hierarchy_of<A3>::type()) , (typename meta::hierarchy_of<A4>::type()) , (typename meta::hierarchy_of<A5>::type()) , adl_helper() ) ) type; }; } } }
BOOST_FORCEINLINE typename result<generic_dispatcher(Args&&...)>::type operator()(Args&&... args) const { return dispatching(meta::adl_helper(), Tag(), boost::dispatch::default_site_t<Site>(), boost::dispatch::meta::hierarchy_of_t<Args&&>()...)(static_cast<Args&&>(args)...); }
result_of< decltype(dispatching(meta::adl_helper(), Tag(), boost::dispatch::default_site_t<Site>(), boost::dispatch::meta::hierarchy_of_t<Args>()...))(Args...) > { }; template<class... Args> BOOST_FORCEINLINE typename result<generic_dispatcher(Args&&...)>::type operator()(Args&&... args) const { return dispatching(meta::adl_helper(), Tag(), boost::dispatch::default_site_t<Site>(), boost::dispatch::meta::hierarchy_of_t<Args&&>()...)(static_cast<Args&&>(args)...); } #else template<class... Args> BOOST_FORCEINLINE auto operator()(Args&&... args) const BOOST_AUTO_DECLTYPE_BODY_SFINAE( dispatching(meta::adl_helper(), Tag(), boost::dispatch::default_site_t<Site>(), boost::dispatch::meta::hierarchy_of_t<Args&&>()...)(static_cast<Args&&>(args)...) ) #endif }; } } namespace boost { namespace simd { namespace ext { struct adl_helper {}; template<class Tag, class Site, class... Ts> BOOST_FORCEINLINE boost::dispatch::generic_dispatcher<Tag, Site> dispatching(adl_helper, unknown_<Tag>, unknown_<Site>, unknown_<Ts>...) { return boost::dispatch::generic_dispatcher<Tag, Site>(); }
// it is mandated by the standard so ADL kicks in on resolving calls to // dispatching without having to order them BEFORE the actual dispatch_call // class definitions. Without it, the whole system brittles. //============================================================================== //============================================================================== // Actual dispatching mechanism implementation //============================================================================== namespace boost { namespace dispatch { namespace meta { struct adl_helper {}; //============================================================================ // Default dispatch overload set for catching calls to unsupported functor // overload or unregistered types. //============================================================================ template< class Tag, class Site > BOOST_FORCEINLINE boost::dispatch::meta:: implement<tag::unknown_, Site, Tag()> dispatching ( meta::unknown_<Tag>, meta::unknown_<Site> , adl_helper = adl_helper() ) { boost::dispatch::meta::implement<tag::unknown_, Site , Tag() > that; return that; } template< class Tag, class Site , class A0> BOOST_FORCEINLINE boost::dispatch::meta:: implement<tag::unknown_, Site, Tag(A0)> dispatching ( meta::unknown_<Tag>, meta::unknown_<Site> , meta::unknown_<A0> , adl_helper = adl_helper() ) { boost::dispatch::meta::implement<tag::unknown_, Site , Tag(A0) > that; return that; } template< class Tag, class Site , class A0 , class A1> BOOST_FORCEINLINE boost::dispatch::meta:: implement<tag::unknown_, Site, Tag(A0 , A1)> dispatching ( meta::unknown_<Tag>, meta::unknown_<Site> , meta::unknown_<A0> , meta::unknown_<A1> , adl_helper = adl_helper() ) { boost::dispatch::meta::implement<tag::unknown_, Site , Tag(A0 , A1) > that; return that; } template< class Tag, class Site , class A0 , class A1 , class A2> BOOST_FORCEINLINE boost::dispatch::meta:: implement<tag::unknown_, Site, Tag(A0 , A1 , A2)> dispatching ( meta::unknown_<Tag>, meta::unknown_<Site> , meta::unknown_<A0> , meta::unknown_<A1> , meta::unknown_<A2> , adl_helper = adl_helper() ) { boost::dispatch::meta::implement<tag::unknown_, Site , Tag(A0 , A1 , A2) > that; return that; } template< class Tag, class Site , class A0 , class A1 , class A2 , class A3> BOOST_FORCEINLINE boost::dispatch::meta:: implement<tag::unknown_, Site, Tag(A0 , A1 , A2 , A3)> dispatching ( meta::unknown_<Tag>, meta::unknown_<Site> , meta::unknown_<A0> , meta::unknown_<A1> , meta::unknown_<A2> , meta::unknown_<A3> , adl_helper = adl_helper() ) { boost::dispatch::meta::implement<tag::unknown_, Site , Tag(A0 , A1 , A2 , A3) > that; return that; } template< class Tag, class Site , class A0 , class A1 , class A2 , class A3 , class A4> BOOST_FORCEINLINE boost::dispatch::meta:: implement<tag::unknown_, Site, Tag(A0 , A1 , A2 , A3 , A4)> dispatching ( meta::unknown_<Tag>, meta::unknown_<Site> , meta::unknown_<A0> , meta::unknown_<A1> , meta::unknown_<A2> , meta::unknown_<A3> , meta::unknown_<A4> , adl_helper = adl_helper() ) { boost::dispatch::meta::implement<tag::unknown_, Site , Tag(A0 , A1 , A2 , A3 , A4) > that; return that; } template< class Tag, class Site , class A0 , class A1 , class A2 , class A3 , class A4 , class A5> BOOST_FORCEINLINE boost::dispatch::meta:: implement<tag::unknown_, Site, Tag(A0 , A1 , A2 , A3 , A4 , A5)> dispatching ( meta::unknown_<Tag>, meta::unknown_<Site> , meta::unknown_<A0> , meta::unknown_<A1> , meta::unknown_<A2> , meta::unknown_<A3> , meta::unknown_<A4> , meta::unknown_<A5> , adl_helper = adl_helper() ) { boost::dispatch::meta::implement<tag::unknown_, Site , Tag(A0 , A1 , A2 , A3 , A4 , A5) > that; return that; } } } } //============================================================================== // Local macro to generate the dispatch selector //============================================================================== /**/ namespace boost { namespace dispatch { namespace meta { //============================================================================== // dispatch_call finds the proper call overload for evaluating a given // functor over a set of types on a given site //============================================================================== template<class Sig, class Site = void> struct dispatch_call; template< class Tag, class Site_ > struct dispatch_call<Tag(), Site_> { typedef typename boost::mpl:: eval_if< is_void<Site_> , default_site<Tag> , mpl::identity<Site_> >::type Site; typedef BOOST_DISPATCH_TYPEOF ( dispatching ( (typename meta::hierarchy_of<Tag>::type()) , (typename meta::hierarchy_of<Site>::type()) , adl_helper() ) ) type; }; template< class Tag, class Site_ , class A0 > struct dispatch_call<Tag(A0), Site_> { typedef typename boost::mpl:: eval_if< is_void<Site_> , default_site<Tag> , mpl::identity<Site_> >::type Site; typedef BOOST_DISPATCH_TYPEOF ( dispatching ( (typename meta::hierarchy_of<Tag>::type()) , (typename meta::hierarchy_of<Site>::type()) , (typename meta::hierarchy_of<A0>::type()) , adl_helper() ) ) type; }; template< class Tag, class Site_ , class A0 , class A1 > struct dispatch_call<Tag(A0 , A1), Site_> { typedef typename boost::mpl:: eval_if< is_void<Site_> , default_site<Tag> , mpl::identity<Site_> >::type Site; typedef BOOST_DISPATCH_TYPEOF ( dispatching ( (typename meta::hierarchy_of<Tag>::type()) , (typename meta::hierarchy_of<Site>::type()) , (typename meta::hierarchy_of<A0>::type()) , (typename meta::hierarchy_of<A1>::type()) , adl_helper() ) ) type; }; template< class Tag, class Site_ , class A0 , class A1 , class A2 > struct dispatch_call<Tag(A0 , A1 , A2), Site_> { typedef typename boost::mpl:: eval_if< is_void<Site_> , default_site<Tag> , mpl::identity<Site_> >::type Site; typedef BOOST_DISPATCH_TYPEOF ( dispatching ( (typename meta::hierarchy_of<Tag>::type()) , (typename meta::hierarchy_of<Site>::type()) , (typename meta::hierarchy_of<A0>::type()) , (typename meta::hierarchy_of<A1>::type()) , (typename meta::hierarchy_of<A2>::type()) , adl_helper() ) ) type; }; template< class Tag, class Site_ , class A0 , class A1 , class A2 , class A3 > struct dispatch_call<Tag(A0 , A1 , A2 , A3), Site_> { typedef typename boost::mpl:: eval_if< is_void<Site_> , default_site<Tag> , mpl::identity<Site_> >::type Site; typedef BOOST_DISPATCH_TYPEOF ( dispatching ( (typename meta::hierarchy_of<Tag>::type()) , (typename meta::hierarchy_of<Site>::type()) , (typename meta::hierarchy_of<A0>::type()) , (typename meta::hierarchy_of<A1>::type()) , (typename meta::hierarchy_of<A2>::type()) , (typename meta::hierarchy_of<A3>::type()) , adl_helper() ) ) type; }; template< class Tag, class Site_ , class A0 , class A1 , class A2 , class A3 , class A4 > struct dispatch_call<Tag(A0 , A1 , A2 , A3 , A4), Site_> { typedef typename boost::mpl:: eval_if< is_void<Site_> , default_site<Tag> , mpl::identity<Site_> >::type Site; typedef BOOST_DISPATCH_TYPEOF ( dispatching ( (typename meta::hierarchy_of<Tag>::type()) , (typename meta::hierarchy_of<Site>::type()) , (typename meta::hierarchy_of<A0>::type()) , (typename meta::hierarchy_of<A1>::type()) , (typename meta::hierarchy_of<A2>::type()) , (typename meta::hierarchy_of<A3>::type()) , (typename meta::hierarchy_of<A4>::type()) , adl_helper() ) ) type; }; template< class Tag, class Site_ , class A0 , class A1 , class A2 , class A3 , class A4 , class A5 > struct dispatch_call<Tag(A0 , A1 , A2 , A3 , A4 , A5), Site_> { typedef typename boost::mpl:: eval_if< is_void<Site_> , default_site<Tag> , mpl::identity<Site_> >::type Site; typedef BOOST_DISPATCH_TYPEOF ( dispatching ( (typename meta::hierarchy_of<Tag>::type()) , (typename meta::hierarchy_of<Site>::type()) , (typename meta::hierarchy_of<A0>::type()) , (typename meta::hierarchy_of<A1>::type()) , (typename meta::hierarchy_of<A2>::type()) , (typename meta::hierarchy_of<A3>::type()) , (typename meta::hierarchy_of<A4>::type()) , (typename meta::hierarchy_of<A5>::type()) , adl_helper() ) ) type; }; } } }