annotate DEPENDENCIES/generic/include/boost/numeric/odeint/algebra/fusion_algebra.hpp @ 35:86bb97521df4

Update subrepos & merge as appropriate
author Chris Cannam
date Wed, 06 Aug 2014 16:05:55 +0100
parents 2665513ce2d3
children c530137014c0
rev   line source
Chris@16 1 /*
Chris@16 2 [auto_generated]
Chris@16 3 boost/numeric/odeint/algebra/fusion_algebra.hpp
Chris@16 4
Chris@16 5 [begin_description]
Chris@16 6 Algebra for boost::fusion sequences.
Chris@16 7 [end_description]
Chris@16 8
Chris@16 9 Copyright 2009-2011 Karsten Ahnert
Chris@16 10 Copyright 2009-2011 Mario Mulansky
Chris@16 11
Chris@16 12 Distributed under the Boost Software License, Version 1.0.
Chris@16 13 (See accompanying file LICENSE_1_0.txt or
Chris@16 14 copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@16 15 */
Chris@16 16
Chris@16 17
Chris@16 18 #ifndef BOOST_NUMERIC_ODEINT_ALGEBRA_FUSION_ALGEBRA_HPP_INCLUDED
Chris@16 19 #define BOOST_NUMERIC_ODEINT_ALGEBRA_FUSION_ALGEBRA_HPP_INCLUDED
Chris@16 20
Chris@16 21
Chris@16 22 #include <boost/fusion/container/vector.hpp>
Chris@16 23 #include <boost/fusion/algorithm/iteration/for_each.hpp>
Chris@16 24 #include <boost/fusion/view/zip_view.hpp>
Chris@16 25 #include <boost/fusion/functional/generation/make_fused.hpp>
Chris@16 26 #include <boost/fusion/algorithm/iteration/accumulate.hpp>
Chris@16 27
Chris@16 28 namespace boost {
Chris@16 29 namespace numeric {
Chris@16 30 namespace odeint {
Chris@16 31
Chris@16 32
Chris@16 33 struct fusion_algebra
Chris@16 34 {
Chris@16 35 template< class S1 , class Op >
Chris@16 36 static void for_each1( S1 &s1 , Op op )
Chris@16 37 {
Chris@16 38 boost::fusion::for_each( s1 , op );
Chris@16 39 };
Chris@16 40
Chris@16 41
Chris@16 42 template< class S1 , class S2 , class Op >
Chris@16 43 static void for_each2( S1 &s1 , S2 &s2 , Op op )
Chris@16 44 {
Chris@16 45 typedef boost::fusion::vector< S1& , S2& > Sequences;
Chris@16 46 Sequences sequences( s1 , s2 );
Chris@16 47 boost::fusion::for_each( boost::fusion::zip_view< Sequences >( sequences ) , boost::fusion::make_fused( op ) );
Chris@16 48 }
Chris@16 49
Chris@16 50
Chris@16 51 template< class S1 , class S2 , class S3 , class Op >
Chris@16 52 static void for_each3( S1 &s1 , S2 &s2 , S3 &s3 , Op op )
Chris@16 53 {
Chris@16 54 typedef boost::fusion::vector< S1& , S2& , S3& > Sequences;
Chris@16 55 Sequences sequences( s1 , s2 , s3 );
Chris@16 56 boost::fusion::for_each( boost::fusion::zip_view< Sequences >( sequences ) , boost::fusion::make_fused( op ) );
Chris@16 57 }
Chris@16 58
Chris@16 59 template< class S1 , class S2 , class S3 , class S4 , class Op >
Chris@16 60 static void for_each4( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , Op op )
Chris@16 61 {
Chris@16 62 typedef boost::fusion::vector< S1& , S2& , S3& , S4& > Sequences;
Chris@16 63 Sequences sequences( s1 , s2 , s3 , s4 );
Chris@16 64 boost::fusion::for_each( boost::fusion::zip_view< Sequences >( sequences ) , boost::fusion::make_fused( op ) );
Chris@16 65 }
Chris@16 66
Chris@16 67
Chris@16 68 template< class S1 , class S2 , class S3 , class S4 , class S5 , class Op >
Chris@16 69 static void for_each5( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , Op op )
Chris@16 70 {
Chris@16 71 typedef boost::fusion::vector< S1& , S2& , S3& , S4& , S5& > Sequences;
Chris@16 72 Sequences sequences( s1 , s2 , s3 , s4 , s5 );
Chris@16 73 boost::fusion::for_each( boost::fusion::zip_view< Sequences >( sequences ) , boost::fusion::make_fused( op ) );
Chris@16 74 }
Chris@16 75
Chris@16 76
Chris@16 77 template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class Op >
Chris@16 78 static void for_each6( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , Op op )
Chris@16 79 {
Chris@16 80 typedef boost::fusion::vector< S1& , S2& , S3& , S4& , S5& , S6& > Sequences;
Chris@16 81 Sequences sequences( s1 , s2 , s3 , s4 , s5 , s6 );
Chris@16 82 boost::fusion::for_each( boost::fusion::zip_view< Sequences >( sequences ) , boost::fusion::make_fused( op ) );
Chris@16 83 }
Chris@16 84
Chris@16 85
Chris@16 86 template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class Op >
Chris@16 87 static void for_each7( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , Op op )
Chris@16 88 {
Chris@16 89 typedef boost::fusion::vector< S1& , S2& , S3& , S4& , S5& , S6& , S7& > Sequences;
Chris@16 90 Sequences sequences( s1 , s2 , s3 , s4 , s5 , s6 , s7 );
Chris@16 91 boost::fusion::for_each( boost::fusion::zip_view< Sequences >( sequences ) , boost::fusion::make_fused( op ) );
Chris@16 92 }
Chris@16 93
Chris@16 94
Chris@16 95 template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class Op >
Chris@16 96 static void for_each8( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , Op op )
Chris@16 97 {
Chris@16 98 BOOST_STATIC_ASSERT_MSG( BOOST_FUSION_INVOKE_MAX_ARITY >= 8 , "Macro Parameter BOOST_FUSION_INVOKE_MAX_ARITY to small!" );
Chris@16 99 typedef boost::fusion::vector< S1& , S2& , S3& , S4& , S5& , S6& , S7& , S8& > Sequences;
Chris@16 100 Sequences sequences( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 );
Chris@16 101 boost::fusion::for_each( boost::fusion::zip_view< Sequences >( sequences ) , boost::fusion::make_fused( op ) );
Chris@16 102 }
Chris@16 103
Chris@16 104 template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class S9 , class Op >
Chris@16 105 static void for_each9( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , Op op )
Chris@16 106 {
Chris@16 107 BOOST_STATIC_ASSERT_MSG( BOOST_FUSION_INVOKE_MAX_ARITY >= 9 , "Macro Parameter BOOST_FUSION_INVOKE_MAX_ARITY to small!" );
Chris@16 108 typedef boost::fusion::vector< S1& , S2& , S3& , S4& , S5& , S6& , S7& , S8& , S9& > Sequences;
Chris@16 109 Sequences sequences( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 );
Chris@16 110 boost::fusion::for_each( boost::fusion::zip_view< Sequences >( sequences ) , boost::fusion::make_fused( op ) );
Chris@16 111 }
Chris@16 112
Chris@16 113 template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class S9 , class S10 , class Op >
Chris@16 114 static void for_each10( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , Op op )
Chris@16 115 {
Chris@16 116 BOOST_STATIC_ASSERT_MSG( BOOST_FUSION_INVOKE_MAX_ARITY >= 10 , "Macro Parameter BOOST_FUSION_INVOKE_MAX_ARITY to small!" );
Chris@16 117 typedef boost::fusion::vector< S1& , S2& , S3& , S4& , S5& , S6& , S7& , S8& , S9& , S10& > Sequences;
Chris@16 118 Sequences sequences( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 );
Chris@16 119 boost::fusion::for_each( boost::fusion::zip_view< Sequences >( sequences ) , boost::fusion::make_fused( op ) );
Chris@16 120 }
Chris@16 121
Chris@16 122 template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class S9 , class S10 , class S11 , class Op >
Chris@16 123 static void for_each11( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , Op op )
Chris@16 124 {
Chris@16 125 BOOST_STATIC_ASSERT_MSG( BOOST_FUSION_INVOKE_MAX_ARITY >= 11 , "Macro Parameter BOOST_FUSION_INVOKE_MAX_ARITY to small!" );
Chris@16 126 BOOST_STATIC_ASSERT_MSG( BOOST_RESULT_OF_NUM_ARGS >= 11 , "Macro Parameter BOOST_RESULT_OF_NUM_ARGS to small!" );
Chris@16 127 typedef boost::fusion::vector< S1& , S2& , S3& , S4& , S5& , S6& , S7& , S8& , S9& , S10& , S11& > Sequences;
Chris@16 128 Sequences sequences( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 );
Chris@16 129 boost::fusion::for_each( boost::fusion::zip_view< Sequences >( sequences ) , boost::fusion::make_fused( op ) );
Chris@16 130 }
Chris@16 131
Chris@16 132 template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class S9 , class S10 , class S11 , class S12 , class Op >
Chris@16 133 static void for_each12( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , S12 &s12 , Op op )
Chris@16 134 {
Chris@16 135 BOOST_STATIC_ASSERT_MSG( BOOST_FUSION_INVOKE_MAX_ARITY >= 12 , "Macro Parameter BOOST_FUSION_INVOKE_MAX_ARITY to small!" );
Chris@16 136 BOOST_STATIC_ASSERT_MSG( BOOST_RESULT_OF_NUM_ARGS >= 12 , "Macro Parameter BOOST_RESULT_OF_NUM_ARGS to small!" );
Chris@16 137 typedef boost::fusion::vector< S1& , S2& , S3& , S4& , S5& , S6& , S7& , S8& , S9& , S10& , S11& , S12& > Sequences;
Chris@16 138 Sequences sequences( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 );
Chris@16 139 boost::fusion::for_each( boost::fusion::zip_view< Sequences >( sequences ) , boost::fusion::make_fused( op ) );
Chris@16 140 }
Chris@16 141
Chris@16 142 template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class S9 , class S10 , class S11 , class S12 , class S13 , class Op >
Chris@16 143 static void for_each13( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , S12 &s12 , S13 &s13 , Op op )
Chris@16 144 {
Chris@16 145 BOOST_STATIC_ASSERT_MSG( BOOST_FUSION_INVOKE_MAX_ARITY >= 13 , "Macro Parameter BOOST_FUSION_INVOKE_MAX_ARITY to small!" );
Chris@16 146 BOOST_STATIC_ASSERT_MSG( BOOST_RESULT_OF_NUM_ARGS >= 13 , "Macro Parameter BOOST_RESULT_OF_NUM_ARGS to small!" );
Chris@16 147 typedef boost::fusion::vector< S1& , S2& , S3& , S4& , S5& , S6& , S7& , S8& , S9& , S10& , S11& , S12& , S13& > Sequences;
Chris@16 148 Sequences sequences( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 , s13 );
Chris@16 149 boost::fusion::for_each( boost::fusion::zip_view< Sequences >( sequences ) , boost::fusion::make_fused( op ) );
Chris@16 150 }
Chris@16 151
Chris@16 152 template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class S9 , class S10 , class S11 , class S12 , class S13 , class S14 , class Op >
Chris@16 153 static void for_each14( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , S12 &s12 , S13 &s13 , S14 &s14 , Op op )
Chris@16 154 {
Chris@16 155 BOOST_STATIC_ASSERT_MSG( BOOST_FUSION_INVOKE_MAX_ARITY >= 14 , "Macro Parameter BOOST_FUSION_INVOKE_MAX_ARITY to small!" );
Chris@16 156 BOOST_STATIC_ASSERT_MSG( BOOST_RESULT_OF_NUM_ARGS >= 14 , "Macro Parameter BOOST_RESULT_OF_NUM_ARGS to small!" );
Chris@16 157 typedef boost::fusion::vector< S1& , S2& , S3& , S4& , S5& , S6& , S7& , S8& , S9& , S10& , S11& , S12& , S13& , S14& > Sequences;
Chris@16 158 Sequences sequences( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 , s13 , s14 );
Chris@16 159 boost::fusion::for_each( boost::fusion::zip_view< Sequences >( sequences ) , boost::fusion::make_fused( op ) );
Chris@16 160 }
Chris@16 161
Chris@16 162 template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class S9 , class S10 , class S11 , class S12 , class S13 , class S14 , class S15 , class Op >
Chris@16 163 static void for_each15( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , S12 &s12 , S13 &s13 , S14 &s14 , S15 &s15 , Op op )
Chris@16 164 {
Chris@16 165 BOOST_STATIC_ASSERT_MSG( BOOST_FUSION_INVOKE_MAX_ARITY >= 15 , "Macro Parameter BOOST_FUSION_INVOKE_MAX_ARITY to small!" );
Chris@16 166 BOOST_STATIC_ASSERT_MSG( BOOST_RESULT_OF_NUM_ARGS >= 15 , "Macro Parameter BOOST_RESULT_OF_NUM_ARGS to small!" );
Chris@16 167 typedef boost::fusion::vector< S1& , S2& , S3& , S4& , S5& , S6& , S7& , S8& , S9& , S10& , S11& , S12& , S13& , S14& , S15& > Sequences;
Chris@16 168 Sequences sequences( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 , s13 , s14 , s15 );
Chris@16 169 boost::fusion::for_each( boost::fusion::zip_view< Sequences >( sequences ) , boost::fusion::make_fused( op ) );
Chris@16 170 }
Chris@16 171
Chris@16 172 template< class Value , class S , class Reduction >
Chris@16 173 static Value reduce( const S &s , Reduction red , Value init)
Chris@16 174 {
Chris@16 175 return boost::fusion::accumulate( s , init , red );
Chris@16 176 }
Chris@16 177 };
Chris@16 178
Chris@16 179
Chris@16 180
Chris@16 181 } // odeint
Chris@16 182 } // numeric
Chris@16 183 } // boost
Chris@16 184
Chris@16 185
Chris@16 186 #endif // BOOST_NUMERIC_ODEINT_ALGEBRA_FUSION_ALGEBRA_HPP_INCLUDED