x
Yes
No
Do you want to visit DriveHQ English website?
Inicio
Características
Precios
Prueba gratuita
Software cliente
Acerca de nosotros
Servidor de archivos
|
Solución de copias de seguridad
|
Servidor FTP
|
Servidor de correo electrónico
|
Alojamiento web
|
Software cliente
Servidor de archivos
Solución de copia de seguridad
Servidor FTP
Servidor de correo electrónico
Alojamiento web
Software cliente
fold.hpp - Hosted on DriveHQ Cloud IT Platform
Arriba
Subir
Descargar
Compartir
Publicar
Nueva carpeta
Nuevo archivo
Copiar
Cortar
Eliminar
Pegar
Clasificación
Actualizar
Ruta de la carpeta: \\game3dprogramming\materials\GameFactory\GameFactoryDemo\references\boost_1_35_0\boost\fusion\algorithm\iteration\detail\fold.hpp
Girar
Efecto
Propiedad
Historial
/*============================================================================= Copyright (c) 2001-2006 Joel de Guzman Copyright (c) 2006 Dan Marsden 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) ==============================================================================*/ #if !defined(BOOST_FUSION_FOLD_HPP_20070528_1253) #define BOOST_FUSION_FOLD_HPP_20070528_1253 #include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
namespace boost { namespace fusion { namespace result_of { template
struct fold; } namespace detail { template
struct apply_fold_result { template
struct apply : boost::result_of
{}; }; template
struct fold_apply { typedef typename result_of::deref
::type dereferenced; typedef typename add_reference
::type>::type lvalue_state; typedef typename boost::result_of
::type type; }; template
struct static_fold; template
struct next_result_of_fold { typedef typename static_fold< typename result_of::next
::type , Last , typename fold_apply
::type , F >::type type; }; template
struct static_fold { typedef typename mpl::if_< result_of::equal_to
, mpl::identity
, next_result_of_fold
>::type result; typedef typename result::type type; }; template
struct result_of_unrolled_fold; template
struct unrolled_fold { template
static typename result_of_unrolled_fold
::type call(I0 const& i0, State const& state, F f) { typedef typename result_of::next
::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next
::type I2; I2 i2 = fusion::next(i1); typedef typename result_of::next
::type I3; I3 i3 = fusion::next(i2); typedef typename result_of::next
::type I4; I4 i4 = fusion::next(i3); return unrolled_fold
::call(i4, f(*i3, f(*i2, f(*i1, f(*i0, state)))), f); } }; template<> struct unrolled_fold<3> { template
static typename result_of_unrolled_fold
::type call(I0 const& i0, State const& state, F f) { typedef typename result_of::next
::type I1; I1 i1 = fusion::next(i0); typedef typename result_of::next
::type I2; I2 i2 = fusion::next(i1); return f(*i2, f(*i1, f(*i0, state))); } }; template<> struct unrolled_fold<2> { template
static typename result_of_unrolled_fold
::type call(I0 const& i0, State const& state, F f) { typedef typename result_of::next
::type I1; I1 i1 = fusion::next(i0); return f(*i1, f(*i0, state)); } }; template<> struct unrolled_fold<1> { template
static typename result_of_unrolled_fold
::type call(I0 const& i0, State const& state, F f) { return f(*i0, state); } }; template<> struct unrolled_fold<0> { template
static State call(I0 const&, State const& state, F) { return state; } }; // terminal case template
inline State const& linear_fold(First const&, Last const&, State const& state, F, mpl::true_) { return state; } // non-terminal case template
inline typename static_fold
::type linear_fold( First const& first , Last const& last , State const& state , F f , mpl::false_) { return detail::linear_fold( fusion::next(first) , last , f(*first, state) , f , result_of::equal_to
::type, Last>() ); } template
struct result_of_unrolled_fold { typedef typename result_of::next
::type I1; typedef typename result_of::next
::type I2; typedef typename result_of::next
::type I3; typedef typename result_of::next
::type I4; typedef typename fold_apply
::type Rest1; typedef typename fold_apply
::type Rest2; typedef typename fold_apply
::type Rest3; typedef typename fold_apply
::type Rest4; typedef typename result_of_unrolled_fold
::type type; }; template
struct result_of_unrolled_fold
{ typedef typename result_of::next
::type I1; typedef typename result_of::next
::type I2; typedef typename fold_apply
::type Rest; typedef typename fold_apply
::type Rest2; typedef typename fold_apply
::type type; }; template
struct result_of_unrolled_fold
{ typedef typename result_of::next
::type I1; typedef typename fold_apply
::type Rest; typedef typename fold_apply
::type type; }; template
struct result_of_unrolled_fold
{ typedef typename fold_apply
::type type; }; template
struct result_of_unrolled_fold
{ typedef State type; }; template
struct choose_fold; template
struct choose_fold
{ typedef typename result_of::begin
::type begin; typedef typename result_of::end
::type end; typedef typename result_of_unrolled_fold< begin, State, F, result_of::distance
::type::value>::type type; }; template
struct choose_fold
{ typedef typename detail::static_fold< typename result_of::begin
::type , typename result_of::end
::type , State , F >::type type; }; template
typename result_of::fold
::type fold(Sequence& seq, State const& state, F f, Tag) { return linear_fold( fusion::begin(seq) , fusion::end(seq) , state , f , result_of::equal_to< typename result_of::begin
::type , typename result_of::end
::type>() ); } template
typename result_of::fold
::type fold(Sequence& seq, State const& state, F f, random_access_traversal_tag) { typedef typename result_of::begin
::type begin; typedef typename result_of::end
::type end; return unrolled_fold
::type::value>::call( fusion::begin(seq) , state , f); } }}} #endif
fold.hpp
Dirección de la página
Dirección del archivo
Anterior 1/2
Siguiente
Descargar
( 9 KB )
Comments
Total ratings:
0
Average rating:
No clasificado
of 10
Would you like to comment?
Join now
, or
Logon
if you are already a member.