Chris@16
|
1 /*
|
Chris@16
|
2 [auto_generated]
|
Chris@16
|
3 boost/numeric/odeint/algebra/range_algebra.hpp
|
Chris@16
|
4
|
Chris@16
|
5 [begin_description]
|
Chris@16
|
6 Default algebra, which works with the most state types, like vector< double >, boost::array< double >, boost::range.
|
Chris@16
|
7 Internally is uses boost::range to obtain the begin and end iterator of the according sequence.
|
Chris@16
|
8 [end_description]
|
Chris@16
|
9
|
Chris@101
|
10 Copyright 2010-2013 Karsten Ahnert
|
Chris@101
|
11 Copyright 2010-2013 Mario Mulansky
|
Chris@16
|
12
|
Chris@16
|
13 Distributed under the Boost Software License, Version 1.0.
|
Chris@16
|
14 (See accompanying file LICENSE_1_0.txt or
|
Chris@16
|
15 copy at http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
16 */
|
Chris@16
|
17
|
Chris@16
|
18
|
Chris@16
|
19 #ifndef BOOST_NUMERIC_ODEINT_ALGEBRA_RANGE_ALGEBRA_HPP_INCLUDED
|
Chris@16
|
20 #define BOOST_NUMERIC_ODEINT_ALGEBRA_RANGE_ALGEBRA_HPP_INCLUDED
|
Chris@16
|
21
|
Chris@16
|
22 #include <boost/range.hpp>
|
Chris@16
|
23 #include <boost/mpl/size_t.hpp>
|
Chris@16
|
24
|
Chris@16
|
25 #include <boost/numeric/odeint/algebra/detail/macros.hpp>
|
Chris@16
|
26 #include <boost/numeric/odeint/algebra/detail/for_each.hpp>
|
Chris@101
|
27 #include <boost/numeric/odeint/algebra/detail/norm_inf.hpp>
|
Chris@101
|
28 #include <boost/numeric/odeint/algebra/norm_result_type.hpp>
|
Chris@16
|
29
|
Chris@16
|
30 namespace boost {
|
Chris@16
|
31 namespace numeric {
|
Chris@16
|
32 namespace odeint {
|
Chris@16
|
33
|
Chris@16
|
34 struct range_algebra
|
Chris@16
|
35 {
|
Chris@16
|
36 template< class S1 , class Op >
|
Chris@16
|
37 static void for_each1( S1 &s1 , Op op )
|
Chris@16
|
38 {
|
Chris@16
|
39 detail::for_each1( boost::begin( s1 ) , boost::end( s1 ) ,
|
Chris@16
|
40 op );
|
Chris@16
|
41 }
|
Chris@16
|
42
|
Chris@16
|
43 template< class S1 , class S2 , class Op >
|
Chris@16
|
44 static void for_each2( S1 &s1 , S2 &s2 , Op op )
|
Chris@16
|
45 {
|
Chris@16
|
46 detail::for_each2( boost::begin( s1 ) , boost::end( s1 ) ,
|
Chris@16
|
47 boost::begin( s2 ) , op );
|
Chris@16
|
48 }
|
Chris@16
|
49
|
Chris@16
|
50 template< class S1 , class S2 , class S3 , class Op >
|
Chris@16
|
51 static void for_each3( S1 &s1 , S2 &s2 , S3 &s3 , Op op )
|
Chris@16
|
52 {
|
Chris@16
|
53 detail::for_each3( boost::begin( s1 ) , boost::end( s1 ) , boost::begin( s2 ) , boost::begin( s3 ) , op );
|
Chris@16
|
54 }
|
Chris@16
|
55
|
Chris@16
|
56 template< class S1 , class S2 , class S3 , class S4 , class Op >
|
Chris@16
|
57 static void for_each4( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , Op op )
|
Chris@16
|
58 {
|
Chris@16
|
59 detail::for_each4( boost::begin( s1 ) , boost::end( s1 ) , boost::begin( s2 ) , boost::begin( s3 ) , boost::begin( s4 ) , op );
|
Chris@16
|
60 }
|
Chris@16
|
61
|
Chris@16
|
62 template< class S1 , class S2 , class S3 , class S4 , class S5 , class Op >
|
Chris@16
|
63 static void for_each5( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , Op op )
|
Chris@16
|
64 {
|
Chris@16
|
65 detail::for_each5( boost::begin( s1 ) , boost::end( s1 ) , boost::begin( s2 ) , boost::begin( s3 ) , boost::begin( s4 ) , boost::begin( s5 ) , op );
|
Chris@16
|
66 }
|
Chris@16
|
67
|
Chris@16
|
68 template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class Op >
|
Chris@16
|
69 static void for_each6( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , Op op )
|
Chris@16
|
70 {
|
Chris@16
|
71 detail::for_each6( boost::begin( s1 ) , boost::end( s1 ) , boost::begin( s2 ) , boost::begin( s3 ) , boost::begin( s4 ) , boost::begin( s5 ) , boost::begin( s6 ) , op );
|
Chris@16
|
72 }
|
Chris@16
|
73
|
Chris@16
|
74 template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class Op >
|
Chris@16
|
75 static void for_each7( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , Op op )
|
Chris@16
|
76 {
|
Chris@16
|
77 detail::for_each7( boost::begin( s1 ) , boost::end( s1 ) , boost::begin( s2 ) , boost::begin( s3 ) , boost::begin( s4 ) , boost::begin( s5 ) , boost::begin( s6 ) , boost::begin( s7 ) , op );
|
Chris@16
|
78 }
|
Chris@16
|
79
|
Chris@16
|
80 template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class S8 , class Op >
|
Chris@16
|
81 static void for_each8( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , Op op )
|
Chris@16
|
82 {
|
Chris@16
|
83 detail::for_each8( boost::begin( s1 ) , boost::end( s1 ) , boost::begin( s2 ) , boost::begin( s3 ) , boost::begin( s4 ) , boost::begin( s5 ) , boost::begin( s6 ) , boost::begin( s7 ) , boost::begin( s8 ) , op );
|
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 S8 , class S9 , class Op >
|
Chris@16
|
87 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
|
88 {
|
Chris@16
|
89 detail::for_each9( boost::begin( s1 ) , boost::end( s1 ) , boost::begin( s2 ) , boost::begin( s3 ) , boost::begin( s4 ) , boost::begin( s5 ) , boost::begin( s6 ) , boost::begin( s7 ) , boost::begin( s8 ) , boost::begin( s9 ) , op );
|
Chris@16
|
90 }
|
Chris@16
|
91
|
Chris@16
|
92 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
|
93 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
|
94 {
|
Chris@16
|
95 detail::for_each10( boost::begin( s1 ) , boost::end( s1 ) , boost::begin( s2 ) , boost::begin( s3 ) , boost::begin( s4 ) , boost::begin( s5 ) , boost::begin( s6 ) , boost::begin( s7 ) , boost::begin( s8 ) , boost::begin( s9 ) , boost::begin( s10 ) , op );
|
Chris@16
|
96 }
|
Chris@16
|
97
|
Chris@16
|
98 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
|
99 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
|
100 {
|
Chris@16
|
101 detail::for_each11( boost::begin( s1 ) , boost::end( s1 ) , boost::begin( s2 ) , boost::begin( s3 ) , boost::begin( s4 ) , boost::begin( s5 ) , boost::begin( s6 ) , boost::begin( s7 ) , boost::begin( s8 ) , boost::begin( s9 ) , boost::begin( s10 ) , boost::begin( s11 ) , 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 S10 , class S11 , class S12 , class Op >
|
Chris@16
|
105 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
|
106 {
|
Chris@16
|
107 detail::for_each12( boost::begin( s1 ) , boost::end( s1 ) , boost::begin( s2 ) , boost::begin( s3 ) , boost::begin( s4 ) , boost::begin( s5 ) , boost::begin( s6 ) , boost::begin( s7 ) , boost::begin( s8 ) , boost::begin( s9 ) , boost::begin( s10 ) , boost::begin( s11 ) , boost::begin( s12 ) , op );
|
Chris@16
|
108 }
|
Chris@16
|
109
|
Chris@16
|
110 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
|
111 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
|
112 {
|
Chris@16
|
113 detail::for_each13( boost::begin( s1 ) , boost::end( s1 ) , boost::begin( s2 ) , boost::begin( s3 ) , boost::begin( s4 ) , boost::begin( s5 ) , boost::begin( s6 ) , boost::begin( s7 ) , boost::begin( s8 ) , boost::begin( s9 ) , boost::begin( s10 ) , boost::begin( s11 ) , boost::begin( s12 ) , boost::begin( s13 ) , op );
|
Chris@16
|
114 }
|
Chris@16
|
115
|
Chris@16
|
116 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
|
117 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
|
118 {
|
Chris@16
|
119 detail::for_each14( boost::begin( s1 ) , boost::end( s1 ) , boost::begin( s2 ) , boost::begin( s3 ) , boost::begin( s4 ) , boost::begin( s5 ) , boost::begin( s6 ) , boost::begin( s7 ) , boost::begin( s8 ) , boost::begin( s9 ) , boost::begin( s10 ) , boost::begin( s11 ) , boost::begin( s12 ) , boost::begin( s13 ) , boost::begin( s14 ) , 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 S12 , class S13 , class S14 , class S15 , class Op >
|
Chris@16
|
123 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
|
124 {
|
Chris@16
|
125 detail::for_each15( boost::begin( s1 ) , boost::end( s1 ) , boost::begin( s2 ) , boost::begin( s3 ) , boost::begin( s4 ) , boost::begin( s5 ) , boost::begin( s6 ) , boost::begin( s7 ) , boost::begin( s8 ) , boost::begin( s9 ) , boost::begin( s10 ) , boost::begin( s11 ) , boost::begin( s12 ) , boost::begin( s13 ) , boost::begin( s14 ) , boost::begin( s15 ) , op );
|
Chris@16
|
126 }
|
Chris@16
|
127
|
Chris@101
|
128 template< typename S >
|
Chris@101
|
129 static typename norm_result_type<S>::type norm_inf( const S &s )
|
Chris@16
|
130 {
|
Chris@101
|
131 return detail::norm_inf( boost::begin( s ) , boost::end( s ) ,
|
Chris@101
|
132 static_cast< typename norm_result_type<S>::type >( 0 ) );
|
Chris@16
|
133 }
|
Chris@16
|
134
|
Chris@16
|
135 };
|
Chris@16
|
136
|
Chris@16
|
137 } // odeint
|
Chris@16
|
138 } // numeric
|
Chris@16
|
139 } // boost
|
Chris@16
|
140
|
Chris@16
|
141
|
Chris@16
|
142 #endif // BOOST_NUMERIC_ODEINT_ALGEBRA_RANGE_ALGEBRA_HPP_INCLUDED
|