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